diff --git a/assets/scripts/app/app.coffee b/assets/scripts/app/app.coffee
index c0375c53..3821e876 100644
--- a/assets/scripts/app/app.coffee
+++ b/assets/scripts/app/app.coffee
@@ -30,7 +30,7 @@ Travis.reopen
       @store = Travis.Store.create()
       @store.loadMany(Travis.Sponsor, Travis.SPONSORS)
 
-      @set('auth', Travis.Auth.create(store: @store, endpoint: Travis.config.api_endpoint))
+      @set('auth', Travis.Auth.create(app: this, endpoint: Travis.config.api_endpoint))
 
       @slider = new Travis.Slider()
       @pusher = new Travis.Pusher(Travis.config.pusher)
@@ -41,7 +41,7 @@ Travis.reopen
 
     signOut: ->
       @get('auth').signOut()
-      @get('router').send('showAuthenticated')
+      @get('router').send('goToRoot')
 
     receive: ->
       @store.receive.apply(@store, arguments)
diff --git a/assets/scripts/app/auth.coffee b/assets/scripts/app/auth.coffee
index fe24a78a..541b5427 100644
--- a/assets/scripts/app/auth.coffee
+++ b/assets/scripts/app/auth.coffee
@@ -16,9 +16,9 @@
   # if the user is in the session storage, we're using it. if we have a flag
   # for auto signin then we're trying to sign in.
   loadUser: ->
-    if user = sessionStorage?.getItem('travis.user')
+    if user = sessionStorage.getItem('travis.user')
       @setData(user: JSON.parse(user))
-    else if localStorage?.getItem('travis.auto_signin')
+    else if localStorage.getItem('travis.auto_signin')
       @trySignIn()
 
   # try signing in, but check later in case we have a timeout
@@ -34,7 +34,7 @@
     @forceSignIn() if @get('state') == 'signing-in'
 
   forceSignIn: ->
-    localStorage?.setItem('travis.auto_signin', 'true')
+    localStorage.setItem('travis.auto_signin', 'true')
     window.location = "#{@endpoint}/auth/handshake?redirect_uri=#{location}"
 
   signOut: ->
@@ -48,16 +48,18 @@
     user = @storeUser(data.user) if data?.user
     @set('state', if user then 'signed-in' else 'signed-out')
     @set('user',  if user then user else undefined)
+    @app.get('router').transitionTo('authenticated') if @app.get('router')
+    # Travis.app.get('router').route(@get('returnTo'))
 
   storeToken: (token) ->
-    sessionStorage?.setItem('travis.token', token)
+    sessionStorage.setItem('travis.token', token)
     @notifyPropertyChange('accessToken')
 
   storeUser: (user) ->
-    localStorage?.setItem('travis.auto_signin', 'true')
-    sessionStorage?.setItem('travis.user', JSON.stringify(user))
-    @store.load(Travis.User, user)
-    @store.find(Travis.User, user.id)
+    localStorage.setItem('travis.auto_signin', 'true')
+    sessionStorage.setItem('travis.user', JSON.stringify(user))
+    @app.store.load(Travis.User, user)
+    @app.store.find(Travis.User, user.id)
 
   receiveMessage: (event) ->
     if event.origin == @expectedOrigin()
diff --git a/assets/scripts/app/controllers.coffee b/assets/scripts/app/controllers.coffee
index 99830b9b..2a760bce 100644
--- a/assets/scripts/app/controllers.coffee
+++ b/assets/scripts/app/controllers.coffee
@@ -18,10 +18,12 @@ Travis.reopen
 
   TopController: Em.Controller.extend
     userBinding: 'Travis.app.currentUser'
+
   ApplicationController: Em.Controller.extend()
   MainController: Em.Controller.extend()
   StatsLayoutController: Em.Controller.extend()
   ProfileLayoutController: Em.Controller.extend()
+  AuthLayoutController: Em.Controller.extend()
 
 require 'controllers/accounts'
 require 'controllers/builds'
diff --git a/assets/scripts/app/routes.coffee b/assets/scripts/app/routes.coffee
index a99b2c9c..9906b92d 100644
--- a/assets/scripts/app/routes.coffee
+++ b/assets/scripts/app/routes.coffee
@@ -1,16 +1,18 @@
 Travis.Router = Ember.Router.extend
   location: 'history'
-  enableLogging: false
+  enableLogging: true
   initialState: 'loading'
 
   goToRoot: Ember.Route.transitionTo('root.home.show')
   goToStats: Ember.Route.transitionTo('root.stats')
+
   showRepository: Ember.Route.transitionTo('root.home.repository.show')
   showBuilds: Ember.Route.transitionTo('root.home.repository.builds.index')
   showBuild: Ember.Route.transitionTo('root.home.repository.builds.show')
   showPullRequests: Ember.Route.transitionTo('root.home.repository.pullRequests')
   showBranches: Ember.Route.transitionTo('root.home.repository.branches')
   showJob: Ember.Route.transitionTo('root.home.repository.job')
+
   showProfile: Ember.Route.transitionTo('root.profile')
   showAccount: Ember.Route.transitionTo('root.profile.account')
   showUserProfile: Ember.Route.transitionTo('root.profile.account.profile')
@@ -18,44 +20,37 @@ Travis.Router = Ember.Router.extend
   signedIn: ->
     !!Travis.app.get('auth.user')
 
-  requiresAuth: (path) ->
-    path == '/profile' && !@signedIn()
+  needsAuth: (path) ->
+    path.indexOf('/profile') == 0 && !@signedIn()
 
   loading: Ember.Route.extend
     routePath: (router, path) ->
-      router.set('lastAttemptedPath', path)
-      if router.requiresAuth(path)
-        router.send 'showUnauthenticated'
+      sessionStorage.setItem('travis.path', path)
+      if router.needsAuth(path)
+        router.transitionTo('root.auth')
+        Travis.app.signIn()
       else
-        router.send 'showAuthenticated'
-
-  # showUnauthenticated: Ember.State.transitionTo('unauthenticated.index')
-  showUnauthenticated: Ember.State.transitionTo('root.home.show')
-  showAuthenticated: Ember.State.transitionTo('authenticated.index')
-
-  # unauthenticated: Ember.Route.extend
-  #   index: Ember.Route.extend
-  #     route: '/'
-  #     connectOutlets: (router) ->
-  #       router.transitionTo('login')
-  #   login: Ember.Route.extend
-  #     route: '/login'
-  #     connectOutlets: (router) ->
-  #       router.get('applicationController').connectOutlet('login')
+        router.transitionTo('authenticated')
 
   authenticated: Ember.Route.extend
-    index: Ember.Route.extend
-      connectOutlets: (router) ->
-        router.transitionTo('root')
-
-        path = router.get('lastAttemptedPath')
-        if path && path != '/'
-          router.route(path)
+    connectOutlets: (router) ->
+      path = sessionStorage.getItem('travis.path')
+      sessionStorage.removeItem('travis.path')
+      router.transitionTo('root')
+      router.route(path) if path
 
   root: Ember.Route.extend
     initialState: 'home'
     loading: Ember.State.extend()
 
+    auth: Ember.Route.extend
+      route: '/auth'
+      connectOutlets: (router) ->
+        router.get('applicationController').connectOutlet('authLayout')
+        $('body').attr('id', 'auth')
+        router.get('authLayoutController').connectOutlet('top', 'top')
+        router.get('authLayoutController').connectOutlet('main', 'signin')
+
     stats: Ember.Route.extend
       route: '/stats'
       connectOutlets: (router) ->
diff --git a/assets/scripts/app/templates/auth/signin.hbs b/assets/scripts/app/templates/auth/signin.hbs
new file mode 100644
index 00000000..29ad1483
--- /dev/null
+++ b/assets/scripts/app/templates/auth/signin.hbs
@@ -0,0 +1,13 @@
+{{#if view.signingIn}}
+  <h1>Signing in</h1>
+  <p>
+    Trying to authenticate with GitHub.
+  </p>
+{{else}}
+  <h1>Sign in</h1>
+  <p>
+    <a href="#" {{action signIn target="Travis.app"}}>Sign in with GitHub</a>
+  </p>
+{{/if}}
+
+
diff --git a/assets/scripts/app/views.coffee b/assets/scripts/app/views.coffee
index 6978b1d1..a0ffb358 100644
--- a/assets/scripts/app/views.coffee
+++ b/assets/scripts/app/views.coffee
@@ -7,6 +7,7 @@ require 'ext/ember/namespace'
 
 @Travis.reopen
   HomeView:          Travis.View.extend(templateName: 'layouts/home')
+  AuthLayoutView:    Travis.View.extend(templateName: 'layouts/simple')
   ProfileLayoutView: Travis.View.extend(templateName: 'layouts/profile')
   StatsLayoutView:   Travis.View.extend(templateName: 'layouts/simple')
   ApplicationView:   Travis.View.extend(templateName: 'application')
@@ -18,5 +19,5 @@ require 'views/repo'
 require 'views/profile'
 require 'views/sidebar'
 require 'views/stats'
+require 'views/signin'
 require 'views/top'
-
diff --git a/assets/scripts/app/views/signin.coffee b/assets/scripts/app/views/signin.coffee
new file mode 100644
index 00000000..a61ca5bc
--- /dev/null
+++ b/assets/scripts/app/views/signin.coffee
@@ -0,0 +1,7 @@
+@Travis.reopen
+  SigninView: Travis.View.extend
+    templateName: 'auth/signin'
+
+    signingIn: (->
+      Travis.app.get('authState')
+    ).property('Travis.app.authState')
diff --git a/public/scripts/app.js b/public/scripts/app.js
index 3aa0f668..a2fe9d22 100644
--- a/public/scripts/app.js
+++ b/public/scripts/app.js
@@ -29619,4 +29619,4 @@ var _require=function(){function c(a,c){document.addEventListener?a.addEventList
 ++g&&setTimeout(c,0)})}}();
 (function(){!window.WebSocket&&window.MozWebSocket&&(window.WebSocket=window.MozWebSocket);if(window.WebSocket)Pusher.Transport=window.WebSocket,Pusher.TransportType="native";var c=(document.location.protocol=="http:"?Pusher.cdn_http:Pusher.cdn_https)+Pusher.VERSION,a=[];window.JSON||a.push(c+"/json2"+Pusher.dependency_suffix+".js");if(!window.WebSocket)window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION=!0,a.push(c+"/flashfallback"+Pusher.dependency_suffix+".js");var b=function(){return window.WebSocket?function(){Pusher.ready()}:
 function(){window.WebSocket?(Pusher.Transport=window.WebSocket,Pusher.TransportType="flash",window.WEB_SOCKET_SWF_LOCATION=c+"/WebSocketMain.swf",WebSocket.__addTask(function(){Pusher.ready()}),WebSocket.__initialize()):(Pusher.Transport=null,Pusher.TransportType="none",Pusher.ready())}}(),e=function(a){var b=function(){document.body?a():setTimeout(b,0)};b()},g=function(){e(b)};a.length>0?_require(a,g):g()})();
-;minispade.register('app', "(function() {(function() {\nminispade.require('auth');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('pusher');\nminispade.require('routes');\nminispade.require('slider');\nminispade.require('store');\nminispade.require('tailing');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n  Travis.reopen({\n    App: Em.Application.extend({\n      autoinit: false,\n      currentUserBinding: 'auth.user',\n      authStateBinding: 'auth.state',\n      init: function() {\n        this._super.apply(this, arguments);\n        this.store = Travis.Store.create();\n        this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n        this.set('auth', Travis.Auth.create({\n          store: this.store,\n          endpoint: Travis.config.api_endpoint\n        }));\n        this.slider = new Travis.Slider();\n        this.pusher = new Travis.Pusher(Travis.config.pusher);\n        return this.tailing = new Travis.Tailing();\n      },\n      signIn: function() {\n        return this.get('auth').signIn();\n      },\n      signOut: function() {\n        this.get('auth').signOut();\n        return this.get('router').send('showAuthenticated');\n      },\n      receive: function() {\n        return this.store.receive.apply(this.store, arguments);\n      },\n      toggleSidebar: function() {\n        var element;\n        $('body').toggleClass('maximized');\n        element = $('<span></span>');\n        $('#top .profile').append(element);\n        Em.run.later((function() {\n          return element.remove();\n        }), 10);\n        element = $('<span></span>');\n        $('#repository').append(element);\n        return Em.run.later((function() {\n          return element.remove();\n        }), 10);\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('auth', "(function() {(function() {\n\n  this.Travis.Auth = Ember.Object.extend({\n    iframe: $('<iframe id=\"auth-frame\" />').hide(),\n    timeout: 5000,\n    state: 'signed-out',\n    receivingEnd: \"\" + location.protocol + \"//\" + location.host,\n    init: function() {\n      var _this = this;\n      this.iframe.appendTo('body');\n      window.addEventListener('message', function(e) {\n        return _this.receiveMessage(e);\n      });\n      return this.loadUser();\n    },\n    accessToken: (function() {\n      return sessionStorage.getItem('travis.token');\n    }).property(),\n    loadUser: function() {\n      var user;\n      if (user = typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.getItem('travis.user') : void 0) {\n        return this.setData({\n          user: JSON.parse(user)\n        });\n      } else if (typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.getItem('travis.auto_signin') : void 0) {\n        return this.trySignIn();\n      }\n    },\n    signIn: function() {\n      this.set('state', 'signing-in');\n      this.trySignIn();\n      return Ember.run.later(this, this.checkSignIn.bind(this), this.timeout);\n    },\n    trySignIn: function() {\n      return this.iframe.attr('src', \"\" + this.endpoint + \"/auth/post_message?origin=\" + this.receivingEnd);\n    },\n    checkSignIn: function() {\n      if (this.get('state') === 'signing-in') {\n        return this.forceSignIn();\n      }\n    },\n    forceSignIn: function() {\n      if (typeof localStorage !== \"undefined\" && localStorage !== null) {\n        localStorage.setItem('travis.auto_signin', 'true');\n      }\n      return window.location = \"\" + this.endpoint + \"/auth/handshake?redirect_uri=\" + location;\n    },\n    signOut: function() {\n      if (typeof localStorage !== \"undefined\" && localStorage !== null) {\n        localStorage.clear();\n      }\n      if (typeof sessionStorage !== \"undefined\" && sessionStorage !== null) {\n        sessionStorage.clear();\n      }\n      return this.setData();\n    },\n    setData: function(data) {\n      var user;\n      if (typeof data === 'string') {\n        data = JSON.parse(data);\n      }\n      if (data != null ? data.token : void 0) {\n        this.storeToken(data.token);\n      }\n      if (data != null ? data.user : void 0) {\n        user = this.storeUser(data.user);\n      }\n      this.set('state', user ? 'signed-in' : 'signed-out');\n      return this.set('user', user ? user : void 0);\n    },\n    storeToken: function(token) {\n      if (typeof sessionStorage !== \"undefined\" && sessionStorage !== null) {\n        sessionStorage.setItem('travis.token', token);\n      }\n      return this.notifyPropertyChange('accessToken');\n    },\n    storeUser: function(user) {\n      if (typeof localStorage !== \"undefined\" && localStorage !== null) {\n        localStorage.setItem('travis.auto_signin', 'true');\n      }\n      if (typeof sessionStorage !== \"undefined\" && sessionStorage !== null) {\n        sessionStorage.setItem('travis.user', JSON.stringify(user));\n      }\n      this.store.load(Travis.User, user);\n      return this.store.find(Travis.User, user.id);\n    },\n    receiveMessage: function(event) {\n      if (event.origin === this.expectedOrigin()) {\n        this.setData(event.data);\n        return console.log(\"signed in as \" + event.data.user.login);\n      } else {\n        return console.log(\"unexpected message \" + event.origin + \": \" + event.data);\n      }\n    },\n    expectedOrigin: function() {\n      if (this.endpoint[0] === '/') {\n        return this.receivingEnd;\n      } else {\n        return this.endpoint;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=auth");minispade.register('controllers', "(function() {(function() {\nminispade.require('helpers');\nminispade.require('travis/ticker');\n\n  Travis.reopen({\n    Controller: Em.Controller.extend({\n      connectOutlet: function() {\n        var view, _connectedOutletViews;\n        view = this._super.apply(this, arguments);\n        if (view) {\n          _connectedOutletViews = Travis.app.get('_connectedOutletViews');\n          if (!_connectedOutletViews) {\n            _connectedOutletViews = [];\n          }\n          _connectedOutletViews.pushObject(view);\n          Travis.app.set('_connectedOutletViews', _connectedOutletViews);\n        }\n        return view;\n      }\n    }),\n    TopController: Em.Controller.extend({\n      userBinding: 'Travis.app.currentUser'\n    }),\n    ApplicationController: Em.Controller.extend(),\n    MainController: Em.Controller.extend(),\n    StatsLayoutController: Em.Controller.extend(),\n    ProfileLayoutController: Em.Controller.extend()\n  });\nminispade.require('controllers/accounts');\nminispade.require('controllers/builds');\nminispade.require('controllers/home');\nminispade.require('controllers/profile');\nminispade.require('controllers/repositories');\nminispade.require('controllers/repository');\nminispade.require('controllers/sidebar');\nminispade.require('controllers/stats');\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers");minispade.register('controllers/accounts', "(function() {(function() {\n\n  Travis.AccountsController = Ember.ArrayController.extend({\n    tab: 'accounts',\n    init: function() {\n      return this._super();\n    },\n    findByLogin: function(login) {\n      return this.find(function(account) {\n        return account.get('login') === 'login';\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/accounts");minispade.register('controllers/builds', "(function() {(function() {\n\n  Travis.BuildsController = Em.ArrayController.extend({\n    repositoryBinding: 'parent.repository',\n    contentBinding: 'parent.builds'\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/builds");minispade.register('controllers/home', "(function() {(function() {\n\n  Travis.HomeController = Travis.Controller.extend();\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/home");minispade.register('controllers/job', "(function() {(function() {\n\n\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/job");minispade.register('controllers/profile', "(function() {(function() {\n\n  Travis.ProfileController = Travis.Controller.extend({\n    name: 'profile',\n    userBinding: 'Travis.app.currentUser',\n    accountsBinding: 'Travis.app.router.accountsController',\n    account: (function() {\n      var login;\n      login = this.get('params.login') || Travis.app.get('currentUser.login');\n      return this.get('accounts').filter(function(account) {\n        if (account.get('login') === login) {\n          return account;\n        }\n      })[0];\n    }).property('accounts.length', 'params.login'),\n    activate: function(action, params) {\n      this.setParams(params || this.get('params'));\n      return this[\"view\" + ($.camelize(action))]();\n    },\n    viewHooks: function() {\n      this.connectTab('hooks');\n      return this.set('hooks', Travis.Hook.find({\n        owner_name: this.get('params.login') || Travis.app.get('currentUser.login')\n      }));\n    },\n    viewUser: function() {\n      return this.connectTab('user');\n    },\n    connectTab: function(tab) {\n      var viewClass;\n      viewClass = Travis[\"\" + ($.camelize(tab)) + \"View\"];\n      this.set('tab', tab);\n      return this.connectOutlet({\n        outletName: 'pane',\n        controller: this,\n        viewClass: viewClass\n      });\n    },\n    setParams: function(params) {\n      var key, value, _results;\n      this.set('params', {});\n      _results = [];\n      for (key in params) {\n        value = params[key];\n        _results.push(this.set(\"params.\" + key, params[key]));\n      }\n      return _results;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/profile");minispade.register('controllers/repositories', "(function() {(function() {\n\n  Travis.RepositoriesController = Ember.ArrayController.extend({\n    defaultTab: 'recent',\n    sortProperties: ['sortOrder'],\n    init: function() {\n      this.activate(this.defaultTab);\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    updateTimes: function() {\n      var content;\n      if (content = this.get('content')) {\n        content.forEach(function(r) {\n          return r.updateTimes();\n        });\n      }\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    activate: function(tab, params) {\n      this.set('tab', tab);\n      return this[\"view\" + ($.camelize(tab))](params);\n    },\n    viewRecent: function() {\n      return this.set('content', Travis.Repository.find());\n    },\n    viewOwned: function() {\n      return this.set('content', Travis.Repository.ownedBy(Travis.app.get('currentUser.login')));\n    },\n    viewSearch: function(params) {\n      return this.set('content', Travis.Repository.search(params.search));\n    },\n    searchObserver: (function() {\n      var search, tab;\n      search = this.get('search');\n      tab = search ? 'search' : 'recent';\n      return this.activate(tab, {\n        search: search\n      });\n    }).observes('search')\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repositories");minispade.register('controllers/repository', "(function() {(function() {\n\n  Travis.RepositoryController = Travis.Controller.extend({\n    bindings: [],\n    init: function() {\n      this._super.apply(this, arguments);\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    updateTimes: function() {\n      var build, builds;\n      if (builds = this.get('builds')) {\n        builds.forEach(function(b) {\n          return b.updateTimes();\n        });\n      }\n      if (build = this.get('build')) {\n        build.updateTimes();\n        build.get('jobs').forEach(function(j) {\n          return j.updateTimes();\n        });\n      }\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    activate: function(action) {\n      this._unbind();\n      return this[\"view\" + ($.camelize(action))]();\n    },\n    viewIndex: function() {\n      this._bind('repository', 'controllers.repositoriesController.firstObject');\n      this._bind('build', 'repository.lastBuild');\n      return this.connectTab('current');\n    },\n    viewCurrent: function() {\n      this.connectTab('current');\n      return this._bind('build', 'repository.lastBuild');\n    },\n    viewBuilds: function() {\n      this.connectTab('builds');\n      return this._bind('builds', 'repository.builds');\n    },\n    viewPullRequests: function() {\n      this.connectTab('pull_requests');\n      return this._bind('builds', 'repository.pullRequests');\n    },\n    viewBranches: function() {\n      this.connectTab('branches');\n      return this._bind('builds', 'repository.branches');\n    },\n    viewBuild: function() {\n      return this.connectTab('build');\n    },\n    viewJob: function() {\n      this._bind('build', 'job.build');\n      return this.connectTab('job');\n    },\n    repositoryObserver: (function() {\n      var repository;\n      repository = this.get('repository');\n      if (repository) {\n        return repository.select();\n      }\n    }).observes('repository.id'),\n    connectTab: function(tab) {\n      var name, viewClass;\n      name = tab === 'current' ? 'build' : tab;\n      viewClass = name === 'builds' || name === 'branches' || name === 'pull_requests' ? Travis.BuildsView : Travis[\"\" + ($.camelize(name)) + \"View\"];\n      this.set('tab', tab);\n      return this.connectOutlet({\n        outletName: 'pane',\n        controller: this,\n        viewClass: viewClass\n      });\n    },\n    _bind: function(to, from) {\n      return this.bindings.push(Ember.oneWay(this, to, from));\n    },\n    _unbind: function() {\n      var binding, _i, _len, _ref;\n      _ref = this.bindings;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        binding = _ref[_i];\n        binding.disconnect(this);\n      }\n      return this.bindings.length = 0;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repository");minispade.register('controllers/sidebar', "(function() {(function() {\n\n  Travis.reopen({\n    SidebarController: Em.ArrayController.extend({\n      init: function() {\n        this.tickables = [];\n        return Travis.Ticker.create({\n          target: this,\n          interval: Travis.INTERVALS.sponsors\n        });\n      },\n      tick: function() {\n        var tickable, _i, _len, _ref, _results;\n        _ref = this.tickables;\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          tickable = _ref[_i];\n          _results.push(tickable.tick());\n        }\n        return _results;\n      }\n    }),\n    QueuesController: Em.ArrayController.extend(),\n    WorkersController: Em.ArrayController.extend({\n      groups: (function() {\n        var content, groups, host, worker, _i, _len, _ref;\n        if (content = this.get('content')) {\n          groups = {};\n          _ref = content.toArray();\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            worker = _ref[_i];\n            host = worker.get('host');\n            if (!groups[host]) {\n              groups[host] = Em.ArrayProxy.create({\n                content: []\n              });\n            }\n            groups[host].pushObject(worker);\n          }\n          return $.values(groups);\n        }\n      }).property('content.length')\n    }),\n    SponsorsController: Em.ArrayController.extend({\n      page: 0,\n      arrangedContent: (function() {\n        return this.get('shuffled').slice(this.start(), this.end());\n      }).property('shuffled.length', 'page'),\n      shuffled: (function() {\n        var content;\n        if (content = this.get('content')) {\n          return $.shuffle(content);\n        } else {\n          return [];\n        }\n      }).property('content.length'),\n      tick: function() {\n        return this.set('page', this.isLast() ? 0 : this.get('page') + 1);\n      },\n      pages: (function() {\n        var length;\n        length = this.get('content.length');\n        if (length) {\n          return parseInt(length / this.get('perPage') + 1);\n        } else {\n          return 1;\n        }\n      }).property('length'),\n      isLast: function() {\n        return this.get('page') === this.get('pages') - 1;\n      },\n      start: function() {\n        return this.get('page') * this.get('perPage');\n      },\n      end: function() {\n        return this.start() + this.get('perPage');\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/sidebar");minispade.register('controllers/stats', "(function() {(function() {\n\n  Travis.StatsController = Travis.Controller.extend({\n    name: 'stats',\n    init: function() {\n      return this._super('top');\n    },\n    activate: function(action, params) {}\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/stats");minispade.register('helpers', "(function() {(function() {\nminispade.require('helpers/handlebars');\nminispade.require('helpers/helpers');\nminispade.require('helpers/urls');\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers");minispade.register('helpers/handlebars', "(function() {(function() {\n  var safe;\nminispade.require('ext/ember/bound_helper');\n\n  safe = function(string) {\n    return new Handlebars.SafeString(string);\n  };\n\n  Handlebars.registerHelper('tipsy', function(text, tip) {\n    return safe('<span class=\"tool-tip\" original-title=\"' + tip + '\">' + text + '</span>');\n  });\n\n  Handlebars.registerHelper('t', function(key) {\n    return safe(I18n.t(key));\n  });\n\n  Ember.registerBoundHelper('formatTime', function(value, options) {\n    return safe(Travis.Helpers.timeAgoInWords(value) || '-');\n  });\n\n  Ember.registerBoundHelper('formatDuration', function(duration, options) {\n    return safe(Travis.Helpers.timeInWords(duration));\n  });\n\n  Ember.registerBoundHelper('formatCommit', function(commit, options) {\n    if (commit) {\n      return safe(Travis.Helpers.formatCommit(commit.get('sha'), commit.get('branch')));\n    }\n  });\n\n  Ember.registerBoundHelper('formatSha', function(sha, options) {\n    return safe(Travis.Helpers.formatSha(sha));\n  });\n\n  Ember.registerBoundHelper('pathFrom', function(url, options) {\n    return safe(Travis.Helpers.pathFrom(url));\n  });\n\n  Ember.registerBoundHelper('formatMessage', function(message, options) {\n    return safe(Travis.Helpers.formatMessage(message, options));\n  });\n\n  Ember.registerBoundHelper('formatConfig', function(config, options) {\n    return safe(Travis.Helpers.formatConfig(config));\n  });\n\n  Ember.registerBoundHelper('formatLog', function(log, options) {\n    return Travis.Helpers.formatLog(log) || '';\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/handlebars");minispade.register('helpers/helpers', "(function() {(function() {\nminispade.require('travis/log');\nminispade.require('emoij');\n\n  this.Travis.Helpers = {\n    compact: function(object) {\n      var key, result, value, _ref;\n      result = {};\n      _ref = object || {};\n      for (key in _ref) {\n        value = _ref[key];\n        if (!$.isEmpty(value)) {\n          result[key] = value;\n        }\n      }\n      return result;\n    },\n    safe: function(string) {\n      return new Handlebars.SafeString(string);\n    },\n    colorForResult: function(result) {\n      if (result === 0) {\n        return 'green';\n      } else {\n        if (result === 1) {\n          return 'red';\n        } else {\n          return null;\n        }\n      }\n    },\n    formatCommit: function(sha, branch) {\n      return Travis.Helpers.formatSha(sha) + (branch ? \" (\" + branch + \")\" : '');\n    },\n    formatSha: function(sha) {\n      return (sha || '').substr(0, 7);\n    },\n    formatConfig: function(config) {\n      var values;\n      config = $.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'scala', 'jdk', 'python', 'perl');\n      values = $.map(config, function(value, key) {\n        value = (value && value.join ? value.join(', ') : value) || '';\n        return '%@: %@'.fmt($.camelize(key), value);\n      });\n      if (values.length === 0) {\n        return '-';\n      } else {\n        return values.join(', ');\n      }\n    },\n    formatMessage: function(message, options) {\n      message = message || '';\n      if (options.short) {\n        message = message.split(/\\n/)[0];\n      }\n      return this._emojize(this._escape(message)).replace(/\\n/g, '<br/>');\n    },\n    formatLog: function(log) {\n      return Travis.Log.filter(log);\n    },\n    pathFrom: function(url) {\n      return (url || '').split('/').pop();\n    },\n    timeAgoInWords: function(date) {\n      return $.timeago.distanceInWords(date);\n    },\n    durationFrom: function(started, finished) {\n      started = started && this._toUtc(new Date(this._normalizeDateString(started)));\n      finished = finished ? this._toUtc(new Date(this._normalizeDateString(finished))) : this._nowUtc();\n      if (started && finished) {\n        return Math.round((finished - started) / 1000);\n      } else {\n        return 0;\n      }\n    },\n    timeInWords: function(duration) {\n      var days, hours, minutes, result, seconds;\n      days = Math.floor(duration / 86400);\n      hours = Math.floor(duration % 86400 / 3600);\n      minutes = Math.floor(duration % 3600 / 60);\n      seconds = duration % 60;\n      if (days > 0) {\n        return 'more than 24 hrs';\n      } else {\n        result = [];\n        if (hours === 1) {\n          result.push(hours + ' hr');\n        }\n        if (hours > 1) {\n          result.push(hours + ' hrs');\n        }\n        if (minutes > 0) {\n          result.push(minutes + ' min');\n        }\n        if (seconds > 0) {\n          result.push(seconds + ' sec');\n        }\n        if (result.length > 0) {\n          return result.join(' ');\n        } else {\n          return '-';\n        }\n      }\n    },\n    _normalizeDateString: function(string) {\n      if (window.JHW) {\n        string = string.replace('T', ' ').replace(/-/g, '/');\n        string = string.replace('Z', '').replace(/\\..*$/, '');\n      }\n      return string;\n    },\n    _nowUtc: function() {\n      return this._toUtc(new Date());\n    },\n    _toUtc: function(date) {\n      return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n    },\n    _emojize: function(text) {\n      var emojis;\n      emojis = text.match(/:\\S+?:/g);\n      if (emojis !== null) {\n        $.each(emojis.uniq(), function(ix, emoji) {\n          var image, strippedEmoji;\n          strippedEmoji = emoji.substring(1, emoji.length - 1);\n          if (EmojiDictionary.indexOf(strippedEmoji) !== -1) {\n            image = '<img class=\\'emoji\\' title=\\'' + emoji + '\\' alt=\\'' + emoji + '\\' src=\\'' + '/images/emoji/' + strippedEmoji + '.png\\'/>';\n            return text = text.replace(new RegExp(emoji, 'g'), image);\n          }\n        });\n      }\n      return text;\n    },\n    _escape: function(text) {\n      return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/helpers");minispade.register('helpers/urls', "(function() {(function() {\n\n  this.Travis.Urls = {\n    repository: function(slug) {\n      return \"/\" + slug;\n    },\n    builds: function(slug) {\n      return \"/\" + slug + \"/builds\";\n    },\n    pullRequests: function(slug) {\n      return \"/\" + slug + \"/pull_requests\";\n    },\n    branches: function(slug) {\n      return \"/\" + slug + \"/branches\";\n    },\n    build: function(slug, id) {\n      return \"/\" + slug + \"/builds/\" + id;\n    },\n    job: function(slug, id) {\n      return \"/\" + slug + \"/jobs/\" + id;\n    },\n    githubCommit: function(slug, sha) {\n      return \"http://github.com/\" + slug + \"/commit/\" + sha;\n    },\n    githubRepository: function(slug) {\n      return \"http://github.com/\" + slug;\n    },\n    githubWatchers: function(slug) {\n      return \"http://github.com/\" + slug + \"/watchers\";\n    },\n    githubNetwork: function(slug) {\n      return \"http://github.com/\" + slug + \"/network\";\n    },\n    githubAdmin: function(slug) {\n      return \"http://github.com/\" + slug + \"/admin/hooks#travis_minibucket\";\n    },\n    statusImage: function(slug, branch) {\n      return (\"https://secure.travis-ci.org/\" + slug + \".png\") + (branch ? \"?branch=\" + branch : '');\n    },\n    email: function(email) {\n      return \"mailto:\" + email;\n    },\n    account: function(login) {\n      return \"/profile/\" + login;\n    },\n    user: function(login) {\n      return \"/profile/\" + login + \"/me\";\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/urls");minispade.register('models', "(function() {(function() {\nminispade.require('models/extensions');\nminispade.require('models/account');\nminispade.require('models/artifact');\nminispade.require('models/branch');\nminispade.require('models/build');\nminispade.require('models/commit');\nminispade.require('models/hook');\nminispade.require('models/job');\nminispade.require('models/repository');\nminispade.require('models/sponsor');\nminispade.require('models/user');\nminispade.require('models/worker');\n\n}).call(this);\n\n})();\n//@ sourceURL=models");minispade.register('models/account', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Account = Travis.Model.extend({\n    primaryKey: 'login',\n    login: DS.attr('string'),\n    name: DS.attr('string'),\n    type: DS.attr('string'),\n    reposCount: DS.attr('number'),\n    urlGithub: (function() {\n      return \"http://github.com/\" + (this.get('login'));\n    }).property()\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/account");minispade.register('models/artifact', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Artifact = Travis.Model.extend({\n    body: DS.attr('string'),\n    init: function() {\n      this._super.apply(this, arguments);\n      return this.set('queue', Ember.A([]));\n    },\n    append: function(body) {\n      if (this.get('isLoaded')) {\n        return this.set('body', this.get('body') + body);\n      } else {\n        return this.get('queue').pushObject(body);\n      }\n    },\n    recordDidLoad: (function() {\n      var queue;\n      if (this.get('isLoaded')) {\n        queue = this.get('queue');\n        if (queue.get('length') > 0) {\n          return this.append(queue.toArray().join(''));\n        }\n      }\n    }).observes('isLoaded')\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/artifact");minispade.register('models/branch', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Branch = Travis.Model.extend(Travis.Helpers, {\n    repositoryId: DS.attr('number'),\n    commitId: DS.attr('number'),\n    number: DS.attr('number'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    result: DS.attr('number'),\n    duration: DS.attr('number'),\n    startedAt: DS.attr('string'),\n    finishedAt: DS.attr('string'),\n    commit: DS.belongsTo('Travis.Commit'),\n    repository: (function() {\n      if (this.get('repositoryId')) {\n        return Travis.Repository.find(this.get('repositoryId'));\n      }\n    }).property('repositoryId'),\n    updateTimes: function() {\n      this.notifyPropertyChange('started_at');\n      return this.notifyPropertyChange('finished_at');\n    }\n  });\n\n  this.Travis.Branch.reopenClass({\n    byRepositoryId: function(id) {\n      return this.find({\n        repository_id: id\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/branch");minispade.register('models/build', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Build = Travis.Model.extend(Travis.DurationCalculations, {\n    eventType: DS.attr('string'),\n    repositoryId: DS.attr('number'),\n    commitId: DS.attr('number'),\n    state: DS.attr('string'),\n    number: DS.attr('number'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    result: DS.attr('number'),\n    _duration: DS.attr('number', {\n      key: 'duration'\n    }),\n    startedAt: DS.attr('string', {\n      key: 'started_at'\n    }),\n    finishedAt: DS.attr('string', {\n      key: 'finished_at'\n    }),\n    repository: DS.belongsTo('Travis.Repository'),\n    commit: DS.belongsTo('Travis.Commit'),\n    jobs: DS.hasMany('Travis.Job', {\n      key: 'job_ids'\n    }),\n    config: (function() {\n      return Travis.Helpers.compact(this.get('data.config'));\n    }).property('data.config'),\n    isMatrix: (function() {\n      return this.get('data.job_ids.length') > 1;\n    }).property('data.job_ids.length'),\n    requiredJobs: (function() {\n      return this.get('jobs').filter(function(data) {\n        return !data.get('allowFailure');\n      });\n    }).property('jobs.@each.allowFailure'),\n    allowedFailureJobs: (function() {\n      return this.get('jobs').filter(function(data) {\n        return data.get('allowFailure');\n      });\n    }).property('jobs.@each.allowFailure'),\n    configKeys: (function() {\n      var config, headers, key, keys;\n      if (!(config = this.get('config'))) {\n        return [];\n      }\n      keys = $.intersect($.keys(config), Travis.CONFIG_KEYS);\n      headers = (function() {\n        var _i, _len, _ref, _results;\n        _ref = ['build.job', 'build.duration', 'build.finished_at'];\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          key = _ref[_i];\n          _results.push(I18n.t(key));\n        }\n        return _results;\n      })();\n      return $.map(headers.concat(keys), function(key) {\n        return $.camelize(key);\n      });\n    }).property('config')\n  });\n\n  this.Travis.Build.reopenClass({\n    byRepositoryId: function(id, parameters) {\n      return this.find($.extend(parameters || {}, {\n        repository_id: id\n      }));\n    },\n    olderThanNumber: function(id, build_number) {\n      return this.find({\n        url: \"/builds\",\n        repository_id: id,\n        after_number: build_number\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/build");minispade.register('models/commit', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Commit = Travis.Model.extend({\n    buildId: DS.attr('number'),\n    sha: DS.attr('string'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    compareUrl: DS.attr('string'),\n    authorName: DS.attr('string'),\n    authorEmail: DS.attr('string'),\n    committerName: DS.attr('string'),\n    committerEmail: DS.attr('string'),\n    build: DS.belongsTo('Travis.Build', {\n      key: 'buildId'\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/commit");minispade.register('models/extensions', "(function() {(function() {\n\n  Travis.DurationCalculations = Ember.Mixin.create({\n    duration: (function() {\n      var duration;\n      if (duration = this.get('_duration')) {\n        return duration;\n      } else {\n        return Travis.Helpers.durationFrom(this.get('startedAt'), this.get('finishedAt'));\n      }\n    }).property('_duration', 'finishedAt', 'startedAt'),\n    updateTimes: function() {\n      this.notifyPropertyChange('_duration');\n      return this.notifyPropertyChange('finished_at');\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/extensions");minispade.register('models/hook', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Hook = Travis.Model.extend({\n    name: DS.attr('string'),\n    ownerName: DS.attr('string'),\n    description: DS.attr('string'),\n    active: DS.attr('boolean'),\n    account: (function() {\n      return this.get('slug').split('/')[0];\n    }).property('slug'),\n    slug: (function() {\n      return \"\" + (this.get('ownerName')) + \"/\" + (this.get('name'));\n    }).property('ownerName', 'name'),\n    urlGithub: (function() {\n      return \"http://github.com/\" + (this.get('slug'));\n    }).property(),\n    urlGithubAdmin: (function() {\n      return \"http://github.com/\" + (this.get('slug')) + \"/admin/hooks#travis_minibucket\";\n    }).property(),\n    toggle: function() {\n      var transaction;\n      transaction = this.get('store').transaction();\n      transaction.add(this);\n      this.set('active', !this.get('active'));\n      return transaction.commit();\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/hook");minispade.register('models/job', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Job = Travis.Model.extend(Travis.DurationCalculations, {\n    repositoryId: DS.attr('number'),\n    buildId: DS.attr('number'),\n    commitId: DS.attr('number'),\n    logId: DS.attr('number'),\n    queue: DS.attr('string'),\n    state: DS.attr('string'),\n    number: DS.attr('string'),\n    result: DS.attr('number'),\n    _duration: DS.attr('number', {\n      key: 'duration'\n    }),\n    startedAt: DS.attr('string'),\n    finishedAt: DS.attr('string'),\n    allowFailure: DS.attr('boolean', {\n      key: 'allow_failure'\n    }),\n    repository: DS.belongsTo('Travis.Repository', {\n      key: 'repository_id'\n    }),\n    build: DS.belongsTo('Travis.Build', {\n      key: 'build_id'\n    }),\n    commit: DS.belongsTo('Travis.Commit', {\n      key: 'commit_id'\n    }),\n    log: DS.belongsTo('Travis.Artifact', {\n      key: 'log_id'\n    }),\n    isQueued: (function() {}).property('state'),\n    config: (function() {\n      return Travis.Helpers.compact(this.get('data.config'));\n    }).property('data.config'),\n    sponsor: (function() {\n      return this.get('data.sponsor');\n    }).property('data.sponsor'),\n    configValues: (function() {\n      var config;\n      if (config = this.get('config')) {\n        return $.values($.only.apply(config, Travis.CONFIG_KEYS));\n      } else {\n        return [];\n      }\n    }).property('config'),\n    appendLog: function(text) {\n      var log;\n      if (log = this.get('log')) {\n        return log.append(text);\n      }\n    },\n    subscribe: function() {\n      var id;\n      if (id = this.get('id')) {\n        return Travis.app.pusher.subscribe(\"job-\" + id);\n      }\n    },\n    onStateChange: (function() {\n      if (this.get('state') === 'finished') {\n        return Travis.app.pusher.unsubscribe(\"job-\" + (this.get('id')));\n      }\n    }).observes('state')\n  });\n\n  this.Travis.Job.reopenClass({\n    queued: function(queue) {\n      this.find();\n      return Travis.app.store.filter(this, function(job) {\n        var queued;\n        queued = ['created', 'queued'].indexOf(job.get('state')) !== -1;\n        return queued && job.get('queue') === (\"builds.\" + queue);\n      });\n    },\n    findMany: function(ids) {\n      return Travis.app.store.findMany(this, ids);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/job");minispade.register('models/repository', "(function() {(function() {\nminispade.require('travis/expandable_record_array');\nminispade.require('travis/model');\n\n  this.Travis.Repository = Travis.Model.extend({\n    slug: DS.attr('string'),\n    description: DS.attr('string'),\n    lastBuildId: DS.attr('number'),\n    lastBuildNumber: DS.attr('string'),\n    lastBuildResult: DS.attr('number'),\n    lastBuildStartedAt: DS.attr('string'),\n    lastBuildFinishedAt: DS.attr('string'),\n    lastBuild: DS.belongsTo('Travis.Build'),\n    builds: (function() {\n      var array, builds, id;\n      id = this.get('id');\n      builds = Travis.Build.byRepositoryId(id, {\n        event_type: 'push'\n      });\n      array = Travis.ExpandableRecordArray.create({\n        type: Travis.Build,\n        content: Ember.A([]),\n        store: this.get('store')\n      });\n      array.load(builds);\n      return array;\n    }).property(),\n    pullRequests: (function() {\n      var array, builds, id;\n      id = this.get('id');\n      builds = Travis.Build.byRepositoryId(id, {\n        event_type: 'pull_request'\n      });\n      array = Travis.ExpandableRecordArray.create({\n        type: Travis.Build,\n        content: Ember.A([]),\n        store: this.get('store')\n      });\n      array.load(builds);\n      return array;\n    }).property(),\n    branches: (function() {\n      return Travis.Branch.byRepositoryId(this.get('id'));\n    }).property(),\n    owner: (function() {\n      return (this.get('slug') || '').split('/')[0];\n    }).property('slug'),\n    name: (function() {\n      return (this.get('slug') || '').split('/')[1];\n    }).property('slug'),\n    lastBuildDuration: (function() {\n      var duration;\n      duration = this.get('data.last_build_duration');\n      if (!duration) {\n        duration = Travis.Helpers.durationFrom(this.get('lastBuildStartedAt'), this.get('lastBuildFinishedAt'));\n      }\n      return duration;\n    }).property('data.last_build_duration', 'lastBuildStartedAt', 'lastBuildFinishedAt'),\n    sortOrder: (function() {\n      var lastBuildFinishedAt;\n      if (lastBuildFinishedAt = this.get('lastBuildFinishedAt')) {\n        return -new Date(lastBuildFinishedAt).getTime();\n      } else {\n        return -new Date('9999').getTime() - parseInt(this.get('lastBuildId'));\n      }\n    }).property('lastBuildFinishedAt', 'lastBuildId'),\n    stats: (function() {\n      var _this = this;\n      return this.get('_stats') || $.get(\"https://api.github.com/repos/\" + (this.get('slug')), function(data) {\n        _this.set('_stats', data);\n        return _this.notifyPropertyChange('stats');\n      }) && {};\n    }).property(),\n    select: function() {\n      return Travis.Repository.select(this.get('id'));\n    },\n    updateTimes: function() {\n      return this.notifyPropertyChange('lastBuildDuration');\n    }\n  });\n\n  this.Travis.Repository.reopenClass({\n    recent: function() {\n      return this.find();\n    },\n    ownedBy: function(login) {\n      return this.find({\n        owner_name: login,\n        orderBy: 'name'\n      });\n    },\n    search: function(query) {\n      return this.find({\n        search: query,\n        orderBy: 'name'\n      });\n    },\n    bySlug: function(slug) {\n      var repo;\n      repo = $.select(this.find().toArray(), function(repo) {\n        return repo.get('slug') === slug;\n      });\n      if (repo.length > 0) {\n        return repo;\n      } else {\n        return this.find({\n          slug: slug\n        });\n      }\n    },\n    select: function(id) {\n      return this.find().forEach(function(repository) {\n        return repository.set('selected', repository.get('id') === id);\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/repository");minispade.register('models/sponsor', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Sponsor = Travis.Model.extend({\n    type: DS.attr('string'),\n    url: DS.attr('string'),\n    link: DS.attr('string'),\n    image: (function() {\n      return \"/images/sponsors/\" + (this.get('data.image'));\n    }).property('data.image')\n  });\n\n  Travis.Sponsor.reopenClass({\n    decks: function() {\n      return this.platinum().concat(this.gold());\n    },\n    platinum: function() {\n      var platinum, sponsor, _i, _len, _results;\n      platinum = this.byType('platinum').toArray();\n      _results = [];\n      for (_i = 0, _len = platinum.length; _i < _len; _i++) {\n        sponsor = platinum[_i];\n        _results.push([sponsor]);\n      }\n      return _results;\n    },\n    gold: function() {\n      var gold, _results;\n      gold = this.byType('gold').toArray();\n      _results = [];\n      while (gold.length > 0) {\n        _results.push(gold.splice(0, 2));\n      }\n      return _results;\n    },\n    links: function() {\n      return this.byType('silver');\n    },\n    byType: function() {\n      var types;\n      types = Array.prototype.slice.apply(arguments);\n      return Travis.Sponsor.filter(function(sponsor) {\n        return types.indexOf(sponsor.get('type')) !== -1;\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/sponsor");minispade.register('models/user', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('travis/model');\n\n  this.Travis.User = Travis.Model.extend(Travis.Ajax, {\n    name: DS.attr('string'),\n    email: DS.attr('string'),\n    login: DS.attr('string'),\n    token: DS.attr('string'),\n    locale: DS.attr('string'),\n    gravatarId: DS.attr('string'),\n    isSyncing: DS.attr('boolean'),\n    syncedAt: DS.attr('string'),\n    repoCount: DS.attr('number'),\n    init: function() {\n      if (this.get('isSyncing')) {\n        this.poll();\n      }\n      this._super();\n      return Ember.run.next(this, function() {\n        var transaction;\n        transaction = this.get('store').transaction();\n        return transaction.add(this);\n      });\n    },\n    urlGithub: (function() {\n      return \"https://github.com/\" + (this.get('login'));\n    }).property(),\n    updateLocale: function(locale) {\n      var observer, self, transaction;\n      this.setWithSession('locale', locale);\n      transaction = this.get('transaction');\n      transaction.commit();\n      self = this;\n      observer = function() {\n        if (!self.get('isSaving')) {\n          self.removeObserver('isSaving', observer);\n          transaction = self.get('store').transaction();\n          return transaction.add(self);\n        }\n      };\n      return this.addObserver('isSaving', observer);\n    },\n    type: (function() {\n      return 'user';\n    }).property(),\n    sync: function() {\n      this.post('/users/sync');\n      this.setWithSession('isSyncing', true);\n      return this.poll();\n    },\n    poll: function() {\n      var _this = this;\n      return this.ajax('/users', 'get', {\n        success: function(data) {\n          if (data.user.is_syncing) {\n            return Ember.run.later(_this, _this.poll.bind(_this), 3000);\n          } else {\n            _this.set('isSyncing', false);\n            return _this.setWithSession('syncedAt', data.user.synced_at);\n          }\n        }\n      });\n    },\n    setWithSession: function(name, value) {\n      var user;\n      this.set(name, value);\n      user = JSON.parse(typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.getItem('travis.user') : void 0);\n      user[$.underscore(name)] = this.get(name);\n      return typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.setItem('travis.user', JSON.stringify(user)) : void 0;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/user");minispade.register('models/worker', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Worker = Travis.Model.extend({\n    state: DS.attr('string'),\n    name: DS.attr('string'),\n    host: DS.attr('string'),\n    lastSeenAt: DS.attr('string'),\n    payload: (function() {\n      return this.get('data.payload');\n    }).property('data.payload'),\n    number: (function() {\n      return this.get('name').match(/\\d+$/)[0];\n    }).property('name'),\n    isWorking: (function() {\n      return this.get('state') === 'working';\n    }).property('state'),\n    repository: (function() {\n      return Travis.Repository.find(this.get('payload.repository.id'));\n    }).property('payload.repository.id'),\n    job_id: (function() {\n      return this.get('payload.job.id');\n    }).property('payload.job.id'),\n    job: (function() {\n      return Travis.Job.find(this.get('job_id'));\n    }).property('job_id')\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/worker");minispade.register('pusher', "(function() {(function() {\n\n  Travis.Pusher = function(config) {\n    if (config) {\n      this.init(config);\n    }\n    return this;\n  };\n\n  $.extend(Travis.Pusher, {\n    CHANNELS: ['common'],\n    CHANNEL_PREFIX: ''\n  });\n\n  $.extend(Travis.Pusher.prototype, {\n    active_channels: [],\n    init: function(config) {\n      var channel, _i, _len, _ref, _results;\n      Pusher.warn = this.warn.bind(this);\n      this.pusher = new Pusher(config.key);\n      _ref = Travis.Pusher.CHANNELS;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        channel = _ref[_i];\n        _results.push(this.subscribe(channel));\n      }\n      return _results;\n    },\n    subscribe: function(channel) {\n      var _this = this;\n      if (this.pusher && this.active_channels.indexOf(channel) === -1) {\n        this.active_channels.push(channel);\n        return this.pusher.subscribe(this.prefix(channel)).bind_all(function(event, data) {\n          return _this.receive(event, data);\n        });\n      }\n    },\n    unsubscribe: function(channel) {\n      var ix;\n      ix = this.active_channels.indexOf(channel);\n      if (this.pusher && ix === -1) {\n        this.active_channels.splice(ix, 1);\n        return this.pusher.unsubscribe(this.prefix(channel));\n      }\n    },\n    prefix: function(channel) {\n      return \"\" + Travis.Pusher.CHANNEL_PREFIX + channel;\n    },\n    receive: function(event, data) {\n      if (event.substr(0, 6) === 'pusher') {\n        return;\n      }\n      if (data.id) {\n        data = this.normalize(event, data);\n      }\n      return Ember.run.next(function() {\n        return Travis.app.store.receive(event, data);\n      });\n    },\n    normalize: function(event, data) {\n      switch (event) {\n        case 'build:started':\n        case 'build:finished':\n          return data;\n        case 'job:created':\n        case 'job:started':\n        case 'job:finished':\n        case 'job:log':\n          if (data.queue) {\n            data.queue = data.queue.replace('builds.', '');\n          }\n          return {\n            job: data\n          };\n        case 'worker:added':\n        case 'worker:updated':\n        case 'worker:removed':\n          return {\n            worker: data\n          };\n      }\n    },\n    warn: function(type, warning) {\n      if (!this.ignoreWarning(warning)) {\n        return console.warn(warning);\n      }\n    },\n    ignoreWarning: function(warning) {\n      var message, _ref;\n      if (message = (_ref = warning.data) != null ? _ref.message : void 0) {\n        return message.indexOf('Existing subscription') === 0 || message.indexOf('No current subscription') === 0;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=pusher");minispade.register('routes', "(function() {(function() {\n\n  Travis.Router = Ember.Router.extend({\n    location: 'history',\n    enableLogging: false,\n    initialState: 'loading',\n    goToRoot: Ember.Route.transitionTo('root.home.show'),\n    goToStats: Ember.Route.transitionTo('root.stats'),\n    showRepository: Ember.Route.transitionTo('root.home.repository.show'),\n    showBuilds: Ember.Route.transitionTo('root.home.repository.builds.index'),\n    showBuild: Ember.Route.transitionTo('root.home.repository.builds.show'),\n    showPullRequests: Ember.Route.transitionTo('root.home.repository.pullRequests'),\n    showBranches: Ember.Route.transitionTo('root.home.repository.branches'),\n    showJob: Ember.Route.transitionTo('root.home.repository.job'),\n    showProfile: Ember.Route.transitionTo('root.profile'),\n    showAccount: Ember.Route.transitionTo('root.profile.account'),\n    showUserProfile: Ember.Route.transitionTo('root.profile.account.profile'),\n    signedIn: function() {\n      return !!Travis.app.get('auth.user');\n    },\n    requiresAuth: function(path) {\n      return path === '/profile' && !this.signedIn();\n    },\n    loading: Ember.Route.extend({\n      routePath: function(router, path) {\n        router.set('lastAttemptedPath', path);\n        if (router.requiresAuth(path)) {\n          return router.send('showUnauthenticated');\n        } else {\n          return router.send('showAuthenticated');\n        }\n      }\n    }),\n    showUnauthenticated: Ember.State.transitionTo('root.home.show'),\n    showAuthenticated: Ember.State.transitionTo('authenticated.index'),\n    authenticated: Ember.Route.extend({\n      index: Ember.Route.extend({\n        connectOutlets: function(router) {\n          var path;\n          router.transitionTo('root');\n          path = router.get('lastAttemptedPath');\n          if (path && path !== '/') {\n            return router.route(path);\n          }\n        }\n      })\n    }),\n    root: Ember.Route.extend({\n      initialState: 'home',\n      loading: Ember.State.extend(),\n      stats: Ember.Route.extend({\n        route: '/stats',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('statsLayout');\n          $('body').attr('id', 'stats');\n          router.get('statsLayoutController').connectOutlet('top', 'top');\n          return router.get('statsLayoutController').connectOutlet('main', 'stats');\n        }\n      }),\n      profile: Ember.Route.extend({\n        initialState: 'index',\n        route: '/profile',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('profileLayout');\n          $('body').attr('id', 'profile');\n          router.get('accountsController').set('content', Travis.Account.find());\n          router.get('profileLayoutController').connectOutlet('top', 'top');\n          return router.get('profileLayoutController').connectOutlet('left', 'accounts');\n        },\n        index: Ember.Route.extend({\n          route: '/',\n          connectOutlets: function(router) {\n            router.get('profileLayoutController').connectOutlet('main', 'profile');\n            return router.get('profileController').activate('hooks');\n          }\n        }),\n        account: Ember.Route.extend({\n          initialState: 'index',\n          route: '/:login',\n          connectOutlets: function(router, account) {\n            var params;\n            if (account) {\n              params = {\n                login: account.get('login')\n              };\n              return router.get('profileController').setParams(params);\n            } else {\n              return router.send('showProfile');\n            }\n          },\n          deserialize: function(router, params) {\n            return router.get('accountsController').findByLogin(params.login);\n          },\n          serialize: function(router, account) {\n            if (account) {\n              return {\n                login: account.get('login')\n              };\n            } else {\n              return {};\n            }\n          },\n          index: Ember.Route.extend({\n            route: '/',\n            connectOutlets: function(router) {\n              return router.get('profileController').activate('hooks');\n            }\n          }),\n          profile: Ember.Route.extend({\n            route: '/profile',\n            connectOutlets: function(router) {\n              return router.get('profileController').activate('user');\n            }\n          })\n        })\n      }),\n      home: Ember.Route.extend({\n        initialState: 'show',\n        route: '/',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('home');\n          $('body').attr('id', 'home');\n          router.get('homeController').connectOutlet('left', 'repositories');\n          router.get('homeController').connectOutlet('right', 'sidebar');\n          router.get('homeController').connectOutlet('top', 'top');\n          return router.get('homeController').connectOutlet('main', 'repository');\n        },\n        show: Ember.Route.extend({\n          route: '/',\n          connectOutlets: function(router) {\n            return router.get('repositoryController').activate('index');\n          }\n        }),\n        repository: Ember.Route.extend({\n          initialState: 'show',\n          route: '/:owner/:name',\n          connectOutlets: function(router, repository) {\n            return router.get('repositoryController').set('repository', repository);\n          },\n          deserialize: function(router, params) {\n            var deferred, observer, repos, slug;\n            slug = \"\" + params.owner + \"/\" + params.name;\n            repos = Travis.Repository.bySlug(slug);\n            deferred = $.Deferred();\n            observer = function() {\n              if (repos.get('isLoaded')) {\n                repos.removeObserver('isLoaded', observer);\n                return deferred.resolve(repos.objectAt(0));\n              }\n            };\n            repos.addObserver('isLoaded', observer);\n            return deferred.promise();\n          },\n          serialize: function(router, repository) {\n            if (repository) {\n              return {\n                owner: repository.get('owner'),\n                name: repository.get('name')\n              };\n            } else {\n              return {};\n            }\n          },\n          show: Ember.Route.extend({\n            route: '/',\n            connectOutlets: function(router) {\n              return router.get('repositoryController').activate('current');\n            }\n          }),\n          builds: Ember.Route.extend({\n            route: '/builds',\n            initialState: 'index',\n            index: Ember.Route.extend({\n              route: '/',\n              connectOutlets: function(router, repository) {\n                return router.get('repositoryController').activate('builds');\n              }\n            }),\n            show: Ember.Route.extend({\n              route: '/:build_id',\n              connectOutlets: function(router, build) {\n                if (!build.get) {\n                  build = Travis.Build.find(build);\n                }\n                router.get('repositoryController').set('build', build);\n                return router.get('repositoryController').activate('build');\n              },\n              serialize: function(router, build) {\n                if (build.get) {\n                  return {\n                    build_id: build.get('id')\n                  };\n                } else {\n                  return {\n                    build_id: build\n                  };\n                }\n              },\n              deserialize: function(router, params) {\n                var build, deferred, observer;\n                build = Travis.Build.find(params.build_id);\n                deferred = $.Deferred();\n                observer = function() {\n                  if (build.get('id')) {\n                    build.removeObserver('id', observer);\n                    return deferred.resolve(build);\n                  }\n                };\n                build.addObserver('id', observer);\n                return deferred.promise();\n              }\n            })\n          }),\n          pullRequests: Ember.Route.extend({\n            route: '/pull_requests',\n            connectOutlets: function(router, repository) {\n              return router.get('repositoryController').activate('pull_requests');\n            }\n          }),\n          branches: Ember.Route.extend({\n            route: '/branches',\n            connectOutlets: function(router, repository) {\n              return router.get('repositoryController').activate('branches');\n            }\n          }),\n          job: Ember.Route.extend({\n            route: '/jobs/:job_id',\n            connectOutlets: function(router, job) {\n              if (!job.get) {\n                job = Travis.Job.find(job);\n              }\n              router.get('repositoryController').set('job', job);\n              return router.get('repositoryController').activate('job');\n            },\n            serialize: function(router, job) {\n              if (job.get) {\n                return {\n                  job_id: job.get('id')\n                };\n              } else {\n                return {\n                  job_id: job\n                };\n              }\n            },\n            deserialize: function(router, params) {\n              var deferred, job, observer;\n              job = Travis.Job.find(params.job_id);\n              deferred = $.Deferred();\n              observer = function() {\n                if (job.get('id')) {\n                  job.removeObserver('id', observer);\n                  return deferred.resolve(job);\n                }\n              };\n              job.addObserver('id', observer);\n              return deferred.promise();\n            }\n          })\n        })\n      })\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=routes");minispade.register('slider', "(function() {(function() {\n\n  this.Travis.Slider = function() {\n    if ((typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.getItem('travis.maximized') : void 0) === 'true') {\n      this.minimize();\n    }\n    return this;\n  };\n\n  $.extend(Travis.Slider.prototype, {\n    persist: function() {\n      return typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.setItem('travis.maximized', this.isMinimized()) : void 0;\n    },\n    isMinimized: function() {\n      return $('body').hasClass('maximized');\n    },\n    minimize: function() {\n      return $('body').addClass('maximized');\n    },\n    toggle: function() {\n      var element;\n      $('body').toggleClass('maximized');\n      this.persist();\n      element = $('<span></span>');\n      $('#top .profile').append(element);\n      return Em.run.later((function() {\n        return element.remove();\n      }), 10);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=slider");minispade.register('store', "(function() {(function() {\n  var DATA_PROXY,\n    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\nminispade.require('store/rest_adapter');\n\n  DATA_PROXY = {\n    get: function(name) {\n      return this.savedData[name];\n    }\n  };\n\n  Travis.Store = DS.Store.extend({\n    revision: 4,\n    adapter: Travis.RestAdapter.create(),\n    merge: function(type, id, hash) {\n      var clientId, data, dataCache, primaryKey, record, recordCache, typeMap;\n      if (hash === void 0) {\n        hash = id;\n        primaryKey = type.proto().primaryKey;\n        Ember.assert(\"A data hash was loaded for a record of type \" + type.toString() + \" but no primary key '\" + primaryKey + \"' was provided.\", hash[primaryKey]);\n        id = hash[primaryKey];\n      }\n      typeMap = this.typeMapFor(type);\n      dataCache = typeMap.cidToHash;\n      clientId = typeMap.idToCid[id];\n      recordCache = this.get('recordCache');\n      if (clientId !== void 0) {\n        if (data = dataCache[clientId]) {\n          $.extend(data, hash);\n        } else {\n          dataCache[clientId] = hash;\n        }\n        if (record = recordCache[clientId]) {\n          record.send('didChangeData');\n        }\n      } else {\n        clientId = this.find(type, id).get('clientId');\n      }\n      if (clientId) {\n        DATA_PROXY.savedData = hash;\n        this.updateRecordArrays(type, clientId, DATA_PROXY);\n        return {\n          id: id,\n          clientId: clientId\n        };\n      }\n    },\n    receive: function(event, data) {\n      var job, mappings, name, type, _ref;\n      _ref = event.split(':'), name = _ref[0], type = _ref[1];\n      mappings = this.adapter.get('mappings');\n      type = mappings[name];\n      if (event === 'job:log') {\n        if (job = this.find(Travis.Job, data['job']['id'])) {\n          return job.appendLog(data['job']['_log']);\n        }\n      } else if (data[type.singularName()]) {\n        return this._loadOne(this, type, data);\n      } else if (data[type.pluralName()]) {\n        return this._loadMany(this, type, data);\n      } else {\n        if (!type) {\n          throw \"can't load data for \" + name;\n        }\n      }\n    },\n    _loadOne: function(store, type, json) {\n      var root;\n      root = type.singularName();\n      this.adapter.sideload(store, type, json, root);\n      this.merge(type, json[root]);\n      return this._updateAssociations(type, root, json[root]);\n    },\n    _loadMany: function(store, type, json) {\n      var root;\n      root = type.pluralName();\n      this.adapter.sideload(store, type, json, root);\n      return this.loadMany(type, json[root]);\n    },\n    _updateAssociations: function(type, name, data) {\n      var _this = this;\n      return Em.get(type, 'associationsByName').forEach(function(key, meta) {\n        var clientId, dataProxy, id, ids, parent, _ref;\n        if (meta.kind === 'belongsTo') {\n          id = data[\"\" + key + \"_id\"];\n          if (clientId = _this.typeMapFor(meta.type).idToCid[id]) {\n            if (parent = _this.findByClientId(meta.type, clientId, id)) {\n              dataProxy = parent.get('data');\n              if (ids = dataProxy.get(\"\" + name + \"_ids\")) {\n                if (_ref = data.id, __indexOf.call(ids, _ref) < 0) {\n                  ids.pushObject(data.id);\n                }\n                return parent.send('didChangeData');\n              }\n            }\n          }\n        }\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store");minispade.register('store/fixture_adapter', "(function() {(function() {\n\n  this.Travis.FixtureAdapter = DS.Adapter.extend({\n    find: function(store, type, id) {\n      var fixtures;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      if (fixtures.hasLoaded) {\n        return;\n      }\n      return setTimeout((function() {\n        store.loadMany(type, fixtures);\n        return fixtures.hasLoaded = true;\n      }), 300);\n    },\n    findMany: function() {\n      return this.find.apply(this, arguments);\n    },\n    findAll: function(store, type) {\n      var fixtures, ids;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      ids = fixtures.map(function(item, index, self) {\n        return item.id;\n      });\n      return store.loadMany(type, ids, fixtures);\n    },\n    findQuery: function(store, type, params, array) {\n      var fixture, fixtures, hashes, key, matches, value;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      hashes = (function() {\n        var _i, _len, _results;\n        _results = [];\n        for (_i = 0, _len = fixtures.length; _i < _len; _i++) {\n          fixture = fixtures[_i];\n          matches = (function() {\n            var _results1;\n            _results1 = [];\n            for (key in params) {\n              value = params[key];\n              _results1.push(key === 'orderBy' || fixture[key] === value);\n            }\n            return _results1;\n          })();\n          if (matches.reduce(function(a, b) {\n            return a && b;\n          })) {\n            _results.push(fixture);\n          } else {\n            _results.push(null);\n          }\n        }\n        return _results;\n      })();\n      return array.load(hashes.compact());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/fixture_adapter");minispade.register('store/rest_adapter', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('models');\n\n  this.Travis.RestAdapter = DS.RESTAdapter.extend(Travis.Ajax, {\n    mappings: {\n      repositories: Travis.Repository,\n      repository: Travis.Repository,\n      builds: Travis.Build,\n      build: Travis.Build,\n      commits: Travis.Commit,\n      commit: Travis.Commit,\n      jobs: Travis.Job,\n      job: Travis.Job,\n      account: Travis.Account,\n      accounts: Travis.Account,\n      worker: Travis.Worker,\n      workers: Travis.Worker\n    },\n    plurals: {\n      repository: 'repositories',\n      build: 'builds',\n      branch: 'branches',\n      job: 'jobs',\n      worker: 'workers',\n      profile: 'profile'\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/rest_adapter");minispade.register('tailing', "(function() {(function() {\n\n  this.Travis.Tailing = function() {\n    this.position = $(window).scrollTop();\n    $(window).scroll(this.onScroll.bind(this));\n    return this;\n  };\n\n  $.extend(Travis.Tailing.prototype, {\n    options: {\n      timeout: 200\n    },\n    run: function() {\n      this.autoScroll();\n      this.positionButton();\n      if (this.active()) {\n        return Ember.run.later(this.run.bind(this), this.options.timeout);\n      }\n    },\n    toggle: function(event) {\n      if (this.active()) {\n        return this.stop();\n      } else {\n        return this.start();\n      }\n    },\n    active: function() {\n      return $('#tail').hasClass('active');\n    },\n    start: function() {\n      $('#tail').addClass('active');\n      return this.run();\n    },\n    stop: function() {\n      return $('#tail').removeClass('active');\n    },\n    autoScroll: function() {\n      var log, logBottom, win, winBottom;\n      if (!this.active()) {\n        return;\n      }\n      win = $(window);\n      log = $('#log');\n      logBottom = log.offset().top + log.outerHeight() + 40;\n      winBottom = win.scrollTop() + win.height();\n      if (logBottom - winBottom > 0) {\n        return win.scrollTop(logBottom - win.height());\n      }\n    },\n    onScroll: function() {\n      var position;\n      this.positionButton();\n      position = $(window).scrollTop();\n      if (position < this.position) {\n        this.stop();\n      }\n      return this.position = position;\n    },\n    positionButton: function() {\n      var max, offset, tail;\n      tail = $('#tail');\n      if (tail.length === 0) {\n        return;\n      }\n      offset = $(window).scrollTop() - $('#log').offset().top;\n      max = $('#log').height() - $('#tail').height() + 5;\n      if (offset > max) {\n        offset = max;\n      }\n      if (offset > 0) {\n        return tail.css({\n          top: offset - 2\n        });\n      } else {\n        return tail.css({\n          top: 0\n        });\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=tailing");minispade.register('views', "(function() {(function() {\nminispade.require('ext/ember/namespace');\n\n  this.Travis.reopen({\n    View: Em.View.extend({\n      popup: function(event) {\n        return $(\"#\" + event.target.name).toggleClass('display');\n      }\n    })\n  });\n\n  this.Travis.reopen({\n    HomeView: Travis.View.extend({\n      templateName: 'layouts/home'\n    }),\n    ProfileLayoutView: Travis.View.extend({\n      templateName: 'layouts/profile'\n    }),\n    StatsLayoutView: Travis.View.extend({\n      templateName: 'layouts/simple'\n    }),\n    ApplicationView: Travis.View.extend({\n      templateName: 'application'\n    })\n  });\nminispade.require('views/accounts');\nminispade.require('views/build');\nminispade.require('views/job');\nminispade.require('views/repo');\nminispade.require('views/profile');\nminispade.require('views/sidebar');\nminispade.require('views/stats');\nminispade.require('views/top');\n\n}).call(this);\n\n})();\n//@ sourceURL=views");minispade.register('views/accounts', "(function() {(function() {\n\n  this.Travis.reopen({\n    AccountsView: Travis.View.extend({\n      tabBinding: 'controller.tab',\n      templateName: 'profile/accounts',\n      classAccounts: (function() {\n        if (this.get('tab') === 'accounts') {\n          return 'active';\n        }\n      }).property('tab')\n    }),\n    AccountsListView: Em.CollectionView.extend({\n      elementId: 'accounts',\n      accountBinding: 'content',\n      tagName: 'ul',\n      emptyView: Ember.View.extend({\n        template: Ember.Handlebars.compile('<div class=\"loading\"><span>Loading</span></div>')\n      }),\n      itemViewClass: Travis.View.extend({\n        accountBinding: 'content',\n        typeBinding: 'content.type',\n        selectedBinding: 'account.selected',\n        classNames: ['account'],\n        classNameBindings: ['type', 'selected'],\n        name: (function() {\n          return this.get('content.name') || this.get('content.login');\n        }).property('content.login', 'content.name'),\n        urlAccount: (function() {\n          return Travis.Urls.account(this.get('account.login'));\n        }).property('account.login')\n      })\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/accounts");minispade.register('views/build', "(function() {(function() {\n\n  this.Travis.reopen({\n    BuildsView: Travis.View.extend({\n      templateName: 'builds/list',\n      buildsBinding: 'controller.builds',\n      showMore: function() {\n        var id, number;\n        id = this.get('controller.repository.id');\n        number = this.get('builds.lastObject.number');\n        return this.get('builds').load(Travis.Build.olderThanNumber(id, number));\n      },\n      ShowMoreButton: Em.View.extend({\n        tagName: 'button',\n        classNameBindings: ['isLoading'],\n        attributeBindings: ['disabled'],\n        isLoadingBinding: 'controller.builds.isLoading',\n        template: Em.Handlebars.compile('{{view.label}}'),\n        disabledBinding: 'isLoading',\n        label: (function() {\n          if (this.get('isLoading')) {\n            return 'Loading';\n          } else {\n            return 'Show more';\n          }\n        }).property('isLoading'),\n        click: function() {\n          return this.get('parentView').showMore();\n        }\n      })\n    }),\n    BuildsItemView: Travis.View.extend({\n      tagName: 'tr',\n      classNameBindings: ['color'],\n      repositoryBinding: 'controller.repository',\n      buildBinding: 'context',\n      commitBinding: 'build.commit',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('build.result'));\n      }).property('build.result'),\n      urlBuild: (function() {\n        return Travis.Urls.build(this.get('repository.slug'), this.get('build.id'));\n      }).property('repository.slug', 'build.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repository.slug'), this.get('commit.sha'));\n      }).property('repository.slug', 'commit.sha')\n    }),\n    BuildView: Travis.View.extend({\n      templateName: 'builds/show',\n      elementId: 'build',\n      classNameBindings: ['color', 'loading'],\n      repositoryBinding: 'controller.repository',\n      buildBinding: 'controller.build',\n      commitBinding: 'build.commit',\n      loading: (function() {\n        return !this.get('build.isLoaded');\n      }).property('build.isLoaded'),\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('build.result'));\n      }).property('build.result'),\n      urlBuild: (function() {\n        return Travis.Urls.build(this.get('repository.slug'), this.get('build.id'));\n      }).property('repository.slug', 'build.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repository.slug'), this.get('commit.sha'));\n      }).property('repository.slug', 'commit.sha'),\n      urlAuthor: (function() {\n        return Travis.Urls.email(this.get('commit.authorEmail'));\n      }).property('commit.authorEmail'),\n      urlCommitter: (function() {\n        return Travis.Urls.email(this.get('commit.committerEmail'));\n      }).property('commit.committerEmail')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/build");minispade.register('views/job', "(function() {(function() {\n\n  this.Travis.reopen({\n    JobsView: Travis.View.extend({\n      templateName: 'jobs/list',\n      buildBinding: 'controller.build'\n    }),\n    JobsItemView: Travis.View.extend({\n      tagName: 'tr',\n      classNameBindings: ['color'],\n      repositoryBinding: 'context.repository',\n      jobBinding: 'context',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('job.result'));\n      }).property('job.result'),\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('repository.slug'), this.get('job.id'));\n      }).property('repository.slug', 'job.id')\n    }),\n    JobView: Travis.View.extend({\n      templateName: 'jobs/show',\n      repositoryBinding: 'controller.repository',\n      jobBinding: 'controller.job',\n      commitBinding: 'job.commit',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('job.result'));\n      }).property('job.result'),\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('repository.slug'), this.get('job.id'));\n      }).property('repository.slug', 'job.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repository.slug'), this.get('commit.sha'));\n      }).property('repository.slug', 'commit.sha'),\n      urlAuthor: (function() {\n        return Travis.Urls.email(this.get('commit.authorEmail'));\n      }).property('commit.authorEmail'),\n      urlCommitter: (function() {\n        return Travis.Urls.email(this.get('commit.committerEmail'));\n      }).property('commit.committerEmail')\n    }),\n    LogView: Travis.View.extend({\n      templateName: 'jobs/log',\n      logBinding: 'job.log',\n      click: function(event) {\n        return $(event.target).closest('.fold').toggleClass('open');\n      },\n      toTop: function() {\n        return $(window).scrollTop(0);\n      },\n      jobBinding: 'context',\n      toggleTailing: function(event) {\n        Travis.app.tailing.toggle();\n        return event.preventDefault();\n      },\n      logSubscriber: (function() {\n        var job, state;\n        job = this.get('job');\n        state = this.get('job.state');\n        if (job && state !== 'finished') {\n          job.subscribe();\n        }\n        return null;\n      }).property('job', 'job.state')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/job");minispade.register('views/left', "(function() {(function() {\n\n  this.Travis.reopen({\n    ReposView: Travis.View.extend({\n      templateName: 'repos/list',\n      tabBinding: 'controller.tab',\n      classRecent: (function() {\n        if (this.get('tab') === 'recent') {\n          return 'active';\n        }\n      }).property('tab'),\n      classOwned: (function() {\n        var classes;\n        classes = [];\n        if (this.get('tab') === 'owned') {\n          classes.push('active');\n        }\n        if (Travis.app.get('currentUser')) {\n          classes.push('display');\n        }\n        return classes.join(' ');\n      }).property('tab', 'Travis.currentUser'),\n      classSearch: (function() {\n        if (this.get('tab') === 'search') {\n          return 'active';\n        }\n      }).property('tab')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/left");minispade.register('views/profile', "(function() {(function() {\n\n  this.Travis.reopen({\n    ProfileView: Travis.View.extend({\n      templateName: 'profile/show',\n      accountBinding: 'controller.account',\n      name: (function() {\n        return this.get('account.name') || this.get('account.login');\n      }).property('account.name', 'account.login')\n    }),\n    ProfileTabsView: Travis.View.extend({\n      templateName: 'profile/tabs',\n      tabBinding: 'controller.tab',\n      activate: function(event) {\n        return this.get('controller').activate(event.target.name);\n      },\n      classHooks: (function() {\n        if (this.get('tab') === 'hooks') {\n          return 'active';\n        }\n      }).property('tab'),\n      classUser: (function() {\n        if (this.get('tab') === 'user') {\n          return 'active';\n        }\n      }).property('tab'),\n      accountBinding: 'controller.account',\n      displayUser: (function() {\n        return this.get('controller.account.login') === this.get('controller.user.login');\n      }).property('controller.account.login', 'controller.user.login')\n    }),\n    HooksView: Travis.View.extend({\n      templateName: 'profile/tabs/hooks',\n      userBinding: 'controller.user',\n      urlGithubAdmin: (function() {\n        return Travis.Urls.githubAdmin(this.get('hook.slug'));\n      }).property('hook.slug')\n    }),\n    UserView: Travis.View.extend({\n      templateName: 'profile/tabs/user',\n      userBinding: 'controller.user',\n      gravatarUrl: (function() {\n        return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=48&d=mm\";\n      }).property('user.gravatarId'),\n      locales: (function() {\n        return [\n          {\n            key: null,\n            name: ''\n          }, {\n            key: 'en',\n            name: 'English'\n          }, {\n            key: 'ca',\n            name: 'Catalan'\n          }, {\n            key: 'cs',\n            name: 'Čeština'\n          }, {\n            key: 'es',\n            name: 'Español'\n          }, {\n            key: 'fr',\n            name: 'Français'\n          }, {\n            key: 'ja',\n            name: '日本語'\n          }, {\n            key: 'nl',\n            name: 'Nederlands'\n          }, {\n            key: 'nb',\n            name: 'Norsk Bokmål'\n          }, {\n            key: 'pl',\n            name: 'Polski'\n          }, {\n            key: {\n              'pt-BR': {\n                name: 'Português brasileiro'\n              }\n            }\n          }, {\n            key: 'ru',\n            name: 'Русский'\n          }\n        ];\n      }).property(),\n      saveLocale: function(event) {\n        return this.get('user').updateLocale($('#locale').val());\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/profile");minispade.register('views/repo', "(function() {(function() {\nminispade.require('views/repo/list');\nminispade.require('views/repo/show');\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo");minispade.register('views/repo/list', "(function() {(function() {\n\n  this.Travis.reopen({\n    RepositoriesView: Travis.View.extend({\n      templateName: 'repos/list',\n      toggleInfo: function(event) {\n        return $('#repositories').toggleClass('open');\n      }\n    }),\n    RepositoriesListView: Em.CollectionView.extend({\n      elementId: 'repositories',\n      tagName: 'ul',\n      emptyView: Ember.View.extend({\n        template: Ember.Handlebars.compile('<div class=\"loading\"><span>Loading</span></div>')\n      }),\n      itemViewClass: Travis.View.extend({\n        repositoryBinding: 'content',\n        classNames: ['repository'],\n        classNameBindings: ['color', 'selected'],\n        selectedBinding: 'repository.selected',\n        color: (function() {\n          return Travis.Helpers.colorForResult(this.get('repository.lastBuildResult'));\n        }).property('repository.lastBuildResult'),\n        urlRepository: (function() {\n          return Travis.Urls.repository(this.get('repository.slug'));\n        }).property('repository.slug'),\n        urlLastBuild: (function() {\n          return Travis.Urls.build(this.get('repository.slug'), this.get('repository.lastBuildId'));\n        }).property('repository.slug', 'repository.lastBuildId')\n      })\n    }),\n    ReposListTabsView: Travis.View.extend({\n      templateName: 'repos/list/tabs',\n      tabBinding: 'controller.tab',\n      activate: function(event) {\n        return this.get('controller').activate(event.target.name);\n      },\n      classRecent: (function() {\n        if (this.get('tab') === 'recent') {\n          return 'active';\n        }\n      }).property('tab'),\n      classOwned: (function() {\n        var classes;\n        classes = [];\n        if (this.get('tab') === 'owned') {\n          classes.push('active');\n        }\n        if (Travis.app.get('currentUser')) {\n          classes.push('display-inline');\n        }\n        return classes.join(' ');\n      }).property('tab', 'Travis.app.currentUser'),\n      classSearch: (function() {\n        if (this.get('tab') === 'search') {\n          return 'active';\n        }\n      }).property('tab')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/list");minispade.register('views/repo/show', "(function() {(function() {\n\n  this.Travis.reopen({\n    RepositoryView: Travis.View.extend({\n      templateName: 'repos/show',\n      repositoryBinding: 'controller.repository',\n      \"class\": (function() {\n        if (!this.get('repository.isLoaded')) {\n          return 'loading';\n        }\n      }).property('repository.isLoaded'),\n      urlGithub: (function() {\n        return Travis.Urls.githubRepository(this.get('repository.slug'));\n      }).property('repository.slug'),\n      urlGithubWatchers: (function() {\n        return Travis.Urls.githubWatchers(this.get('repository.slug'));\n      }).property('repository.slug'),\n      urlGithubNetwork: (function() {\n        return Travis.Urls.githubNetwork(this.get('repository.slug'));\n      }).property('repository.slug')\n    }),\n    RepoShowTabsView: Travis.View.extend({\n      templateName: 'repos/show/tabs',\n      repositoryBinding: 'controller.repository',\n      buildBinding: 'controller.build',\n      jobBinding: 'controller.job',\n      tabBinding: 'controller.tab',\n      classCurrent: (function() {\n        if (this.get('tab') === 'current') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBuilds: (function() {\n        if (this.get('tab') === 'builds') {\n          return 'active';\n        }\n      }).property('tab'),\n      classPullRequests: (function() {\n        if (this.get('tab') === 'pull_requests') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBranches: (function() {\n        if (this.get('tab') === 'branches') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBuild: (function() {\n        var classes, tab;\n        tab = this.get('tab');\n        classes = [];\n        if (tab === 'build') {\n          classes.push('active');\n        }\n        if (tab === 'build' || tab === 'job') {\n          classes.push('display-inline');\n        }\n        return classes.join(' ');\n      }).property('tab'),\n      classJob: (function() {\n        if (this.get('tab') === 'job') {\n          return 'active display-inline';\n        }\n      }).property('tab')\n    }),\n    RepoShowToolsView: Travis.View.extend({\n      templateName: 'repos/show/tools',\n      repositoryBinding: 'controller.repository',\n      buildBinding: 'controller.build',\n      jobBinding: 'controller.job',\n      tabBinding: 'controller.tab',\n      toggle: function() {\n        var element;\n        element = $('#tools .pane').toggleClass('display-inline');\n        return this.set('active', element.hasClass('display-inline'));\n      },\n      branches: (function() {\n        if (this.get('active')) {\n          return this.get('repository.branches');\n        }\n      }).property('active', 'repository.branches'),\n      urlRepository: (function() {\n        return 'https://' + location.host + Travis.Urls.repository(this.get('repository.slug'));\n      }).property('repository.slug'),\n      urlStatusImage: (function() {\n        return Travis.Urls.statusImage(this.get('repository.slug'), this.get('branch.commit.branch'));\n      }).property('repository.slug', 'branch'),\n      markdownStatusImage: (function() {\n        return \"[![Build Status](\" + (this.get('urlStatusImage')) + \")](\" + (this.get('urlRepository')) + \")\";\n      }).property('urlStatusImage'),\n      textileStatusImage: (function() {\n        return \"!\" + (this.get('urlStatusImage')) + \"!:\" + (this.get('urlRepository'));\n      }).property('urlStatusImage'),\n      rdocStatusImage: (function() {\n        return \"{<img src=\\\"\" + (this.get('urlStatusImage')) + \"\\\" alt=\\\"Build Status\\\" />}[\" + (this.get('urlRepository')) + \"]\";\n      }).property('urlStatusImage')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/show");minispade.register('views/sidebar', "(function() {(function() {\n\n  this.Travis.reopen({\n    SidebarView: Travis.View.extend({\n      templateName: 'layouts/sidebar',\n      DecksView: Em.View.extend({\n        templateName: \"sponsors/decks\",\n        controller: Travis.SponsorsController.create({\n          perPage: 1\n        }),\n        didInsertElement: function() {\n          var controller;\n          controller = this.get('controller');\n          if (!controller.get('content')) {\n            Travis.app.get('router.sidebarController').tickables.push(controller);\n            controller.set('content', Travis.Sponsor.decks());\n          }\n          return this._super.apply(this, arguments);\n        }\n      }),\n      LinksView: Em.View.extend({\n        templateName: \"sponsors/links\",\n        controller: Travis.SponsorsController.create({\n          perPage: 6\n        }),\n        didInsertElement: function() {\n          var controller;\n          controller = this.get('controller');\n          if (!controller.get('content')) {\n            controller.set('content', Travis.Sponsor.links());\n            Travis.app.get('router.sidebarController').tickables.push(controller);\n          }\n          return this._super.apply(this, arguments);\n        }\n      }),\n      WorkersView: Em.View.extend({\n        templateName: 'workers/list',\n        controller: Travis.WorkersController.create(),\n        didInsertElement: function() {\n          this.set('controller.content', Travis.Worker.find());\n          return this._super.apply(this, arguments);\n        }\n      }),\n      QueuesView: Em.View.extend({\n        templateName: 'queues/list',\n        controller: Travis.QueuesController.create(),\n        didInsertElement: function() {\n          var queue, queues;\n          queues = (function() {\n            var _i, _len, _ref, _results;\n            _ref = Travis.QUEUES;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n              queue = _ref[_i];\n              _results.push(Em.ArrayController.create({\n                content: Travis.Job.queued(queue.name),\n                id: \"queue_\" + queue.name,\n                name: queue.display\n              }));\n            }\n            return _results;\n          })();\n          this.set('controller.content', queues);\n          return this._super.apply(this, arguments);\n        }\n      })\n    }),\n    WorkersView: Travis.View.extend({\n      toggleWorkers: function(event) {\n        var handle;\n        handle = $(event.target).toggleClass('open');\n        if (handle.hasClass('open')) {\n          return $('#workers li').addClass('open');\n        } else {\n          return $('#workers li').removeClass('open');\n        }\n      }\n    }),\n    WorkersListView: Travis.View.extend({\n      toggle: function(event) {\n        return $(event.target).closest('li').toggleClass('open');\n      }\n    }),\n    WorkersItemView: Travis.View.extend({\n      display: (function() {\n        var name, number, payload, repo, state;\n        name = (this.get('worker.name') || '').replace('travis-', '');\n        state = this.get('worker.state');\n        payload = this.get('worker.payload');\n        if (state === 'working' && payload !== void 0) {\n          repo = payload.repository.slug;\n          number = ' #' + payload.build.number;\n          return (\"<span class='name'>\" + name + \": \" + repo + \"</span> \" + number).htmlSafe();\n        } else {\n          return \"\" + name + \": \" + state;\n        }\n      }).property('worker.state')\n    }),\n    QueueItemView: Travis.View.extend({\n      tagName: 'li',\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('job.repository.slug'), this.get('job.id'));\n      }).property('job.repository.slug', 'job.id')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/sidebar");minispade.register('views/stats', "(function() {(function() {\n\n  this.Travis.reopen({\n    StatsView: Travis.View.extend({\n      templateName: 'stats/show',\n      didInsertElement: function() {},\n      renderChart: function(config) {\n        var chart;\n        chart = new Highcharts.Chart(config);\n        return this.fetch(config.source, function(data) {\n          var stats;\n          stats = (function() {\n            var _i, _len, _ref, _results;\n            _ref = data.stats;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n              stats = _ref[_i];\n              _results.push(config.map(stats));\n            }\n            return _results;\n          })();\n          return chart.series[0].setData(stats);\n        });\n      },\n      fetch: function(url, callback) {\n        return $.ajax({\n          type: 'GET',\n          url: url,\n          accepts: {\n            json: 'application/vnd.travis-ci.2+json'\n          },\n          success: callback\n        });\n      },\n      CHARTS: {\n        repos: {\n          source: '/api/stats/repos',\n          total: 0,\n          map: function(data) {\n            return [Date.parse(data.date), this.total += parseInt(data.count)];\n          },\n          chart: {\n            renderTo: \"repos_stats\"\n          },\n          title: {\n            text: \"Total Projects/Repositories\"\n          },\n          xAxis: {\n            type: \"datetime\",\n            dateTimeLabelFormats: {\n              month: \"%e. %b\",\n              year: \"%b\"\n            }\n          },\n          yAxis: {\n            title: {\n              text: \"Count\"\n            },\n            min: 0\n          },\n          tooltip: {\n            formatter: function() {\n              return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" repos\";\n            }\n          },\n          series: [\n            {\n              name: \"Repository Growth\",\n              data: []\n            }\n          ]\n        },\n        builds: {\n          source: '/api/stats/tests',\n          map: function(data) {\n            return [Date.parse(data.date), parseInt(data.count)];\n          },\n          chart: {\n            renderTo: \"tests_stats\",\n            type: \"column\"\n          },\n          title: {\n            text: \"Build Count\"\n          },\n          subtitle: {\n            text: \"last month\"\n          },\n          xAxis: {\n            type: \"datetime\",\n            dateTimeLabelFormats: {\n              month: \"%e. %b\",\n              year: \"%b\"\n            }\n          },\n          yAxis: {\n            title: {\n              text: \"Count\"\n            },\n            min: 0\n          },\n          tooltip: {\n            formatter: function() {\n              return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" builds\";\n            }\n          },\n          series: [\n            {\n              name: \"Total Builds\",\n              data: []\n            }\n          ]\n        }\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/stats");minispade.register('views/top', "(function() {(function() {\n\n  this.Travis.reopen({\n    TopView: Travis.View.extend({\n      templateName: 'layouts/top',\n      tabBinding: 'controller.tab',\n      userBinding: 'controller.user',\n      gravatarUrl: (function() {\n        return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=24&d=mm\";\n      }).property('user.gravatarId'),\n      classHome: (function() {\n        if (this.get('tab') === 'home') {\n          return 'active';\n        }\n      }).property('tab'),\n      classStats: (function() {\n        if (this.get('tab') === 'stats') {\n          return 'active';\n        }\n      }).property('tab'),\n      classProfile: (function() {\n        var classes;\n        classes = ['profile'];\n        if (this.get('tab') === 'profile') {\n          classes.push('active');\n        }\n        classes.push(Travis.app.get('authState'));\n        return classes.join(' ');\n      }).property('tab', 'Travis.app.authState'),\n      showProfile: function() {\n        return $('#top .profile ul').show();\n      },\n      hideProfile: function() {\n        return $('#top .profile ul').hide();\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/top");minispade.register('data/sponsors', "(function() {(function() {\n\n  this.Travis.SPONSORS = [\n    {\n      type: 'platinum',\n      url: \"http://www.wooga.com\",\n      image: \"wooga-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://bendyworks.com\",\n      image: \"bendyworks-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://cloudcontrol.com\",\n      image: \"cloudcontrol-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://xing.de\",\n      image: \"xing-205x130.png\"\n    }, {\n      type: 'gold',\n      url: \"http://heroku.com\",\n      image: \"heroku-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://soundcloud.com\",\n      image: \"soundcloud-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://nedap.com\",\n      image: \"nedap-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://mongohq.com\",\n      image: \"mongohq-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://zweitag.de\",\n      image: \"zweitag-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://kanbanery.com\",\n      image: \"kanbanery-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://ticketevolution.com\",\n      image: \"ticketevolution-205x60.jpg\"\n    }, {\n      type: 'gold',\n      url: \"http://plan.io/travis\",\n      image: \"planio-205x60.png\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://cobot.me\\\">Cobot</a><span>: The one tool to run your coworking space</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://jumpstartlab.com\\\">JumpstartLab</a><span>: We build developers</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://evilmartians.com\\\">Evil Martians</a><span>: Agile Ruby on Rails development</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://zendesk.com\\\">Zendesk</a><span>: Love your helpdesk</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://stripe.com\\\">Stripe</a><span>: Payments for developers</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://basho.com\\\">Basho</a><span>: We make Riak!</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://thinkrelevance.com\\\">Relevance</a><span>: We deliver software solutions</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://mindmatters.de\\\">Mindmatters</a><span>: Software für Menschen</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://amenhq.com\\\">Amen</a><span>: The best and worst of everything</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://site5.com\\\">Site5</a><span>: Premium Web Hosting Solutions</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.crowdint.com\\\">Crowd Interactive</a><span>: Leading Rails consultancy in Mexico</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.atomicobject.com/detroit\\\">Atomic Object</a><span>: Work with really smart people</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://codeminer.com.br\\\">Codeminer</a><span>: smart services for your startup</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://cloudant.com\\\">Cloudant</a><span>: grow into your data layer, not out of it</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://gidsy.com\\\">Gidsy</a><span>: Explore, organize &amp; book unique things to do!</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://5apps.com\\\">5apps</a><span>: Package &amp; deploy HTML5 apps automatically</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://meltmedia.com\\\">Meltmedia</a><span>: We are Interactive Superheroes</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.fngtps.com\\\">Fingertips</a><span> offers design and development services</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.engineyard.com\\\">Engine Yard</a><span>: Build epic apps, let us handle the rest</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://malwarebytes.org\\\">Malwarebytes</a><span>: Defeat Malware once and for all.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://readmill.com\\\">Readmill</a><span>: The best reading app on the iPad.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.mdsol.com\\\">Medidata</a><span>: clinical tech improving quality of life</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://coderwall.com/teams/4f27194e973bf000040005f0\\\">ESM</a><span>: Japan's best agile Ruby/Rails consultancy</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://twitter.com\\\">Twitter</a><span>: instantly connects people everywhere</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://agileanimal.com\\\">AGiLE ANiMAL</a><span>: we <3 Travis CI.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://tupalo.com\\\">Tupalo</a><span>: Discover, review &amp; share local businesses.</span>\"\n    }\n  ];\n\n}).call(this);\n\n})();\n//@ sourceURL=data/sponsors");minispade.register('emoij', "(function() {(function() {\n\n  this.EmojiDictionary = ['-1', '0', '1', '109', '2', '3', '4', '5', '6', '7', '8', '8ball', '9', 'a', 'ab', 'airplane', 'alien', 'ambulance', 'angel', 'anger', 'angry', 'apple', 'aquarius', 'aries', 'arrow_backward', 'arrow_down', 'arrow_forward', 'arrow_left', 'arrow_lower_left', 'arrow_lower_right', 'arrow_right', 'arrow_up', 'arrow_upper_left', 'arrow_upper_right', 'art', 'astonished', 'atm', 'b', 'baby', 'baby_chick', 'baby_symbol', 'balloon', 'bamboo', 'bank', 'barber', 'baseball', 'basketball', 'bath', 'bear', 'beer', 'beers', 'beginner', 'bell', 'bento', 'bike', 'bikini', 'bird', 'birthday', 'black_square', 'blue_car', 'blue_heart', 'blush', 'boar', 'boat', 'bomb', 'book', 'boot', 'bouquet', 'bow', 'bowtie', 'boy', 'bread', 'briefcase', 'broken_heart', 'bug', 'bulb', 'bullettrain_front', 'bullettrain_side', 'bus', 'busstop', 'cactus', 'cake', 'calling', 'camel', 'camera', 'cancer', 'capricorn', 'car', 'cat', 'cd', 'chart', 'checkered_flag', 'cherry_blossom', 'chicken', 'christmas_tree', 'church', 'cinema', 'city_sunrise', 'city_sunset', 'clap', 'clapper', 'clock1', 'clock10', 'clock11', 'clock12', 'clock2', 'clock3', 'clock4', 'clock5', 'clock6', 'clock7', 'clock8', 'clock9', 'closed_umbrella', 'cloud', 'clubs', 'cn', 'cocktail', 'coffee', 'cold_sweat', 'computer', 'confounded', 'congratulations', 'construction', 'construction_worker', 'convenience_store', 'cool', 'cop', 'copyright', 'couple', 'couple_with_heart', 'couplekiss', 'cow', 'crossed_flags', 'crown', 'cry', 'cupid', 'currency_exchange', 'curry', 'cyclone', 'dancer', 'dancers', 'dango', 'dart', 'dash', 'de', 'department_store', 'diamonds', 'disappointed', 'dog', 'dolls', 'dolphin', 'dress', 'dvd', 'ear', 'ear_of_rice', 'egg', 'eggplant', 'egplant', 'eight_pointed_black_star', 'eight_spoked_asterisk', 'elephant', 'email', 'es', 'european_castle', 'exclamation', 'eyes', 'factory', 'fallen_leaf', 'fast_forward', 'fax', 'fearful', 'feelsgood', 'feet', 'ferris_wheel', 'finnadie', 'fire', 'fire_engine', 'fireworks', 'fish', 'fist', 'flags', 'flushed', 'football', 'fork_and_knife', 'fountain', 'four_leaf_clover', 'fr', 'fries', 'frog', 'fuelpump', 'gb', 'gem', 'gemini', 'ghost', 'gift', 'gift_heart', 'girl', 'goberserk', 'godmode', 'golf', 'green_heart', 'grey_exclamation', 'grey_question', 'grin', 'guardsman', 'guitar', 'gun', 'haircut', 'hamburger', 'hammer', 'hamster', 'hand', 'handbag', 'hankey', 'hash', 'headphones', 'heart', 'heart_decoration', 'heart_eyes', 'heartbeat', 'heartpulse', 'hearts', 'hibiscus', 'high_heel', 'horse', 'hospital', 'hotel', 'hotsprings', 'house', 'hurtrealbad', 'icecream', 'id', 'ideograph_advantage', 'imp', 'information_desk_person', 'iphone', 'it', 'jack_o_lantern', 'japanese_castle', 'joy', 'jp', 'key', 'kimono', 'kiss', 'kissing_face', 'kissing_heart', 'koala', 'koko', 'kr', 'leaves', 'leo', 'libra', 'lips', 'lipstick', 'lock', 'loop', 'loudspeaker', 'love_hotel', 'mag', 'mahjong', 'mailbox', 'man', 'man_with_gua_pi_mao', 'man_with_turban', 'maple_leaf', 'mask', 'massage', 'mega', 'memo', 'mens', 'metal', 'metro', 'microphone', 'minidisc', 'mobile_phone_off', 'moneybag', 'monkey', 'monkey_face', 'moon', 'mortar_board', 'mount_fuji', 'mouse', 'movie_camera', 'muscle', 'musical_note', 'nail_care', 'necktie', 'new', 'no_good', 'no_smoking', 'nose', 'notes', 'o', 'o2', 'ocean', 'octocat', 'octopus', 'oden', 'office', 'ok', 'ok_hand', 'ok_woman', 'older_man', 'older_woman', 'open_hands', 'ophiuchus', 'palm_tree', 'parking', 'part_alternation_mark', 'pencil', 'penguin', 'pensive', 'persevere', 'person_with_blond_hair', 'phone', 'pig', 'pill', 'pisces', 'plus1', 'point_down', 'point_left', 'point_right', 'point_up', 'point_up_2', 'police_car', 'poop', 'post_office', 'postbox', 'pray', 'princess', 'punch', 'purple_heart', 'question', 'rabbit', 'racehorse', 'radio', 'rage', 'rage1', 'rage2', 'rage3', 'rage4', 'rainbow', 'raised_hands', 'ramen', 'red_car', 'red_circle', 'registered', 'relaxed', 'relieved', 'restroom', 'rewind', 'ribbon', 'rice', 'rice_ball', 'rice_cracker', 'rice_scene', 'ring', 'rocket', 'roller_coaster', 'rose', 'ru', 'runner', 'sa', 'sagittarius', 'sailboat', 'sake', 'sandal', 'santa', 'satellite', 'satisfied', 'saxophone', 'school', 'school_satchel', 'scissors', 'scorpius', 'scream', 'seat', 'secret', 'shaved_ice', 'sheep', 'shell', 'ship', 'shipit', 'shirt', 'shit', 'shoe', 'signal_strength', 'six_pointed_star', 'ski', 'skull', 'sleepy', 'slot_machine', 'smile', 'smiley', 'smirk', 'smoking', 'snake', 'snowman', 'sob', 'soccer', 'space_invader', 'spades', 'spaghetti', 'sparkler', 'sparkles', 'speaker', 'speedboat', 'squirrel', 'star', 'star2', 'stars', 'station', 'statue_of_liberty', 'stew', 'strawberry', 'sunflower', 'sunny', 'sunrise', 'sunrise_over_mountains', 'surfer', 'sushi', 'suspect', 'sweat', 'sweat_drops', 'swimmer', 'syringe', 'tada', 'tangerine', 'taurus', 'taxi', 'tea', 'telephone', 'tennis', 'tent', 'thumbsdown', 'thumbsup', 'ticket', 'tiger', 'tm', 'toilet', 'tokyo_tower', 'tomato', 'tongue', 'top', 'tophat', 'traffic_light', 'train', 'trident', 'trophy', 'tropical_fish', 'truck', 'trumpet', 'tshirt', 'tulip', 'tv', 'u5272', 'u55b6', 'u6307', 'u6708', 'u6709', 'u6e80', 'u7121', 'u7533', 'u7a7a', 'umbrella', 'unamused', 'underage', 'unlock', 'up', 'us', 'v', 'vhs', 'vibration_mode', 'virgo', 'vs', 'walking', 'warning', 'watermelon', 'wave', 'wc', 'wedding', 'whale', 'wheelchair', 'white_square', 'wind_chime', 'wink', 'wink2', 'wolf', 'woman', 'womans_hat', 'womens', 'x', 'yellow_heart', 'zap', 'zzz'];\n\n}).call(this);\n\n})();\n//@ sourceURL=emoij");minispade.register('ext/jquery', "(function() {(function() {\n\n  $.fn.extend({\n    outerHtml: function() {\n      return $(this).wrap('<div></div>').parent().html();\n    },\n    outerElement: function() {\n      return $($(this).outerHtml()).empty();\n    },\n    flash: function() {\n      return Utils.flash(this);\n    },\n    unflash: function() {\n      return Utils.unflash(this);\n    },\n    filterLog: function() {\n      this.deansi();\n      return this.foldLog();\n    },\n    deansi: function() {\n      return this.html(Utils.deansi(this.html()));\n    },\n    foldLog: function() {\n      return this.html(Utils.foldLog(this.html()));\n    },\n    unfoldLog: function() {\n      return this.html(Utils.unfoldLog(this.html()));\n    },\n    updateTimes: function() {\n      return Utils.updateTimes(this);\n    },\n    activateTab: function(tab) {\n      return Utils.activateTab(this, tab);\n    },\n    timeInWords: function() {\n      return $(this).each(function() {\n        return $(this).text(Utils.timeInWords(parseInt($(this).attr('title'))));\n      });\n    },\n    updateGithubStats: function(repository) {\n      return Utils.updateGithubStats(repository, $(this));\n    }\n  });\n\n  $.extend({\n    isEmpty: function(obj) {\n      if ($.isArray(obj)) {\n        return !obj.length;\n      } else if ($.isObject(obj)) {\n        return !$.keys(obj).length;\n      } else {\n        return !obj;\n      }\n    },\n    isObject: function(obj) {\n      return Object.prototype.toString.call(obj) === '[object Object]';\n    },\n    keys: function(obj) {\n      var keys;\n      keys = [];\n      $.each(obj, function(key) {\n        return keys.push(key);\n      });\n      return keys;\n    },\n    values: function(obj) {\n      var values;\n      values = [];\n      $.each(obj, function(key, value) {\n        return values.push(value);\n      });\n      return values;\n    },\n    underscore: function(string) {\n      return string[0].toLowerCase() + string.substring(1).replace(/([A-Z])?/g, function(match, chr) {\n        if (chr) {\n          return \"_\" + (chr.toUpperCase());\n        } else {\n          return '';\n        }\n      });\n    },\n    camelize: function(string, uppercase) {\n      string = uppercase === false ? $.underscore(string) : $.capitalize(string);\n      return string.replace(/_(.)?/g, function(match, chr) {\n        if (chr) {\n          return chr.toUpperCase();\n        } else {\n          return '';\n        }\n      });\n    },\n    capitalize: function(string) {\n      return string[0].toUpperCase() + string.substring(1);\n    },\n    compact: function(object) {\n      return $.grep(object, function(value) {\n        return !!value;\n      });\n    },\n    all: function(array, callback) {\n      var args, i;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          return false;\n        }\n        i++;\n      }\n      return true;\n    },\n    detect: function(array, callback) {\n      var args, i;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          return array[i];\n        }\n        i++;\n      }\n    },\n    select: function(array, callback) {\n      var args, i, result;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      result = [];\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          result.push(array[i]);\n        }\n        i++;\n      }\n      return result;\n    },\n    slice: function(object, key) {\n      var keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) > -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    only: function(object) {\n      var key, keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) !== -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    except: function(object) {\n      var key, keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) === -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    intersect: function(array, other) {\n      return array.filter(function(element) {\n        return other.indexOf(element) !== -1;\n      });\n    },\n    map: function(elems, callback, arg) {\n      var i, isArray, key, length, ret, value;\n      value = void 0;\n      key = void 0;\n      ret = [];\n      i = 0;\n      length = elems.length;\n      isArray = elems instanceof jQuery || length !== void 0 && typeof length === 'number' && (length > 0 && elems[0] && elems[length - 1]) || length === 0 || jQuery.isArray(elems);\n      if (isArray) {\n        while (i < length) {\n          value = callback(elems[i], i, arg);\n          if (value != null) {\n            ret[ret.length] = value;\n          }\n          i++;\n        }\n      } else {\n        for (key in elems) {\n          value = callback(elems[key], key, arg);\n          if (value != null) {\n            ret[ret.length] = value;\n          }\n        }\n      }\n      return ret.concat.apply([], ret);\n    },\n    shuffle: function(array) {\n      var current, tmp, top;\n      array = array.slice();\n      top = array.length;\n      while (top && --top) {\n        current = Math.floor(Math.random() * (top + 1));\n        tmp = array[current];\n        array[current] = array[top];\n        array[top] = tmp;\n      }\n      return array;\n    },\n    truncate: function(string, length) {\n      if (string.length > length) {\n        return string.trim().substring(0, length) + '...';\n      } else {\n        return string;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=ext/jquery");minispade.register('travis/ajax', "(function() {(function() {\n\n  jQuery.support.cors = true;\n\n  this.Travis.Ajax = Ember.Mixin.create({\n    DEFAULT_OPTIONS: {\n      accepts: {\n        json: 'application/vnd.travis-ci.2+json'\n      }\n    },\n    post: function(url, data, callback) {\n      return this.ajax(url, 'post', {\n        data: data,\n        success: callback\n      });\n    },\n    ajax: function(url, method, options) {\n      var accessToken, endpoint, _base, _ref;\n      endpoint = Travis.config.api_endpoint || '';\n      options = options || {};\n      if (accessToken = (_ref = Travis.app) != null ? _ref.get('auth.accessToken') : void 0) {\n        options.headers || (options.headers = {});\n        (_base = options.headers)['Authorization'] || (_base['Authorization'] = \"token \" + accessToken);\n      }\n      options.url = \"\" + endpoint + url;\n      options.type = method;\n      options.dataType = 'json';\n      options.contentType = 'application/json; charset=utf-8';\n      options.context = this;\n      if (options.data && method !== 'GET' && method !== 'get') {\n        options.data = JSON.stringify(options.data);\n      }\n      return $.ajax($.extend(options, this.DEFAULT_OPTIONS));\n    }\n  });\n\n  this.Travis.ajax = Em.Object.create(this.Travis.Ajax, {\n    get: function(url, callback) {\n      return this.ajax(url, 'get', {\n        success: callback\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ajax");minispade.register('travis/expandable_record_array', "(function() {(function() {\n\n  Travis.ExpandableRecordArray = DS.RecordArray.extend({\n    isLoaded: false,\n    isLoading: false,\n    load: function(array) {\n      var observer, self;\n      this.set('isLoading', true);\n      self = this;\n      observer = function() {\n        var content;\n        if (this.get('isLoaded')) {\n          content = self.get('content');\n          array.removeObserver('isLoaded', observer);\n          array.forEach(function(record) {\n            return self.pushObject(record);\n          });\n          self.set('isLoading', false);\n          return self.set('isLoaded', true);\n        }\n      };\n      return array.addObserver('isLoaded', observer);\n    },\n    pushObject: function(record) {\n      var clientId, id, ids;\n      ids = this.get('content');\n      id = record.get('id');\n      clientId = record.get('clientId');\n      if (ids.contains(clientId)) {\n        return;\n      }\n      return ids.pushObject(clientId);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/expandable_record_array");minispade.register('travis/log', "(function() {(function() {\n\n  this.Travis.Log = {\n    FOLDS: {\n      schema: /(<p.*?\\/a>\\$ (?:bundle exec )?rake( db:create)? db:schema:load[\\s\\S]*?<p.*?\\/a>-- assume_migrated_upto_version[\\s\\S]*?<\\/p>\\n<p.*?\\/a>.*<\\/p>)/g,\n      migrate: /(<p.*?\\/a>\\$ (?:bundle exec )?rake( db:create)? db:migrate[\\s\\S]*== +\\w+: migrated \\(.*\\) =+)/g,\n      bundle: /(<p.*?\\/a>\\$ bundle install.*<\\/p>\\n(<p.*?\\/a>(Updating|Using|Installing|Fetching|remote:|Receiving|Resolving).*?<\\/p>\\n|<p.*?\\/a><\\/p>\\n)*)/g,\n      exec: /(<p.*?\\/a>[\\/\\w]*.rvm\\/rubies\\/[\\S]*?\\/(ruby|rbx|jruby) .*?<\\/p>)/g\n    },\n    filter: function(log) {\n      log = this.escape(log);\n      log = this.deansi(log);\n      log = log.replace(/\\r/g, '');\n      log = this.number(log);\n      log = this.fold(log);\n      log = log.replace(/\\n/g, '');\n      return log;\n    },\n    stripPaths: function(log) {\n      return log.replace(/\\/home\\/vagrant\\/builds(\\/[^\\/\\n]+){2}\\//g, '');\n    },\n    escape: function(log) {\n      return Handlebars.Utils.escapeExpression(log);\n    },\n    escapeRuby: function(log) {\n      return log.replace(/#<(\\w+.*?)>/, '#&lt;$1&gt;');\n    },\n    number: function(log) {\n      var result;\n      result = '';\n      $.each(log.trim().split('\\n'), function(ix, line) {\n        var number, path;\n        number = ix + 1;\n        path = Travis.Log.location().substr(1).replace(/\\/L\\d+/, '') + '/L' + number;\n        return result += '<p><a href=\\'#%@\\' id=\\'%@\\' name=\\'L%@\\'>%@</a>%@</p>\\n'.fmt(path, path, number, number, line);\n      });\n      return result.trim();\n    },\n    deansi: function(log) {\n      var ansi, text;\n      log = log.replace(/\\r\\r/g, '\\r').replace(/\\033\\[K\\r/g, '\\r').replace(/^.*\\r(?!$)/gm, '').replace(/\u001b\\[2K/g, '').replace(/\\033\\(B/g, \"\");\n      ansi = ansiparse(log);\n      text = '';\n      ansi.forEach(function(part) {\n        var classes;\n        classes = [];\n        part.foreground && classes.push(part.foreground);\n        part.background && classes.push('bg-' + part.background);\n        part.bold && classes.push('bold');\n        part.italic && classes.push('italic');\n        return text += (classes.length ? '<span class=\\'' + classes.join(' ') + '\\'>' + part.text + '</span>' : part.text);\n      });\n      return text.replace(/\\033/g, '');\n    },\n    fold: function(log) {\n      log = this.unfold(log);\n      $.each(Travis.Log.FOLDS, function(name, pattern) {\n        return log = log.replace(pattern, function() {\n          return '<div class=\\'fold ' + name + '\\'>' + arguments[1].trim() + '</div>';\n        });\n      });\n      return log;\n    },\n    unfold: function(log) {\n      return log.replace(/<div class='fold[^']*'>([\\s\\S]*?)<\\/div>/g, '$1\\n');\n    },\n    location: function() {\n      return window.location.hash;\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/log");minispade.register('travis/model', "(function() {(function() {\n\n  this.Travis.Model = DS.Model.extend({\n    primaryKey: 'id',\n    id: DS.attr('number'),\n    refresh: function() {\n      var id;\n      id = this.get('id');\n      if (id) {\n        return Travis.app.store.adapter.find(Travis.app.store, this.constructor, id);\n      }\n    },\n    update: function(attrs) {\n      var _this = this;\n      $.each(attrs, function(key, value) {\n        if (key !== 'id') {\n          return _this.set(key, value);\n        }\n      });\n      return this;\n    }\n  });\n\n  this.Travis.Model.reopenClass({\n    find: function() {\n      if (arguments.length === 0) {\n        return Travis.app.store.findAll(this);\n      } else {\n        return this._super.apply(this, arguments);\n      }\n    },\n    filter: function(callback) {\n      return Travis.app.store.filter(this, callback);\n    },\n    load: function(attrs) {\n      return Travis.app.store.load(this, attrs);\n    },\n    buildURL: function(suffix) {\n      var base, url;\n      base = this.url || this.pluralName();\n      Ember.assert('Base URL (' + base + ') must not start with slash', !base || base.toString().charAt(0) !== '/');\n      Ember.assert('URL suffix (' + suffix + ') must not start with slash', !suffix || suffix.toString().charAt(0) !== '/');\n      url = [base];\n      if (suffix !== void 0) {\n        url.push(suffix);\n      }\n      return url.join('/');\n    },\n    singularName: function() {\n      var name, parts;\n      parts = this.toString().split('.');\n      name = parts[parts.length - 1];\n      return name.replace(/([A-Z])/g, '_$1').toLowerCase().slice(1);\n    },\n    pluralName: function() {\n      return Travis.app.store.adapter.pluralize(this.singularName());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/model");minispade.register('travis/ticker', "(function() {(function() {\n\n  this.Travis.Ticker = Ember.Object.extend({\n    init: function() {\n      if (this.get('interval') !== -1) {\n        return this.schedule();\n      }\n    },\n    tick: function() {\n      var context, target, targets, _i, _len;\n      context = this.get('context');\n      targets = this.get('targets') || [this.get('target')];\n      for (_i = 0, _len = targets.length; _i < _len; _i++) {\n        target = targets[_i];\n        if (context) {\n          target = context.get(target);\n        }\n        if (target) {\n          target.tick();\n        }\n      }\n      return this.schedule();\n    },\n    schedule: function() {\n      var _this = this;\n      return Ember.run.later((function() {\n        return _this.tick();\n      }), this.get('interval') || Travis.app.TICK_INTERVAL);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ticker");minispade.register('travis', "(function() {(function() {\nminispade.require('ext/jquery');\nminispade.require('ext/ember/namespace');\n\n  this.Travis = Em.Namespace.create({\n    config: {\n      api_endpoint: $('meta[rel=\"travis.api_endpoint\"]').attr('href')\n    },\n    CONFIG_KEYS: ['rvm', 'gemfile', 'env', 'jdk', 'otp_release', 'php', 'node_js', 'perl', 'python', 'scala'],\n    ROUTES: {\n      'profile/:login/me': ['profile', 'user'],\n      'profile/:login': ['profile', 'hooks'],\n      'profile': ['profile', 'hooks'],\n      'stats': ['stats', 'show'],\n      ':owner/:name/jobs/:id/:line': ['home', 'job'],\n      ':owner/:name/jobs/:id': ['home', 'job'],\n      ':owner/:name/builds/:id': ['home', 'build'],\n      ':owner/:name/builds': ['home', 'builds'],\n      ':owner/:name/pull_requests': ['home', 'pullRequests'],\n      ':owner/:name/branches': ['home', 'branches'],\n      ':owner/:name': ['home', 'current'],\n      '': ['home', 'index'],\n      '#': ['home', 'index']\n    },\n    QUEUES: [\n      {\n        name: 'common',\n        display: 'Common'\n      }, {\n        name: 'php',\n        display: 'PHP, Perl and Python'\n      }, {\n        name: 'node_js',\n        display: 'Node.js'\n      }, {\n        name: 'jvmotp',\n        display: 'JVM and Erlang'\n      }, {\n        name: 'rails',\n        display: 'Rails'\n      }, {\n        name: 'spree',\n        display: 'Spree'\n      }\n    ],\n    INTERVALS: {\n      sponsors: -1,\n      times: -1,\n      updateTimes: 1000\n    },\n    run: function(attrs) {\n      var _this = this;\n      if (location.hash.slice(0, 2) === '#!') {\n        location.href = location.href.replace('#!/', '');\n      }\n      return this.loadConfig(function(config) {\n        var app;\n        app = Travis.App.create(attrs || {});\n        $.each(Travis, function(key, value) {\n          if (value && value.isClass && key !== 'constructor') {\n            return app[key] = value;\n          }\n        });\n        _this.app = app;\n        _this.store = app.store;\n        return $(function() {\n          return app.initialize();\n        });\n      });\n    },\n    loadConfig: function(callback) {\n      var _this = this;\n      return this.ajax.get('/config', function(data) {\n        $.extend(_this.config, data.config);\n        console.log(\"Connecting to \" + data.config.api_endpoint);\n        return callback(data.config);\n      });\n    }\n  });\nminispade.require('travis/ajax');\nminispade.require('app');\n\n}).call(this);\n\n})();\n//@ sourceURL=travis");minispade.register('templates', "(function() {\nEmber.TEMPLATES['application'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression;\n\n\n  stack1 = helpers._triageMustache.call(depth0, \"outlet\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['builds/list'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n  <table id=\\\"builds\\\" class=\\\"list\\\">\\n    <thead>\\n      <tr>\\n        <th>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.name\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.name\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</th>\\n        <th>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.commit\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.commit\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</th>\\n        <th>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.message\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.message\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</th>\\n        <th>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</th>\\n        <th>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.finished_at\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.finished_at\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</th>\\n      </tr>\\n    </thead>\\n\\n    <tbody>\\n      \");\n  stack1 = helpers.each.call(depth0, \"build\", \"in\", \"builds\", {hash:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </tbody>\\n  </table>\\n  <p>\\n    \");\n  stack1 = helpers.view.call(depth0, \"view.ShowMoreButton\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </p>\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        \");\n  stack1 = {};\n  stack1['contextBinding'] = \"build\";\n  stack1 = helpers.view.call(depth0, \"Travis.BuildsItemView\", {hash:stack1,inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n      \");\n  return buffer;}\nfunction program3(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n          <td class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            \");\n  stack1 = helpers['if'].call(depth0, \"id\", {hash:{},inverse:self.noop,fn:self.program(4, program4, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          </td>\\n          <td class=\\\"commit\\\">\\n            <a \");\n  stack1 = {};\n  stack1['href'] = \"view.urlGithubCommit\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n              \");\n  foundHelper = helpers.formatCommit;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"commit\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatCommit\", \"commit\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n            </a>\\n          </td>\\n          <td class=\\\"message\\\">\\n            \");\n  stack1 = {};\n  stack1['short'] = \"true\";\n  foundHelper = helpers.formatMessage;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"commit.message\", {hash:stack1,contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatMessage\", \"commit.message\", {hash:stack1,contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          </td>\\n          <td class=\\\"duration\\\" \");\n  stack1 = {};\n  stack1['title'] = \"duration\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            \");\n  foundHelper = helpers.formatDuration;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatDuration\", \"duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </td>\\n          <td class=\\\"finished_at timeago\\\" \");\n  stack1 = {};\n  stack1['title'] = \"finishedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            \");\n  foundHelper = helpers.formatTime;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"finishedAt\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatTime\", \"finishedAt\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </td>\\n        \");\n  return buffer;}\nfunction program4(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n              <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showBuild\", \"\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n                \");\n  stack1 = helpers._triageMustache.call(depth0, \"number\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n              </a>\\n            \");\n  return buffer;}\n\nfunction program6(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n  <div class=\\\"loading\\\"><span>Loading</span></div>\\n\");}\n\n  stack1 = helpers['if'].call(depth0, \"builds.isLoaded\", {hash:{},inverse:self.program(6, program6, data),fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['builds/show'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n  \");\n  stack1 = helpers['if'].call(depth0, \"loading\", {hash:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n    <span>Loading</span>\\n  \");}\n\nfunction program4(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n    <dl id=\\\"summary\\\">\\n      <div class=\\\"left\\\">\\n        <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.name\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.name\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n        <dd class=\\\"number\\\">\\n          <span class=\\\"status\\\"></span>\\n          \");\n  stack1 = helpers['if'].call(depth0, \"build.id\", {hash:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n        </dd>\\n        <dt class=\\\"finished_at_label\\\">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.finished_at\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.finished_at\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n        <dd class=\\\"finished_at timeago\\\" \");\n  stack1 = {};\n  stack1['title'] = \"finishedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.formatTime;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"build.finishedAt\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatTime\", \"build.finishedAt\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dd>\\n        <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n        <dd class=\\\"duration\\\" \");\n  stack1 = {};\n  stack1['title'] = \"startedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.formatDuration;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"build.duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatDuration\", \"build.duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dd>\\n      </div>\\n\\n      <div class=\\\"right\\\">\\n        <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.commit\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.commit\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n        <dd class=\\\"commit\\\"><a href=\\\"\");\n  stack1 = helpers.unbound.call(depth0, \"urlGithubCommit\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\\">\");\n  foundHelper = helpers.formatCommit;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"build.commit\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatCommit\", \"build.commit\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n        \");\n  stack1 = helpers['if'].call(depth0, \"commit.compareUrl\", {hash:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n        \");\n  stack1 = helpers['if'].call(depth0, \"commit.authorName\", {hash:{},inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n        \");\n  stack1 = helpers['if'].call(depth0, \"commit.committerName\", {hash:{},inverse:self.noop,fn:self.program(11, program11, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n      </div>\\n\\n      <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.message\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.message\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n      <dd class=\\\"message\\\">\");\n  foundHelper = helpers.formatMessage;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"build.commit.message\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatMessage\", \"build.commit.message\", {hash:{},contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"</dd>\\n\\n      \");\n  stack1 = helpers.unless.call(depth0, \"isMatrix\", {hash:{},inverse:self.noop,fn:self.program(13, program13, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </dl>\\n\\n    \");\n  stack1 = helpers['if'].call(depth0, \"build.isMatrix\", {hash:{},inverse:self.program(17, program17, data),fn:self.program(15, program15, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n  \");\n  return buffer;}\nfunction program5(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n            <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showBuild\", \"build\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"build.number\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n          \");\n  return buffer;}\n\nfunction program7(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n          <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.compare\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.compare\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n          <dd class=\\\"compare\\\"><a href=\\\"\");\n  stack1 = helpers.unbound.call(depth0, \"commit.compareUrl\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\\">\");\n  foundHelper = helpers.pathFrom;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"build.commit.compareUrl\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"pathFrom\", \"build.commit.compareUrl\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n        \");\n  return buffer;}\n\nfunction program9(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n          <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.author\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.author\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n          <dd class=\\\"author\\\"><a href=\\\"\");\n  stack1 = helpers.unbound.call(depth0, \"urlAuthor\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"build.commit.authorName\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n        \");\n  return buffer;}\n\nfunction program11(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n          <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.committer\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.committer\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n          <dd class=\\\"committer\\\"><a href=\\\"\");\n  stack1 = helpers.unbound.call(depth0, \"urlCommitter\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"build.commit.committerName\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n        \");\n  return buffer;}\n\nfunction program13(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n        <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.config\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.config\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n        <dd class=\\\"config\\\">\");\n  foundHelper = helpers.formatConfig;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"build.config\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatConfig\", \"build.config\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dd>\\n      \");\n  return buffer;}\n\nfunction program15(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n      \");\n  stack1 = {};\n  stack1['jobsBinding'] = \"build.requiredJobs\";\n  stack1['required'] = \"true\";\n  stack1 = helpers.view.call(depth0, \"Travis.JobsView\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      \");\n  stack1 = {};\n  stack1['jobsBinding'] = \"build.allowedFailureJobs\";\n  stack1 = helpers.view.call(depth0, \"Travis.JobsView\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n    \");\n  return buffer;}\n\nfunction program17(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n      \");\n  stack1 = {};\n  stack1['contextBinding'] = \"build.jobs.firstObject\";\n  stack1 = helpers.view.call(depth0, \"Travis.LogView\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n    \");\n  return buffer;}\n\n  stack1 = helpers['with'].call(depth0, \"view\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['jobs/list'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n  \");\n  stack1 = helpers['if'].call(depth0, \"view.required\", {hash:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    <thead>\\n      <tr>\\n        \");\n  stack1 = helpers.each.call(depth0, \"key\", \"in\", \"view.build.configKeys\", {hash:{},inverse:self.noop,fn:self.program(6, program6, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n      </tr>\\n    </thead>\\n    <tbody>\\n      \");\n  stack1 = helpers.each.call(depth0, \"job\", \"in\", \"view.jobs\", {hash:{},inverse:self.noop,fn:self.program(8, program8, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </tbody>\\n  </table>\\n\\n  \");\n  stack1 = helpers.unless.call(depth0, \"view.required\", {hash:{},inverse:self.noop,fn:self.program(14, program14, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n    <table id=\\\"jobs\\\" class=\\\"list\\\">\\n      <caption>\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.build_matrix\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.build_matrix\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      </caption>\\n  \");\n  return buffer;}\n\nfunction program4(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n    <table id=\\\"allowed_failure_jobs\\\" class=\\\"list\\\">\\n      <caption>\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.allowed_failures\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.allowed_failures\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n        <a title=\\\"What's this?\\\" class=\\\"help\\\" name=\\\"help-allowed_failures\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"popup\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"></a>\\n      </caption>\\n  \");\n  return buffer;}\n\nfunction program6(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n          <th>\");\n  stack1 = helpers._triageMustache.call(depth0, \"key\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</th>\\n        \");\n  return buffer;}\n\nfunction program8(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        \");\n  stack1 = {};\n  stack1['contextBinding'] = \"job\";\n  stack1 = helpers.view.call(depth0, \"Travis.JobsItemView\", {hash:stack1,inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n      \");\n  return buffer;}\nfunction program9(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n          <td class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            \");\n  stack1 = helpers['if'].call(depth0, \"job.id\", {hash:{},inverse:self.noop,fn:self.program(10, program10, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          </td>\\n          <td class=\\\"duration\\\" \");\n  stack1 = {};\n  stack1['title'] = \"startedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            \");\n  foundHelper = helpers.formatDuration;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatDuration\", \"duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </td>\\n          <td class=\\\"finished_at timeago\\\" \");\n  stack1 = {};\n  stack1['title'] = \"finishedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            \");\n  foundHelper = helpers.formatTime;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"finishedAt\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatTime\", \"finishedAt\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </td>\\n          \");\n  stack1 = helpers.each.call(depth0, \"value\", \"in\", \"configValues\", {hash:{},inverse:self.noop,fn:self.program(12, program12, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n        \");\n  return buffer;}\nfunction program10(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n              <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showJob\", \"repository\", \"job\", {hash:stack1,contexts:[depth0,depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"number\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n            \");\n  return buffer;}\n\nfunction program12(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n            <td>\");\n  stack1 = helpers._triageMustache.call(depth0, \"value\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</td>\\n          \");\n  return buffer;}\n\nfunction program14(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n    <div id=\\\"help-allowed_failures\\\" class=\\\"popup\\\">\\n      <h4>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.allowed_failures\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.allowed_failures\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</h4>\\n      <p>\\n        Allowed Failures are items in your build matrix that are allowed to\\n        fail without causing the entire build to be shown as failed.\\n      </p>\\n      <p>\\n        You can define allowed failures in the build matrix as follows:\\n      </p>\\n      <pre>matrix:\\n  allow_failures:\\n    - rvm: ruby-head</pre>\\n      <p>\\n        This lets you add in experimental and preparatory builds to test against versions or\\n        configurations that you are not ready to officially support.\\n      </p>\\n    </div>\\n  \");\n  return buffer;}\n\n  stack1 = helpers['if'].call(depth0, \"view.jobs.length\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['jobs/log'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n  <pre id=\\\"log\\\" class=\\\"ansi\\\"><a href=\\\"#\\\" id=\\\"tail\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"toggleTailing\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <span class=\\\"status\\\"></span>\\n    <label>Follow logs</label>\\n  </a>\");\n  foundHelper = helpers.formatLog;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"log.body\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatLog\", \"log.body\", {hash:{},contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"</pre>\\n\\n  \");\n  stack1 = helpers['if'].call(depth0, \"sponsor.name\", {hash:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n  <a href='#' class=\\\"to-top\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"toTop\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">To top</a>\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n    <p class=\\\"sponsor\\\">\\n    \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.messages.sponsored_by\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.messages.sponsored_by\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      <a \");\n  stack1 = {};\n  stack1['href'] = \"sponsor.url\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"sponsor.name\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n    </p>\\n  \");\n  return buffer;}\n\nfunction program4(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n  <div id=\\\"log\\\" class=\\\"loading\\\">\\n    <span>Loading</span>\\n  </div>\\n\");}\n\n  stack1 = helpers._triageMustache.call(depth0, \"view.logSubscriber\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\\n\");\n  stack1 = helpers['if'].call(depth0, \"log.isLoaded\", {hash:{},inverse:self.program(4, program4, data),fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['jobs/show'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n  \");\n  stack1 = helpers['if'].call(depth0, \"job.isLoaded\", {hash:{},inverse:self.program(11, program11, data),fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n    <div \");\n  stack1 = {};\n  stack1['class'] = \"view.color\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n      <dl id=\\\"summary\\\">\\n        <div class=\\\"left\\\">\\n          <dt>Job</dt>\\n          <dd class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            \");\n  stack1 = helpers['if'].call(depth0, \"job.id\", {hash:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          </dd>\\n          <dt class=\\\"finished_at_label\\\">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.finished_at\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.finished_at\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n          <dd class=\\\"finished_at timeago\\\" \");\n  stack1 = {};\n  stack1['title'] = \"finishedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.formatTime;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"job.finishedAt\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatTime\", \"job.finishedAt\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dd>\\n          <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n          <dd class=\\\"duration\\\" \");\n  stack1 = {};\n  stack1['title'] = \"startedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.formatDuration;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"job.duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatDuration\", \"job.duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dd>\\n        </div>\\n\\n        <div class=\\\"right\\\">\\n          <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.commit\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.commit\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n          <dd class=\\\"commit\\\"><a \");\n  stack1 = {};\n  stack1['href'] = \"urlGithubCommit\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.formatCommit;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"commit\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatCommit\", \"commit\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n          \");\n  stack1 = helpers['if'].call(depth0, \"commit.compareUrl\", {hash:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          \");\n  stack1 = helpers['if'].call(depth0, \"commit.authorName\", {hash:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          \");\n  stack1 = helpers['if'].call(depth0, \"commit.committerName\", {hash:{},inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n        </div>\\n\\n        <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.message\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.message\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n        <dd class=\\\"message\\\">\");\n  foundHelper = helpers.formatMessage;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"commit.message\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatMessage\", \"commit.message\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dd>\\n        <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.config\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.config\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n        <dd class=\\\"config\\\">\");\n  foundHelper = helpers.formatConfig;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"job.config\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatConfig\", \"job.config\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dd>\\n      </dl>\\n\\n      \");\n  stack1 = {};\n  stack1['contextBinding'] = \"job\";\n  stack1 = helpers.view.call(depth0, \"Travis.LogView\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n    </div>\\n  \");\n  return buffer;}\nfunction program3(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n              <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showJob\", \"repository\", \"job\", {hash:stack1,contexts:[depth0,depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"job.number\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n            \");\n  return buffer;}\n\nfunction program5(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n            <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.compare\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.compare\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n            <dd class=\\\"compare\\\"><a \");\n  stack1 = {};\n  stack1['href'] = \"commit.compareUrl\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.pathFrom;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"commit.compareUrl\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"pathFrom\", \"commit.compareUrl\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n          \");\n  return buffer;}\n\nfunction program7(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n            <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.author\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.author\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n            <dd class=\\\"author\\\"><a \");\n  stack1 = {};\n  stack1['href'] = \"urlAuthor\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"commit.authorName\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n          \");\n  return buffer;}\n\nfunction program9(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n            <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.committer\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.committer\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n            <dd class=\\\"committer\\\"><a \");\n  stack1 = {};\n  stack1['href'] = \"urlCommitter\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"commit.committerName\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n          \");\n  return buffer;}\n\nfunction program11(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n    <div id=\\\"job\\\" class=\\\"loading\\\">\\n      <span>Loading</span>\\n    </div>\\n  \");}\n\n  stack1 = helpers['with'].call(depth0, \"view\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['layouts/home'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n  data.buffer.push(\"<div id=\\\"top\\\">\\n  \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"top\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"top\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"left\\\">\\n    \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"left\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"left\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </div>\\n\\n  <div id=\\\"main\\\">\\n    \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"main\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"main\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </div>\\n\\n  <div id=\\\"right\\\">\\n    \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"right\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"right\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </div>\\n</div>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['layouts/profile'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n  data.buffer.push(\"<div id=\\\"top\\\">\\n  \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"top\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"top\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"left\\\">\\n    \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"left\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"left\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </div>\\n\\n  <div id=\\\"main\\\">\\n    \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"main\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"main\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </div>\\n\\n  <div id=\\\"right\\\">\\n    <a id=\\\"github\\\" href=\\\"https://github.com/travis-ci\\\" title=\\\"Fork me on GitHub\\\">\\n      \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.fork_me\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.fork_me\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n    </a>\\n\\n    <div id=\\\"slider\\\" \");\n  stack1 = {};\n  stack1['target'] = \"Travis.app.slider\";\n  stack1 = helpers.action.call(depth0, \"toggle\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n      <div class='icon'></div>&nbsp;\\n    </div>\\n\\n    <div class=\\\"box\\\">\\n      <h4>Getting started?</h4>\\n      <p>\\n        Please read our <a href=\\\"http://about.travis-ci.org/docs/user/getting-started\\\">guide</a>.\\n        It will only take a few minutes :)\\n      </p>\\n      <p>\\n        You can find detailled docs on our <a href=\\\"http://about.travis-ci.org/\\\">about</a> site.\\n      </p>\\n      <p>\\n        If you need help please don't hesitate to join\\n        <a href=\\\"irc://irc.freenode.net#travis\\\">#travis</a> on irc.freenode.net\\n        or our <a href=\\\"http://groups.google.com/group/travis-ci\\\">mailinglist</a>.\\n      </p>\\n    </div>\\n  </div>\\n</div>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['layouts/sidebar'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n  data.buffer.push(\"<a id=\\\"github\\\" href=\\\"https://github.com/travis-ci\\\" title=\\\"Fork me on GitHub\\\">\\n  \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.fork_me\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.fork_me\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n</a>\\n\\n<div id=\\\"slider\\\" \");\n  stack1 = {};\n  stack1['target'] = \"Travis.app.slider\";\n  stack1 = helpers.action.call(depth0, \"toggle\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n  <div class='icon'></div>&nbsp;\\n</div>\\n\\n\");\n  stack1 = helpers.view.call(depth0, \"view.DecksView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\");\n  stack1 = helpers.view.call(depth0, \"view.WorkersView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\");\n  stack1 = helpers.view.call(depth0, \"view.QueuesView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\");\n  stack1 = helpers.view.call(depth0, \"view.LinksView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\\n<div id=\\\"about\\\" class=\\\"box\\\">\\n  <h4>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.about.join\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.about.join\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</h4>\\n  <ul>\\n    <li>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.about.repository\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.about.repository\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \": <a href=\\\"http://github.com/travis-ci\\\">Github</a></li>\\n    <li>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.about.twitter\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.about.twitter\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \": <a href=\\\"http://twitter.com/travisci\\\">@travisci</a></li>\\n    <li>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.about.mailing_list\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.about.mailing_list\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \": <a href=\\\"http://groups.google.com/group/travis-ci\\\">travis-ci</a></li>\\n    <li><a href=\\\"irc://irc.freenode.net#travis\\\">irc.freenode.net#travis</a></li>\\n  </ul>\\n</div>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['layouts/simple'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n  data.buffer.push(\"<div id=\\\"top\\\">\\n  \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"top\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"top\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"main\\\">\\n    \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"main\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"main\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </div>\\n</div>\\n\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['layouts/top'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n  data.buffer.push(\"<a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"goToRoot\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n  <h1>Travis</h1>\\n</a>\\n\\n<ul id=\\\"navigation\\\">\\n  <li \");\n  stack1 = {};\n  stack1['class'] = \"view.classHome\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"goToRoot\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">Home</a>\\n  </li>\\n  <li \");\n  stack1 = {};\n  stack1['class'] = \"view.classStats\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"goToStats\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">Stats</a>\\n  </li>\\n  <li>\\n    <a href=\\\"http://about.travis-ci.org/blog\\\">Blog</a>\\n  </li>\\n  <li>\\n    <a href=\\\"http://about.travis-ci.org/docs\\\">Docs</a>\\n  </li>\\n  <li \");\n  stack1 = {};\n  stack1['class'] = \"view.classProfile\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <p class=\\\"handle\\\">\\n      <a class=\\\"signed-out\\\" href=\\\"#\\\" \");\n  stack1 = {};\n  stack1['target'] = \"Travis.app\";\n  stack1 = helpers.action.call(depth0, \"signIn\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.top.github_login\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.top.github_login\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n      <a class=\\\"signed-in\\\" \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showProfile\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"><img \");\n  stack1 = {};\n  stack1['src'] = \"view.gravatarUrl\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"user.name\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n      <span class=\\\"signing-in\\\">Signing in</span>\\n    </p>\\n    <ul>\\n      <li>\\n        <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showProfile\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.top.profile\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.top.profile\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n      </li>\\n      <li>\\n        <a href=\\\"/\\\" \");\n  stack1 = {};\n  stack1['target'] = \"Travis.app\";\n  stack1 = helpers.action.call(depth0, \"signOut\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.top.sign_out\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.top.sign_out\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n      </li>\\n    </ul>\\n  </li>\\n</ul>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['profile/accounts'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n    <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showAccount\", \"view.account\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" class=\\\"name\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"view.name\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n    <p class=\\\"summary\\\">\\n      <span class=\\\"repos_label\\\">Repositories:</span>\\n      <abbr class=\\\"repos\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"view.content.reposCount\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</abbr>\\n    </p>\\n  \");\n  return buffer;}\n\n  data.buffer.push(\"<div id=\\\"search_box\\\">\\n</div>\\n\\n<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_accounts\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classAccounts\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5><a name=\\\"accounts\\\" href=\\\"\\\">Accounts</a></h5>\\n  </li>\\n</ul>\\n\\n<div class=\\\"tab\\\">\\n  \");\n  stack1 = {};\n  stack1['contentBinding'] = \"controller\";\n  foundHelper = helpers.collection;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"Travis.AccountsListView\", {hash:stack1,inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data}) : helperMissing.call(depth0, \"collection\", \"Travis.AccountsListView\", {hash:stack1,inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n</div>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['profile/show'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n  data.buffer.push(\"<h3>\");\n  stack1 = helpers._triageMustache.call(depth0, \"view.name\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</h3>\\n\\n\");\n  stack1 = helpers.view.call(depth0, \"Travis.ProfileTabsView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\\n<div class=\\\"tab\\\">\\n  \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"pane\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"pane\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n</div>\\n\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['profile/tabs'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n    <li id=\\\"tab_user\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classUser\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n      <h5>\\n        <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showUserProfile\", \"view.account\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">Profile</a>\\n      </h5>\\n    </li>\\n  \");\n  return buffer;}\n\n  data.buffer.push(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_hooks\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classHooks\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5>\\n      <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showAccount\", \"view.account\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">Repositories</a>\\n    </h5>\\n  </li>\\n  \");\n  stack1 = helpers['if'].call(depth0, \"view.displayUser\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n</ul>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['profile/tabs/hooks'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n  \");\n  stack1 = helpers['if'].call(depth0, \"user.isSyncing\", {hash:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n    <p class=\\\"message loading\\\">\\n      <span>Please wait while we sync from GitHub</span>\\n    </p>\\n  \");}\n\nfunction program4(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n    <p class=\\\"message\\\">\\n      Last synchronized from GitHub: \");\n  foundHelper = helpers.formatTime;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"user.syncedAt\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatTime\", \"user.syncedAt\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      <button class=\\\"sync_now\\\" \");\n  stack1 = {};\n  stack1['target'] = \"user\";\n  stack1 = helpers.action.call(depth0, \"sync\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        Sync now\\n      </button>\\n    </p>\\n\\n    <ul id=\\\"hooks\\\">\\n      \");\n  stack1 = helpers.each.call(depth0, \"hook\", \"in\", \"hooks\", {hash:{},inverse:self.program(7, program7, data),fn:self.program(5, program5, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </ul>\\n  \");\n  return buffer;}\nfunction program5(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        <li \");\n  stack1 = {};\n  stack1['class'] = \"hook.active:active\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n          <a \");\n  stack1 = {};\n  stack1['href'] = \"hook.urlGithub\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" rel=\\\"nofollow\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"hook.slug\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n          <p class=\\\"description\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"hook.description\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</p>\\n\\n          <div class=\\\"controls\\\">\\n            <a \");\n  stack1 = {};\n  stack1['href'] = \"hook.urlGithubAdmin\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" class=\\\"github-admin tool-tip\\\" title=\\\"Github service hooks admin page\\\"></a>\\n            <a \");\n  stack1 = {};\n  stack1['target'] = \"hook\";\n  stack1 = helpers.action.call(depth0, \"toggle\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" class=\\\"switch\\\"></a>\\n          </div>\\n        </li>\\n      \");\n  return buffer;}\n\nfunction program7(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n        <li>\\n          You do not seem to have any repositories that we could sync.\\n        </li>\\n      \");}\n\nfunction program9(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n  <p class=\\\"message loading\\\">\\n    <span>Loading</span>\\n  </p>\\n\");}\n\n  data.buffer.push(\"<p class=\\\"tip\\\">\\n  \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"profiles.show.message.your_repos\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"profiles.show.message.your_repos\", {hash:{},contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n</p>\\n\\n\");\n  stack1 = helpers['if'].call(depth0, \"hooks.isLoaded\", {hash:{},inverse:self.program(9, program9, data),fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['profile/tabs/user'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n  data.buffer.push(\"<img \");\n  stack1 = {};\n  stack1['src'] = \"view.gravatarUrl\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n\\n<dl class=\\\"profile\\\">\\n  <dt>\\n    \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"profiles.show.github\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"profiles.show.github\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":\\n  </dt>\\n  <dd>\\n    <a \");\n  stack1 = {};\n  stack1['href'] = \"urlGithub\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"user.login\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n  </dd>\\n  <dt>\\n    \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"profiles.show.email\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"profiles.show.email\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":\\n  </dt>\\n  <dd>\\n    \");\n  stack1 = helpers._triageMustache.call(depth0, \"user.email\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </dd>\\n  <dt>\\n    \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"profiles.show.token\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"profiles.show.token\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":\\n  </dt>\\n  <dd>\\n    \");\n  stack1 = helpers._triageMustache.call(depth0, \"user.token\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </dd>\\n</dl>\\n\\n<form>\\n  \");\n  stack1 = {};\n  stack1['id'] = \"locale\";\n  stack1['contentBinding'] = \"view.locales\";\n  stack1['valueBinding'] = \"Travis.app.currentUser.locale\";\n  stack1['optionLabelPath'] = \"content.name\";\n  stack1['optionValuePath'] = \"content.key\";\n  stack1 = helpers.view.call(depth0, \"Ember.Select\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\\n  <button name=\\\"commit\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"saveLocale\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"profiles.show.update_locale\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"profiles.show.update_locale\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </button>\\n</form>\\n\\n\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['queues/list'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n  <li class=\\\"queue\\\">\\n    <h4>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"queue\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"queue\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \": \");\n  stack1 = helpers._triageMustache.call(depth0, \"queue.name\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</h4>\\n    <ul \");\n  stack1 = {};\n  stack1['id'] = \"queue.id\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n      \");\n  stack1 = helpers.each.call(depth0, \"job\", \"in\", \"queue\", {hash:{},inverse:self.program(5, program5, data),fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </ul>\\n  </li>\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        \");\n  stack1 = {};\n  stack1['jobBinding'] = \"job\";\n  stack1 = helpers.view.call(depth0, \"Travis.QueueItemView\", {hash:stack1,inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n      \");\n  return buffer;}\nfunction program3(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n          <a \");\n  stack1 = {};\n  stack1['target'] = \"Travis.app.router\";\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showJob\", \"job.repository\", \"job\", {hash:stack1,contexts:[depth0,depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            <span class=\\\"slug\\\">\\n              \");\n  stack1 = helpers._triageMustache.call(depth0, \"job.repository.slug\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n            </span>\\n            #\");\n  stack1 = helpers._triageMustache.call(depth0, \"job.number\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </a>\\n        \");\n  return buffer;}\n\nfunction program5(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"no_job\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"no_job\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      \");\n  return buffer;}\n\n  data.buffer.push(\"<ul id=\\\"queues\\\">\\n\");\n  stack1 = helpers.each.call(depth0, \"queue\", \"in\", \"controller\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n</ul>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['repos/list'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n    \");\n  stack1 = helpers['with'].call(depth0, \"view.repository\", {hash:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n  \");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n      <div class=\\\"slug-and-status\\\">\\n        <span class=\\\"status\\\"></span>\\n        \");\n  stack1 = helpers['if'].call(depth0, \"slug\", {hash:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n      </div>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"lastBuildId\", {hash:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n      <p class=\\\"summary\\\">\\n        <span class=\\\"duration_label\\\">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":</span>\\n        <abbr class=\\\"duration\\\" \");\n  stack1 = {};\n  stack1['title'] = \"lastBuildStartedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.formatDuration;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"lastBuildDuration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatDuration\", \"lastBuildDuration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</abbr>,\\n        <span class=\\\"finished_at_label\\\">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.finished_at\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.finished_at\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":</span>\\n        <abbr class=\\\"finished_at timeago\\\" \");\n  stack1 = {};\n  stack1['title'] = \"lastBuildFinishedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.formatTime;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"lastBuildFinishedAt\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatTime\", \"lastBuildFinishedAt\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</abbr>\\n      </p>\\n\\n      <div class=\\\"indicator\\\"><span></span></div>\\n\\n      \");\n  stack1 = helpers['if'].call(depth0, \"description\", {hash:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    \");\n  return buffer;}\nfunction program3(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n          <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showRepository\", \"\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" class=\\\"slug\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"slug\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n        \");\n  return buffer;}\n\nfunction program5(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showBuild\", \"\", \"lastBuildId\", {hash:stack1,contexts:[depth0,depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" class=\\\"last_build\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"lastBuildNumber\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n      \");\n  return buffer;}\n\nfunction program7(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        <div class=\\\"info\\\">\\n          <p class=\\\"description\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"description\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</p>\\n        </div>\\n      \");\n  return buffer;}\n\n  data.buffer.push(\"<div id=\\\"search_box\\\">\\n  \");\n  stack1 = {};\n  stack1['valueBinding'] = \"controller.search\";\n  stack1 = helpers.view.call(depth0, \"Ember.TextField\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n</div>\\n\\n\");\n  stack1 = helpers.view.call(depth0, \"Travis.ReposListTabsView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\\n<a \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"toggleInfo\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" class=\\\"toggle-info\\\"></a>\\n\\n<div class=\\\"tab\\\">\\n  \");\n  stack1 = {};\n  stack1['contentBinding'] = \"controller\";\n  foundHelper = helpers.collection;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"Travis.RepositoriesListView\", {hash:stack1,inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data}) : helperMissing.call(depth0, \"collection\", \"Travis.RepositoriesListView\", {hash:stack1,inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n</div>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['repos/list/tabs'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n  data.buffer.push(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_recent\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classRecent\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5><a name=\\\"recent\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"activate\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.recent\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.recent\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></h5>\\n  </li>\\n  <li id=\\\"tab_owned\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classOwned\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5><a name=\\\"owned\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"activate\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.my_repositories\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.my_repositories\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></h5>\\n  </li>\\n  <li id=\\\"tab_search\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classSearch\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5><a name=\\\"search\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"activate\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.search\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.search\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></h5>\\n  </li>\\n</ul>\\n\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['repos/show'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n    \");\n  stack1 = helpers['with'].call(depth0, \"view.repository\", {hash:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n  \");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n      <h3>\\n        <a \");\n  stack1 = {};\n  stack1['href'] = \"view.urlGithub\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"slug\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n      </h3>\\n\\n      <p class=\\\"description\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"description\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</p>\\n\\n      <ul class=\\\"github-stats\\\">\\n        <li class=\\\"language\\\">\\n          \");\n  stack1 = helpers._triageMustache.call(depth0, \"lastBuildLanguage\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n        </li>\\n        <li>\\n          <a class=\\\"watchers\\\" title=\\\"Watchers\\\" \");\n  stack1 = {};\n  stack1['href'] = \"view.urlGithubWatchers\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            \");\n  stack1 = helpers._triageMustache.call(depth0, \"stats.watchers\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </a>\\n        </li>\\n        <li>\\n          <a class=\\\"forks\\\" title=\\\"Forks\\\" \");\n  stack1 = {};\n  stack1['href'] = \"view.urlGithubNetwork\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            \");\n  stack1 = helpers._triageMustache.call(depth0, \"stats.forks\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </a>\\n        </li>\\n      </ul>\\n\\n      \");\n  stack1 = helpers.view.call(depth0, \"Travis.RepoShowTabsView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      \");\n  stack1 = helpers.view.call(depth0, \"Travis.RepoShowToolsView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n    \");\n  return buffer;}\n\nfunction program4(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n    <span>Loading</span>\\n  \");}\n\n  data.buffer.push(\"<div id=\\\"repository\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.class\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n  \");\n  stack1 = helpers['if'].call(depth0, \"view.repository.isLoaded\", {hash:{},inverse:self.program(4, program4, data),fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n  <div class=\\\"tab\\\">\\n    \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"pane\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"pane\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </div>\\n</div>\\n\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['repos/show/tabs'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n      <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showRepository\", \"view.repository\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.tabs.current\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.tabs.current\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      </a>\\n      \");\n  return buffer;}\n\nfunction program3(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n      <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showBuilds\", \"view.repository\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.tabs.build_history\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.tabs.build_history\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      </a>\\n      \");\n  return buffer;}\n\nfunction program5(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n      <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showPullRequests\", \"view.repository\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.tabs.pull_requests\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.tabs.pull_requests\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      </a>\\n      \");\n  return buffer;}\n\nfunction program7(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n      <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showBranches\", \"view.repository\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.tabs.branches\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.tabs.branches\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      </a>\\n      \");\n  return buffer;}\n\nfunction program9(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n      <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showBuild\", \"view.build\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.tabs.build\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.tabs.build\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" #\");\n  stack1 = helpers._triageMustache.call(depth0, \"view.build.number\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      </a>\\n      \");\n  return buffer;}\n\nfunction program11(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n      <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showBuild\", \"view.job\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.tabs.job\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.tabs.job\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" #\");\n  stack1 = helpers._triageMustache.call(depth0, \"view.job.number\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      </a>\\n      \");\n  return buffer;}\n\n  data.buffer.push(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_current\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classCurrent\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"view.repository.slug\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_builds\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classBuilds\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"view.repository.slug\", {hash:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_pull_requests\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classPullRequests\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"view.repository.slug\", {hash:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_branches\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classBranches\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"view.repository.slug\", {hash:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_build\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classBuild\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"view.build.id\", {hash:{},inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_job\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classJob\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"view.job.id\", {hash:{},inverse:self.noop,fn:self.program(11, program11, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </h5>\\n  </li>\\n</ul>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['repos/show/tools'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        \");\n  stack1 = {};\n  stack1['contentBinding'] = \"view.branches\";\n  stack1['selectionBinding'] = \"view.branch\";\n  stack1['optionLabelPath'] = \"content.commit.branch\";\n  stack1['optionValuePath'] = \"content.commit.branch\";\n  stack1 = helpers.view.call(depth0, \"Ember.Select\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      \");\n  return buffer;}\n\nfunction program3(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n        <span class=\\\"loading\\\"></span>\\n      \");}\n\n  data.buffer.push(\"<div id=\\\"tools\\\">\\n  <a href=\\\"#\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"toggle\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"></a>\\n  <div class=\\\"pane\\\">\\n    <p>\\n      <label>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.branch\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.branch\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":</label>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"view.branches.isLoaded\", {hash:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </p>\\n    <p>\\n      <label>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.image_url\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.image_url\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":</label>\\n      <input type=\\\"text\\\" class=\\\"url\\\" \");\n  stack1 = {};\n  stack1['value'] = \"view.urlStatusImage\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"></input>\\n    </p>\\n    <p>\\n      <label>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.markdown\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.markdown\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":</label>\\n      <input type=\\\"text\\\" class=\\\"markdown\\\" \");\n  stack1 = {};\n  stack1['value'] = \"view.markdownStatusImage\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"></input>\\n    </p>\\n    <p>\\n      <label>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.textile\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.textile\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":</label>\\n      <input type=\\\"text\\\" class=\\\"textile\\\" \");\n  stack1 = {};\n  stack1['value'] = \"view.textileStatusImage\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"></input>\\n    </p>\\n    <p>\\n      <label>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.rdoc\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.rdoc\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":</label>\\n      <input type=\\\"text\\\" class=\\\"rdoc\\\" \");\n  stack1 = {};\n  stack1['value'] = \"view.rdocStatusImage\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"></input>\\n    </p>\\n  </div>\\n</div>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['sponsors/decks'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n    \");\n  stack1 = helpers.each.call(depth0, \"deck\", {hash:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n  \");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n      <li \");\n  stack1 = {};\n  stack1['class'] = \"type\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        <a \");\n  stack1 = {};\n  stack1['href'] = \"url\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n          <img \");\n  stack1 = {};\n  stack1['src'] = \"image\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        </a>\\n      </li>\\n    \");\n  return buffer;}\n\n  data.buffer.push(\"<h4>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.sponsers\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.sponsers\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</h4>\\n\\n<ul class=\\\"sponsors top\\\">\\n  \");\n  stack1 = helpers.each.call(depth0, \"deck\", \"in\", \"controller\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n</ul>\\n\\n<p class=\\\"hint\\\">\\n  <a href=\\\"https://love.travis-ci.org/sponsors\\\">\\n    \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.sponsors_link\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.sponsors_link\", {hash:{},contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n  </a>\\n</p>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['sponsors/links'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n      <li>\\n        \");\n  stack1 = {};\n  stack1['unescaped'] = \"true\";\n  stack1 = helpers._triageMustache.call(depth0, \"link\", {hash:stack1,contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n      </li>\\n    \");\n  return buffer;}\n\n  data.buffer.push(\"<div class=\\\"box\\\">\\n  <h4>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.sponsers\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.sponsers\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</h4>\\n\\n  <ul class=\\\"sponsors bottom\\\">\\n    \");\n  stack1 = helpers.each.call(depth0, \"controller\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n  </ul>\\n\\n  <p class=\\\"hint\\\">\\n    <a href=\\\"https://love.travis-ci.org/sponsors\\\">\\n      \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.sponsors_link\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.sponsors_link\", {hash:{},contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </a>\\n  </p>\\n</div>\\n\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['stats/show'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  \n\n\n  data.buffer.push(\"<div id=\\\"repos_stats\\\"></div>\\n<div id=\\\"tests_stats\\\"></div>\\n\\n\");\n});\n\nEmber.TEMPLATES['workers/list'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n  <h4>\\n    \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"workers\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"workers\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n    <a id=\\\"toggle-workers\\\" \");\n  stack1 = {};\n  stack1['target'] = \"parentView.parentView\";\n  stack1 = helpers.action.call(depth0, \"toggleWorkers\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"></a>\\n  </h4>\\n  <ul id=\\\"workers\\\">\\n    \");\n  stack1 = helpers.each.call(depth0, \"group\", \"in\", \"controller.groups\", {hash:{},inverse:self.program(11, program11, data),fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n  </ul>\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n      \");\n  stack1 = helpers.view.call(depth0, \"Travis.WorkersListView\", {hash:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    \");\n  return buffer;}\nfunction program3(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        <li class=\\\"group\\\">\\n          <h5 \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"toggle\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            \");\n  stack1 = helpers._triageMustache.call(depth0, \"group.firstObject.host\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </h5>\\n          <ul>\\n          \");\n  stack1 = helpers.each.call(depth0, \"worker\", \"in\", \"group\", {hash:{},inverse:self.noop,fn:self.program(4, program4, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          </ul>\\n        </li>\\n      \");\n  return buffer;}\nfunction program4(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n            \");\n  stack1 = {};\n  stack1['workerBinding'] = \"worker\";\n  stack1 = helpers.view.call(depth0, \"Travis.WorkersItemView\", {hash:stack1,inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          \");\n  return buffer;}\nfunction program5(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n              <li class=\\\"worker\\\">\\n                <div class=\\\"status\\\"></div>\\n                \");\n  stack1 = helpers['if'].call(depth0, \"worker.isWorking\", {hash:{},inverse:self.program(9, program9, data),fn:self.program(6, program6, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n              </li>\\n            \");\n  return buffer;}\nfunction program6(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n                  \");\n  stack1 = helpers['if'].call(depth0, \"worker.job_id\", {hash:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n                \");\n  return buffer;}\nfunction program7(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n                    <a \");\n  stack1 = {};\n  stack1['target'] = \"Travis.app.router\";\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showJob\", \"worker.repository\", \"worker.job_id\", {hash:stack1,contexts:[depth0,depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" \");\n  stack1 = {};\n  stack1['title'] = \"worker.lastSeenAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n                      \");\n  stack1 = helpers._triageMustache.call(depth0, \"view.display\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n                    </a>\\n                  \");\n  return buffer;}\n\nfunction program9(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n                  \");\n  stack1 = helpers._triageMustache.call(depth0, \"view.display\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n                \");\n  return buffer;}\n\nfunction program11(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n      No workers\\n    \");}\n\n  stack1 = helpers.view.call(depth0, \"Travis.WorkersView\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n\");\n  return buffer;\n});\n\n})();\n//@ sourceURL=templates");minispade.register('config/locales', "(function() {window.I18n = window.I18n || {}\nwindow.I18n.translations = {\"ca\":{\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"pt-BR\":\"português brasileiro\",\"ru\":\"Русский\"}},\"en\":{\"errors\":{\"messages\":{\"not_found\":\"not found\",\"already_confirmed\":\"was already confirmed\",\"not_locked\":\"was not locked\"}},\"devise\":{\"failure\":{\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"You have to confirm your account before continuing.\",\"locked\":\"Your account is locked.\",\"invalid\":\"Invalid email or password.\",\"invalid_token\":\"Invalid authentication token.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"inactive\":\"Your account was not activated yet.\"},\"sessions\":{\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"passwords\":{\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"updated\":\"Your password was changed successfully. You are now signed in.\"},\"confirmations\":{\"send_instructions\":\"You will receive an email with instructions about how to confirm your account in a few minutes.\",\"confirmed\":\"Your account was successfully confirmed. You are now signed in.\"},\"registrations\":{\"signed_up\":\"You have signed up successfully. If enabled, a confirmation was sent to your e-mail.\",\"updated\":\"You updated your account successfully.\",\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"unlocked\":\"Your account was successfully unlocked. You are now signed in.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions\"}}},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hour\",\"other\":\"%{count} hours\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} second\",\"other\":\"%{count} seconds\"}}},\"workers\":\"Workers\",\"queue\":\"Queue\",\"no_job\":\"There are no jobs\",\"repositories\":{\"branch\":\"Branch\",\"image_url\":\"Image URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"tabs\":{\"current\":\"Current\",\"build_history\":\"Build History\",\"branches\":\"Branch Summary\",\"pull_requests\":\"Pull Requests\",\"build\":\"Build\",\"job\":\"Job\"}},\"build\":{\"job\":\"Job\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"show_more\":\"Show more\"},\"layouts\":{\"top\":{\"home\":\"Home\",\"blog\":\"Blog\",\"docs\":\"Docs\",\"stats\":\"Stats\",\"github_login\":\"Sign in with Github\",\"profile\":\"Profile\",\"sign_out\":\"Sign Out\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Recent\",\"search\":\"Search\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"See all of our amazing sponsors &rarr;\",\"my_repositories\":\"My Repositories\"},\"about\":{\"alpha\":\"This stuff is alpha.\",\"messages\":{\"alpha\":\"Please do <strong>not</strong> consider this a stable service. We're still far from that! More info <a href='https://github.com/travis-ci'>here.</a>\"},\"join\":\"Join us and help!\",\"mailing_list\":\"Mailing List\",\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Author\",\"build\":\"Build\",\"build_matrix\":\"Build Matrix\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Compare\",\"config\":\"Config\",\"duration\":\"Duration\",\"finished_at\":\"Finished at\",\"job\":\"Job\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.\",\"config\":\"how to configure custom build options\"},\"messages\":{\"notice\":\"To get started, please read our <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Getting Started guide</a>.\\n  <small>It will only take a couple of minutes.</small>\"},\"token\":\"Token\",\"your_repos\":\"Your Repositories\",\"update\":\"Update\",\"update_locale\":\"Update\",\"your_locale\":\"Your Locale\"}},\"statistics\":{\"index\":{\"count\":\"Count\",\"repo_growth\":\"Repository Growth\",\"total_projects\":\"Total Projects/Repositories\",\"build_count\":\"Build Count\",\"last_month\":\"last month\",\"total_builds\":\"Total Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"es\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"workers\":\"Procesos\",\"queue\":\"Cola\",\"no_job\":\"No hay trabajos\",\"repositories\":{\"branch\":\"Rama\",\"image_url\":\"Imagen URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"tabs\":{\"current\":\"Actual\",\"build_history\":\"Histórico\",\"branches\":\"Ramas\",\"build\":\"Builds\",\"job\":\"Trabajo\"}},\"build\":{\"job\":\"Trabajo\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"sponsored_by\":\"Patrocinado por\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"layouts\":{\"top\":{\"home\":\"Inicio\",\"blog\":\"Blog\",\"docs\":\"Documentación\",\"stats\":\"Estadísticas\",\"github_login\":\"Iniciar sesión con Github\",\"profile\":\"Perfil\",\"sign_out\":\"Desconectar\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Hazme un Fork en Github\",\"recent\":\"Reciente\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Ver todos nuestros patrocinadores &rarr;\",\"my_repositories\":\"Mis Repositorios\"},\"about\":{\"alpha\":\"Esto es alpha.\",\"messages\":{\"alpha\":\"Por favor <strong>no</strong> considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información <a href='https://github.com/travis-ci'>aquí.</a>\"},\"join\":\"Únetenos y ayudanos!\",\"mailing_list\":\"Lista de Correos\",\"repository\":\"Repositorio\",\"twitter\":\"Twitter\"}},\"profiles\":{\"show\":{\"email\":\"Correo electrónico\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Activa los interruptores para inicial el  Travis service hook para tus proyectos, y haz un Push en GitHub.<br />\\n  Para probar varias versiones de ruby, mira\",\"config\":\"como configurar tus propias opciones para el Build\"},\"messages\":{\"notice\":\"Para comenzar, por favor lee nuestra <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Guía de Inicio </a>.\\n  <small>Solo tomará unos pocos minutos.</small>\"},\"token\":\"Token\",\"your_repos\":\"Tus repositorios\",\"update\":\"Actualizar\",\"update_locale\":\"Actualizar\",\"your_locale\":\"Tu Idioma\"}},\"statistics\":{\"index\":{\"count\":\"Número\",\"repo_growth\":\"Crecimiento de Repositorios\",\"total_projects\":\"Total de Proyectos/Repositorios\",\"build_count\":\"Número de Builds\",\"last_month\":\"mes anterior\",\"total_builds\":\"Total de Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"fr\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} heure\",\"other\":\"%{count} heures\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} secondes\"}}},\"workers\":\"Processus\",\"queue\":\"File\",\"no_job\":\"Pas de tâches\",\"repositories\":{\"branch\":\"Branche\",\"image_url\":\"Image\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"tabs\":{\"current\":\"Actuel\",\"build_history\":\"Historique des tâches\",\"branches\":\"Résumé des branches\",\"build\":\"Construction\",\"job\":\"Tâche\"}},\"build\":{\"job\":\"Tâche\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"builds\":{\"name\":\"Version\",\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"layouts\":{\"top\":{\"home\":\"Accueil\",\"blog\":\"Blog\",\"docs\":\"Documentation\",\"stats\":\"Statistiques\",\"github_login\":\"Connection Github\",\"profile\":\"Profil\",\"sign_out\":\"Déconnection\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Faites un Fork sur Github\",\"recent\":\"Récent\",\"search\":\"Chercher\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Voir tous nos extraordinaire sponsors &rarr;\",\"my_repositories\":\"Mes dépôts\"},\"about\":{\"alpha\":\"Ceci est en alpha.\",\"messages\":{\"alpha\":\"S'il vous plaît ne considérez <strong>pas</strong> ce service comme étant stable. Nous sommes loin de ça! Plus d'infos <a href='https://github.com/travis-ci'>ici.</a>\"},\"join\":\"Joignez-vous à nous et aidez-nous!\",\"mailing_list\":\"Liste de distribution\",\"repository\":\"Dépôt\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Version\",\"build_matrix\":\"Matrice des versions\",\"commit\":\"Commit\",\"committer\":\"Committeur\",\"compare\":\"Comparer\",\"config\":\"Config\",\"duration\":\"Durée\",\"finished_at\":\"Terminé à\",\"job\":\"Tâche\",\"log\":\"Journal\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"message\":{\"your_repos\":\"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.<br />\\nPour tester sur plus de versions de ruby, voir\",\"config\":\"comment configurer des options de version personnalisées\"},\"messages\":{\"notice\":\"Pour commencer, veuillez lire notre <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">guide de démarrage</a>.\\n <small>Cela ne vous prendra que quelques minutes.</small>\"},\"token\":\"Jeton\",\"your_repos\":\"Vos dépôts\",\"email\":\"Courriel\",\"update\":\"Modifier\",\"update_locale\":\"Modifier\",\"your_locale\":\"Votre langue\"}},\"statistics\":{\"index\":{\"count\":\"Décompte\",\"repo_growth\":\"Croissance de dépôt\",\"total_projects\":\"Total des projets/dépôts\",\"build_count\":\"Décompte des versions\",\"last_month\":\"mois dernier\",\"total_builds\":\"Total des versions\"}},\"admin\":{\"actions\":{\"create\":\"créer\",\"created\":\"créé\",\"delete\":\"supprimer\",\"deleted\":\"supprimé\",\"update\":\"mise à jour\",\"updated\":\"mis à jour\"},\"credentials\":{\"log_out\":\"Déconnection\"},\"delete\":{\"confirmation\":\"Oui, je suis sure\",\"flash_confirmation\":\"%{name} a été détruit avec succès\"},\"flash\":{\"error\":\"%{name} n'a pas pu être %{action}\",\"noaction\":\"Aucune action n'a été entreprise\",\"successful\":\"%{name} a réussi à %{action}\"},\"history\":{\"name\":\"Historique\",\"no_activity\":\"Aucune activité\",\"page_name\":\"Historique pour %{name}\"},\"list\":{\"add_new\":\"Ajouter un nouveau\",\"delete_action\":\"Supprimer\",\"delete_selected\":\"Supprimer la sélection\",\"edit_action\":\"Modifier\",\"search\":\"Rechercher\",\"select\":\"Sélectionner le %{name} à modifier\",\"select_action\":\"Sélectionner\",\"show_all\":\"Montrer tout\"},\"new\":{\"basic_info\":\"Information de base\",\"cancel\":\"Annuler\",\"chosen\":\"%{name} choisi\",\"chose_all\":\"Choisir tout\",\"clear_all\":\"Déselectionner tout\",\"many_chars\":\"caractères ou moins\",\"one_char\":\"caractère.\",\"optional\":\"Optionnel\",\"required\":\"Requis\",\"save\":\"Sauvegarder\",\"save_and_add_another\":\"Sauvegarder et en ajouter un autre\",\"save_and_edit\":\"Sauvegarder et modifier\",\"select_choice\":\"Faites vos choix et cliquez\"},\"dashboard\":{\"add_new\":\"Ajouter un nouveau\",\"last_used\":\"Dernière utilisation\",\"model_name\":\"Nom du modèle\",\"modify\":\"Modification\",\"name\":\"Tableau de bord\",\"pagename\":\"Administration du site\",\"records\":\"Enregistrements\",\"show\":\"Voir\",\"ago\":\"plus tôt\"}},\"home\":{\"name\":\"accueil\"},\"repository\":{\"duration\":\"Durée\"},\"devise\":{\"confirmations\":{\"confirmed\":\"Votre compte a été crée avec succès. Vous être maintenant connecté.\",\"send_instructions\":\"Vous allez recevoir un courriel avec les instructions de confirmation de votre compte dans quelques minutes.\"},\"failure\":{\"inactive\":\"Votre compte n'a pas encore été activé.\",\"invalid\":\"Adresse courriel ou mot de passe invalide.\",\"invalid_token\":\"Jeton d'authentification invalide.\",\"locked\":\"Votre compte est bloqué.\",\"timeout\":\"Votre session est expirée, veuillez vous reconnecter pour continuer.\",\"unauthenticated\":\"Vous devez vous connecter ou vous enregistrer afin de continuer\",\"unconfirmed\":\"Vous devez confirmer votre compte avant de continuer.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instructions de confirmations\"},\"reset_password_instructions\":{\"subject\":\"Instruction de remise à zéro du mot de passe\"},\"unlock_instructions\":{\"subject\":\"Instruction de débloquage\"}},\"passwords\":{\"send_instructions\":\"Vous recevrez un courriel avec les instructions de remise à zéro du mot de passe dans quelques minutes.\",\"updated\":\"Votre mot de passe a été changé avec succès. Vous êtes maintenant connecté.\"},\"registrations\":{\"destroyed\":\"Au revoir! Votre compte a été annulé avec succès. Nous espérons vous revoir bientôt.\",\"signed_up\":\"Vous êtes enregistré avec succès. Si activé, une confirmation vous a été envoyé par courriel.\",\"updated\":\"Votre compte a été mis a jour avec succès\"},\"sessions\":{\"signed_in\":\"Connecté avec succès\",\"signed_out\":\"Déconnecté avec succès\"},\"unlocks\":{\"send_instructions\":\"Vous recevrez un courriel contenant les instructions pour débloquer votre compte dans quelques minutes.\",\"unlocked\":\"Votre compte a été débloqué avec succès.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"étais déja confirmé\",\"not_found\":\"n'a pas été trouvé\",\"not_locked\":\"n'étais pas bloqué\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"ja\":{\"workers\":\"ワーカー\",\"queue\":\"キュー\",\"no_job\":\"ジョブはありません\",\"repositories\":{\"branch\":\"ブランチ\",\"image_url\":\"画像URL\",\"markdown\":\".md\",\"textile\":\".textile\",\"rdoc\":\".rdoc\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"tabs\":{\"current\":\"最新\",\"build_history\":\"ビルド履歴\",\"branches\":\"ブランチまとめ\",\"build\":\"ビルド\",\"job\":\"ジョブ\"}},\"build\":{\"job\":\"ジョブ\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"ビルドマトリクス\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"builds\":{\"name\":\"ビルド\",\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"失敗許容範囲外\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"layouts\":{\"about\":{\"alpha\":\"まだアルファですよ!\",\"join\":\"参加してみよう!\",\"mailing_list\":\"メールリスト\",\"messages\":{\"alpha\":\"Travis-ciは安定したサービスまで後一歩!詳しくは<a href='https://github.com/travis-ci'>こちら</a>\"},\"repository\":\"リポジトリ\",\"twitter\":\"ツイッター\"},\"application\":{\"fork_me\":\"Githubでフォークしよう\",\"my_repositories\":\"マイリポジトリ\",\"recent\":\"最近\",\"search\":\"検索\",\"sponsers\":\"スポンサー\",\"sponsors_link\":\"スポンサーをもっと見る &rarr;\"},\"top\":{\"blog\":\"ブログ\",\"docs\":\"Travisとは?\",\"github_login\":\"Githubでログイン\",\"home\":\"ホーム\",\"profile\":\"プロフィール\",\"sign_out\":\"ログアウト\",\"stats\":\"統計\",\"admin\":\"管理\"},\"mobile\":{\"author\":\"制作者\",\"build\":\"ビルド\",\"build_matrix\":\"ビルドマトリクス\",\"commit\":\"コミット\",\"committer\":\"コミット者\",\"compare\":\"比較\",\"config\":\"設定\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"job\":\"ジョブ\",\"log\":\"ログ\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"email\":\"メール\",\"message\":{\"config\":\"詳細設定\",\"your_repos\":\"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:\"},\"messages\":{\"notice\":\"まずは<a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Travisのはじめ方</a>を参照してください。\"},\"token\":\"トークン\",\"your_repos\":\"リポジトリ\",\"update\":\"更新\",\"update_locale\":\"更新\",\"your_locale\":\"言語設定\"}},\"statistics\":{\"index\":{\"build_count\":\"ビルド数\",\"count\":\"数\",\"last_month\":\"先月\",\"repo_growth\":\"リポジトリ\",\"total_builds\":\"合計ビルド数\",\"total_projects\":\"合計リポジトリ\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nb\":{\"admin\":{\"actions\":{\"create\":\"opprett\",\"created\":\"opprettet\",\"delete\":\"slett\",\"deleted\":\"slettet\",\"update\":\"oppdater\",\"updated\":\"oppdatert\"},\"credentials\":{\"log_out\":\"Logg ut\"},\"dashboard\":{\"add_new\":\"Legg til ny\",\"ago\":\"siden\",\"last_used\":\"Sist brukt\",\"model_name\":\"Modell\",\"modify\":\"Rediger\",\"name\":\"Dashbord\",\"pagename\":\"Nettstedsadministrasjon\",\"records\":\"Oppføringer\",\"show\":\"Vis\"},\"delete\":{\"confirmation\":\"Ja, jeg er sikker\",\"flash_confirmation\":\"%{name} ble slettet\"},\"flash\":{\"error\":\"%{name} kunne ikke bli %{action}\",\"noaction\":\"Ingen handlinger ble utført\",\"successful\":\"%{name} ble %{action}\"},\"history\":{\"name\":\"Logg\",\"no_activity\":\"Ingen aktivitet\",\"page_name\":\"Logg for %{name}\"},\"list\":{\"add_new\":\"Legg til ny\",\"delete_action\":\"Slett\",\"delete_selected\":\"Slett valgte\",\"edit_action\":\"Rediger\",\"search\":\"Søk\",\"select\":\"Velg %{name} for å redigere\",\"select_action\":\"Velg\",\"show_all\":\"Vis alle \"},\"new\":{\"basic_info\":\"Basisinformasjon\",\"cancel\":\"Avbryt\",\"chosen\":\"Valgt %{name}\",\"chose_all\":\"Velg alle\",\"clear_all\":\"Fjern alle\",\"many_chars\":\"eller færre tegn.\",\"one_char\":\"tegn.\",\"optional\":\"Valgfri\",\"required\":\"Påkrevd\",\"save\":\"Lagre\",\"save_and_add_another\":\"Lagre og legg til ny\",\"save_and_edit\":\"Lagre og rediger\",\"select_choice\":\"Kryss av for dine valg og klikk\"}},\"build\":{\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\"},\"builds\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testen ble kjørt på en maskin sponset av\"},\"name\":\"Jobb\",\"started_at\":\"Startet\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} time\",\"other\":\"%{count} timer\"},\"minutes_exact\":{\"one\":\"%{count} minutt\",\"other\":\"%{count} minutter\"},\"seconds_exact\":{\"one\":\"%{count} sekund\",\"other\":\"%{count} sekunder\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Din konto er aktivert og du er nå innlogget.\",\"send_instructions\":\"Om noen få minutter så vil du få en e-post med informasjon om hvordan du bekrefter kontoen din.\"},\"failure\":{\"inactive\":\"Kontoen din har ikke blitt aktivert enda.\",\"invalid\":\"Ugyldig e-post eller passord.\",\"invalid_token\":\"Ugyldig autentiseringskode.\",\"locked\":\"Kontoen din er låst.\",\"timeout\":\"Du ble logget ut siden på grunn av mangel på aktivitet, vennligst logg inn på nytt.\",\"unauthenticated\":\"Du må logge inn eller registrere deg for å fortsette.\",\"unconfirmed\":\"Du må bekrefte kontoen din før du kan fortsette.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bekreftelsesinformasjon\"},\"reset_password_instructions\":{\"subject\":\"Instruksjoner for å få nytt passord\"},\"unlock_instructions\":{\"subject\":\"Opplåsningsinstruksjoner\"}},\"passwords\":{\"send_instructions\":\"Om noen få minutter så vil du få en epost med informasjon om hvordan du kan få et nytt passord.\",\"updated\":\"Passordet ditt ble endret, og du er logget inn.\"},\"registrations\":{\"destroyed\":\"Adjø! Kontoen din ble kansellert. Vi håper vi ser deg igjen snart.\",\"signed_up\":\"Du er nå registrert.\",\"updated\":\"Kontoen din ble oppdatert.\"},\"sessions\":{\"signed_in\":\"Du er nå logget inn.\",\"signed_out\":\"Du er nå logget ut.\"},\"unlocks\":{\"send_instructions\":\"Om noen få minutter så kommer du til å få en e-post med informasjon om hvordan du kan låse opp kontoen din.\",\"unlocked\":\"Kontoen din ble låst opp, og du er nå logget inn igjen.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"har allerede blitt bekreftet\",\"not_found\":\"ikke funnnet\",\"not_locked\":\"var ikke låst\"}},\"home\":{\"name\":\"hjem\"},\"jobs\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testserien ble kjørt på en maskin sponset av\"},\"started_at\":\"Startet\"},\"layouts\":{\"about\":{\"alpha\":\"Dette er alfa-greier.\",\"join\":\"Bli med og hjelp oss!\",\"mailing_list\":\"E-postliste\",\"messages\":{\"alpha\":\"Dette er <strong>ikke</strong> en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du <a href=\\\"https://github.com/travis-ci\\\">her</a>.\"},\"repository\":\"Kodelager\",\"twitter\":\"Twitter.\"},\"application\":{\"fork_me\":\"Se koden på Github\",\"my_repositories\":\"Mine kodelagre\",\"recent\":\"Nylig\",\"search\":\"Søk\",\"sponsers\":\"Sponsorer\",\"sponsors_link\":\"Se alle de flotte sponsorene våre &rarr;\"},\"mobile\":{\"author\":\"Forfatter\",\"build\":\"Jobb\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\",\"log\":\"Logg\"},\"top\":{\"admin\":\"Administrator\",\"blog\":\"Blogg\",\"docs\":\"Dokumentasjon\",\"github_login\":\"Logg inn med Github\",\"home\":\"Hjem\",\"profile\":\"Profil\",\"sign_out\":\"Logg ut\",\"stats\":\"Statistikk\"}},\"no_job\":\"Ingen jobber finnnes\",\"profiles\":{\"show\":{\"email\":\"E-post\",\"github\":\"Github\",\"message\":{\"config\":\"hvordan sette opp egne jobbinnstillinger\",\"your_repos\":\"Slå\\u0010 på Travis for prosjektene dine ved å dra i bryterne under, og send koden til Github.<br />\\nFor å teste mot flere ruby-versjoner, se dokumentasjonen for\"},\"messages\":{\"notice\":\"For å komme i gang, vennligst les <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">kom-i-gang-veivisereren</a> vår. <small>Det tar bare et par minutter.</small>\"},\"token\":\"Kode\",\"update\":\"Oppdater\",\"update_locale\":\"Oppdater\",\"your_locale\":\"Ditt språk\",\"your_repos\":\"Dine kodelagre\"}},\"queue\":\"Kø\",\"repositories\":{\"branch\":\"Gren\",\"commit\":\"Innsender\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"image_url\":\"Bilde-URL\",\"markdown\":\"Markdown\",\"message\":\"Beskrivelse\",\"rdoc\":\"RDOC\",\"started_at\":\"Startet\",\"tabs\":{\"branches\":\"Grensammendrag\",\"build\":\"Jobb\",\"build_history\":\"Jobblogg\",\"current\":\"Siste\",\"job\":\"Jobb\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Varighet\"},\"statistics\":{\"index\":{\"build_count\":\"Antall jobber\",\"count\":\"Antall\",\"last_month\":\"siste måned\",\"repo_growth\":\"Vekst i kodelager\",\"total_builds\":\"Totale jobber\",\"total_projects\":\"Antall prosjekter/kodelagre\"}},\"workers\":\"Arbeidere\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nl\":{\"admin\":{\"actions\":{\"create\":\"aanmaken\",\"created\":\"aangemaakt\",\"delete\":\"verwijderen\",\"deleted\":\"verwijderd\",\"update\":\"bijwerken\",\"updated\":\"bijgewerkt\"},\"credentials\":{\"log_out\":\"Afmelden\"},\"dashboard\":{\"add_new\":\"Nieuwe toevoegen\",\"ago\":\"geleden\",\"last_used\":\"Laatst gebruikt\",\"model_name\":\"Model naam\",\"modify\":\"Wijzigen\",\"pagename\":\"Site administratie\",\"show\":\"Laten zien\",\"records\":\"Gegevens\"},\"delete\":{\"confirmation\":\"Ja, ik ben zeker\",\"flash_confirmation\":\"%{name} is vernietigd\"},\"flash\":{\"error\":\"%{name} kon niet worden %{action}\",\"noaction\":\"Er zijn geen acties genomen\",\"successful\":\"%{name} is %{action}\"},\"history\":{\"name\":\"Geschiedenis\",\"no_activity\":\"Geen activiteit\",\"page_name\":\"Geschiedenis van %{name}\"},\"list\":{\"add_new\":\"Nieuwe toevoegen\",\"delete_action\":\"Verwijderen\",\"delete_selected\":\"Verwijder geselecteerden\",\"edit_action\":\"Bewerken\",\"search\":\"Zoeken\",\"select\":\"Selecteer %{name} om te bewerken\",\"select_action\":\"Selecteer\",\"show_all\":\"Laat allen zien\"},\"new\":{\"basic_info\":\"Basisinfo\",\"cancel\":\"Annuleren\",\"chosen\":\"%{name} gekozen\",\"chose_all\":\"Kies allen\",\"clear_all\":\"Deselecteer allen\",\"many_chars\":\"tekens of minder.\",\"one_char\":\"teken.\",\"optional\":\"Optioneel\",\"required\":\"Vereist\",\"save\":\"Opslaan\",\"save_and_add_another\":\"Opslaan en een nieuwe toevoegen\",\"save_and_edit\":\"Opslaan en bewerken\",\"select_choice\":\"Selecteer uw keuzes en klik\"}},\"build\":{\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"job\":\"Taak\"},\"builds\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw Matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze tests zijn gedraaid op een machine gesponsord door\"},\"name\":\"Bouw\",\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} uur\",\"other\":\"%{count} uren\"},\"minutes_exact\":{\"one\":\"%{count} minuut\",\"other\":\"%{count} minuten\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} seconden\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Uw account is bevestigd. U wordt nu ingelogd.\",\"send_instructions\":\"Binnen enkele minuten zal u een email ontvangen met instructies om uw account te bevestigen.\"},\"failure\":{\"inactive\":\"Uw account is nog niet geactiveerd.\",\"invalid\":\"Ongeldig email adres of wachtwoord.\",\"invalid_token\":\"Ongeldig authenticatie token.\",\"locked\":\"Uw account is vergrendeld.\",\"timeout\":\"Uw sessie is verlopen, gelieve opnieuw in te loggen om verder te gaan.\",\"unauthenticated\":\"U moet inloggen of u registeren voordat u verder gaat.\",\"unconfirmed\":\"U moet uw account bevestigen voordat u verder gaat.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bevestigings-instructies\"},\"reset_password_instructions\":{\"subject\":\"Wachtwoord herstel instructies\"},\"unlock_instructions\":{\"subject\":\"Ontgrendel-instructies\"}},\"passwords\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw wachtwoord opnieuw in te stellen.\",\"updated\":\"Uw wachtwoord is veranderd. U wordt nu ingelogd.\"},\"registrations\":{\"destroyed\":\"Dag! Uw account is geannuleerd. We hopen u vlug terug te zien.\",\"signed_up\":\"Uw registratie is voltooid. Als het ingeschakeld is wordt een bevestiging naar uw email adres verzonden.\",\"updated\":\"Het bijwerken van uw account is gelukt.\"},\"sessions\":{\"signed_in\":\"Inloggen gelukt.\",\"signed_out\":\"Uitloggen gelukt.\"},\"unlocks\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw account te ontgrendelen.\",\"unlocked\":\"Uw account is ontgrendeld. U wordt nu ingelogd.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"was al bevestigd\",\"not_found\":\"niet gevonden\",\"not_locked\":\"was niet vergrendeld\"}},\"jobs\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze testen zijn uitgevoerd op een machine gesponsord door\"},\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"layouts\":{\"about\":{\"alpha\":\"Dit is in alfa-stadium.\",\"join\":\"Doe met ons mee en help!\",\"mailing_list\":\"Mailing lijst\",\"messages\":{\"alpha\":\"Gelieve deze service <strong>niet</strong> te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info <a href='https://github.com/travis-ci'>hier.</a>\"},\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Maak een fork op Github\",\"my_repositories\":\"Mijn repositories\",\"recent\":\"Recent\",\"search\":\"Zoeken\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Bekijk al onze geweldige sponsors &rarr;\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Bouw\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid op\",\"job\":\"Taak\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"log\":\"Logboek\"},\"top\":{\"admin\":\"Administratie\",\"blog\":\"Blog\",\"docs\":\"Documentatie\",\"github_login\":\"Inloggen met Github\",\"home\":\"Home\",\"profile\":\"Profiel\",\"sign_out\":\"Uitloggen\",\"stats\":\"Statistieken\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Er zijn geen taken\",\"profiles\":{\"show\":{\"email\":\"Email adres\",\"github\":\"Github\",\"message\":{\"config\":\"hoe eigen bouw-opties in te stellen\",\"your_repos\":\"Zet de schakelaars hieronder aan om de Travis hook voor uw projecten te activeren en push daarna naar Github<br />\\nOm te testen tegen meerdere rubies, zie\"},\"messages\":{\"notice\":\"Om te beginnen kunt u onze <a href=\\\\\\\"http://about.travis-ci.org/docs/user/getting-started/\\\\\\\">startersgids</a> lezen.\\\\n  <small>Het zal maar enkele minuten van uw tijd vergen.</small>\"},\"update\":\"Bijwerken\",\"update_locale\":\"Bijwerken\",\"your_locale\":\"Uw taal\",\"your_repos\":\"Uw repositories\",\"token\":\"Token\"}},\"queue\":\"Wachtrij\",\"repositories\":{\"branch\":\"Tak\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"image_url\":\"Afbeeldings URL\",\"message\":\"Bericht\",\"started_at\":\"Gestart\",\"tabs\":{\"branches\":\"Tak samenvatting\",\"build\":\"Bouw\",\"build_history\":\"Bouw geschiedenis\",\"current\":\"Huidig\",\"job\":\"Taak\"},\"commit\":\"Commit\",\"markdown\":\"Markdown\",\"rdoc\":\"RDOC\",\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duur\"},\"statistics\":{\"index\":{\"build_count\":\"Bouw aantal\",\"count\":\"Aantal\",\"last_month\":\"voorbije maand\",\"repo_growth\":\"Repository groei\",\"total_builds\":\"Bouw totaal\",\"total_projects\":\"Projecten/Repository totaal\"}},\"workers\":\"Machines\",\"home\":{\"name\":\"Hoofdpagina\"}},\"pl\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} godzina\",\"other\":\"%{count} godziny\"},\"minutes_exact\":{\"one\":\"%{count} minuta\",\"other\":\"%{count} minuty\"},\"seconds_exact\":{\"one\":\"%{count} sekunda\",\"other\":\"%{count} sekundy\"}}},\"workers\":\"Workers\",\"queue\":\"Kolejka\",\"no_job\":\"Brak zadań\",\"repositories\":{\"branch\":\"Gałąź\",\"image_url\":\"URL obrazka\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"tabs\":{\"current\":\"Aktualny\",\"build_history\":\"Historia Buildów\",\"branches\":\"Wszystkie Gałęzie\",\"build\":\"Build\",\"job\":\"Zadanie\"}},\"build\":{\"job\":\"Zadanie\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Committer\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Komitujący\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"layouts\":{\"top\":{\"home\":\"Start\",\"blog\":\"Blog\",\"docs\":\"Dokumentacja\",\"stats\":\"Statystki\",\"github_login\":\"Zaloguj się przy pomocy Githuba\",\"profile\":\"Profil\",\"sign_out\":\"Wyloguj się\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Ostatnie\",\"search\":\"Wyniki\",\"sponsers\":\"Sponsorzy\",\"sponsors_link\":\"Zobacz naszych wszystkich wspaniałych sponsorów &rarr;\",\"my_repositories\":\"Moje repozytoria\"},\"about\":{\"alpha\":\"To wciąż jest wersja alpha.\",\"messages\":{\"alpha\":\"Proszę <strong>nie</strong> traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz <a href='https://github.com/travis-ci'>tutaj.</a>\"},\"join\":\"Pomóż i dołącz do nas!\",\"mailing_list\":\"Lista mailingowa\",\"repository\":\"Repozytorium\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Macierz Buildów\",\"commit\":\"Commit\",\"committer\":\"Komitujący\",\"compare\":\"Porównianie\",\"config\":\"Konfiguracja\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"job\":\"Zadanie\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.<br />\\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz\",\"config\":\"jak skonfigurować niestandardowe opcje builda\"},\"messages\":{\"notice\":\"Aby zacząć, przeczytaj nasz <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Przewodnik </a>.\\n  <small>Zajmie ci to tylko kilka minut.</small>\"},\"token\":\"Token\",\"your_repos\":\"Twoje repozytoria\"}},\"statistics\":{\"index\":{\"count\":\"Ilość\",\"repo_growth\":\"Przyrost repozytoriów\",\"total_projects\":\"Łącznie projektów/repozytoriów\",\"build_count\":\"Liczba buildów\",\"last_month\":\"ostatni miesiąc\",\"total_builds\":\"Łącznie Buildów\"}},\"date\":{\"abbr_day_names\":[\"nie\",\"pon\",\"wto\",\"śro\",\"czw\",\"pią\",\"sob\"],\"abbr_month_names\":[\"sty\",\"lut\",\"mar\",\"kwi\",\"maj\",\"cze\",\"lip\",\"sie\",\"wrz\",\"paź\",\"lis\",\"gru\"],\"day_names\":[\"niedziela\",\"poniedziałek\",\"wtorek\",\"środa\",\"czwartek\",\"piątek\",\"sobota\"],\"formats\":{\"default\":\"%d-%m-%Y\",\"long\":\"%B %d, %Y\",\"short\":\"%d %b\"},\"month_names\":[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\"sierpień\",\"wrzesień\",\"październik\",\"listopad\",\"grudzień\"],\"order\":[\"day\",\"month\",\"year\"]},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"musi zostać zaakceptowane\",\"blank\":\"nie może być puste\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"pt-BR\":{\"admin\":{\"actions\":{\"create\":\"criar\",\"created\":\"criado\",\"delete\":\"deletar\",\"deleted\":\"deletado\",\"update\":\"atualizar\",\"updated\":\"atualizado\"},\"credentials\":{\"log_out\":\"Deslogar\"},\"dashboard\":{\"add_new\":\"Adicionar novo\",\"ago\":\"atrás\",\"last_used\":\"Última utilização\",\"model_name\":\"Nome do modelo\",\"modify\":\"Modificar\",\"name\":\"Dashboard\",\"pagename\":\"Administração do site\",\"records\":\"Registros\",\"show\":\"Mostrar\"},\"delete\":{\"confirmation\":\"Sim, tenho certeza\",\"flash_confirmation\":\"%{name} foi destruído com sucesso\"},\"flash\":{\"error\":\"%{name} falhou ao %{action}\",\"noaction\":\"Nenhuma ação foi tomada\",\"successful\":\"%{name} foi %{action} com sucesso\"},\"history\":{\"name\":\"Histórico\",\"no_activity\":\"Nenhuma Atividade\",\"page_name\":\"Histórico para %{name}\"},\"list\":{\"add_new\":\"Adicionar novo\",\"delete_action\":\"Deletar\",\"delete_selected\":\"Deletar selecionados\",\"edit_action\":\"Editar\",\"search\":\"Buscar\",\"select\":\"Selecionar %{name} para editar\",\"select_action\":\"Selecionar\",\"show_all\":\"Mostrar todos\"},\"new\":{\"basic_info\":\"Informações básicas\",\"cancel\":\"Cancelar\",\"chosen\":\"Escolhido %{name}\",\"chose_all\":\"Escolher todos\",\"clear_all\":\"Limpar todos\",\"many_chars\":\"caracteres ou menos.\",\"one_char\":\"caractere.\",\"optional\":\"Opcional\",\"required\":\"Requerido\",\"save\":\"Salvar\",\"save_and_add_another\":\"Salvar e adicionar outro\",\"save_and_edit\":\"Salvar e alterar\",\"select_choice\":\"Selecione e clique\"}},\"build\":{\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\"},\"builds\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"name\":\"Build\",\"started_at\":\"Iniciou em\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Sua conta foi confirmada com sucesso. Você agora está logado.\",\"send_instructions\":\"Você receberá um email com instruções de como confirmar sua conta em alguns minutos.\"},\"failure\":{\"inactive\":\"Sua conta ainda não foi ativada.\",\"invalid\":\"Email ou senha inválidos.\",\"invalid_token\":\"Token de autenticação inválido.\",\"locked\":\"Sua conta está trancada.\",\"timeout\":\"Sua sessão expirou, por favor faça seu login novamente.\",\"unauthenticated\":\"Você precisa fazer o login ou cadastrar-se antes de continuar.\",\"unconfirmed\":\"Você precisa confirmar sua conta antes de continuar.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instruções de confirmação\"},\"reset_password_instructions\":{\"subject\":\"Instruções de atualização de senha\"},\"unlock_instructions\":{\"subject\":\"Instruções de destrancamento\"}},\"passwords\":{\"send_instructions\":\"Você receberá um email com instruções de como atualizar sua senha em alguns minutos.\",\"updated\":\"Sua senha foi alterada com sucesso. Você agora está logado.\"},\"registrations\":{\"destroyed\":\"Tchau! Sua conta foi cancelada com sucesso. Esperamos vê-lo novamente em breve!\",\"signed_up\":\"Você se cadastrou com sucesso. Se ativada, uma confirmação foi enviada para seu email.\",\"updated\":\"Você atualizou sua conta com sucesso.\"},\"sessions\":{\"signed_in\":\"Logado com sucesso.\",\"signed_out\":\"Deslogado com sucesso.\"},\"unlocks\":{\"send_instructions\":\"Você receberá um email com instruções de como destrancar sua conta em alguns minutos.\",\"unlocked\":\"Sua conta foi destrancada com sucesso. Você agora está logado.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"já foi confirmado\",\"not_found\":\"não encontrado\",\"not_locked\":\"não estava trancado\"}},\"home\":{\"name\":\"home\"},\"jobs\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"started_at\":\"Iniciou em\"},\"layouts\":{\"about\":{\"alpha\":\"Isto é um alpha.\",\"join\":\"Junte-se à nós e ajude!\",\"mailing_list\":\"Lista de email\",\"messages\":{\"alpha\":\"Por favor, <strong>não</strong> considere isto um serviço estável. Estamos muito longe disso! Mais informações <a href='https://github.com/travis-ci'>aqui.</a>\"},\"repository\":\"Repositório\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Faça fork no Github\",\"my_repositories\":\"Meus Repositórios\",\"recent\":\"Recentes\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Conheça todos os nossos patrocinadores &rarr;\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\",\"log\":\"Log\"},\"top\":{\"admin\":\"Admin\",\"blog\":\"Blog\",\"docs\":\"Documentação\",\"github_login\":\"Logue com o Github\",\"home\":\"Home\",\"profile\":\"Perfil\",\"sign_out\":\"Sair\",\"stats\":\"Estatísticas\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Não há trabalhos\",\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"config\":\"como configurar opções de build\",\"your_repos\":\"Use os botões abaixo para ligar ou desligar o hook de serviço do Travis para seus projetos, e então, faça um push para o Github.<br />Para testar com múltiplas versões do Ruby, leia\"},\"messages\":{\"notice\":\"Para começar, leia nosso <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Guia de início</a>. <small>Só leva alguns minutinhos.</small>\"},\"token\":\"Token\",\"update\":\"Atualizar\",\"update_locale\":\"Atualizar\",\"your_locale\":\"Sua língua\",\"your_repos\":\"Seus Repositórios\"}},\"queue\":\"Fila\",\"repositories\":{\"branch\":\"Branch\",\"commit\":\"Commit\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"image_url\":\"URL da imagem\",\"markdown\":\"Markdown\",\"message\":\"Mensagem\",\"rdoc\":\"RDOC\",\"started_at\":\"Iniciou em\",\"tabs\":{\"branches\":\"Sumário do Branch\",\"build\":\"Build\",\"build_history\":\"Histórico de Build\",\"current\":\"Atual\",\"job\":\"Trabalho\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duração\"},\"statistics\":{\"index\":{\"build_count\":\"Número de Builds\",\"count\":\"Número\",\"last_month\":\"último mês\",\"repo_growth\":\"Crescimento de Repositório\",\"total_builds\":\"Total de Builds\",\"total_projects\":\"Total de Projetos/Repositórios\"}},\"workers\":\"Processos\"},\"ru\":{\"admin\":{\"actions\":{\"create\":\"создать\",\"created\":\"создано\",\"delete\":\"удалить\",\"deleted\":\"удалено\",\"update\":\"обновить\",\"updated\":\"обновлено\"},\"credentials\":{\"log_out\":\"Выход\"},\"dashboard\":{\"add_new\":\"Добавить\",\"ago\":\"назад\",\"last_used\":\"Использовалось в последний раз\",\"model_name\":\"Имя модели\",\"modify\":\"Изменить\",\"name\":\"Панель управления\",\"pagename\":\"Управление сайтом\",\"records\":\"Записи\",\"show\":\"Показать\"},\"delete\":{\"confirmation\":\"Да, я уверен\",\"flash_confirmation\":\"%{name} успешно удалено\"},\"history\":{\"name\":\"История\",\"no_activity\":\"Нет активности\",\"page_name\":\"История %{name}\"},\"list\":{\"add_new\":\"Добавить\",\"delete_action\":\"Удалить\",\"delete_selected\":\"Удалить выбранные\",\"edit_action\":\"Редактировать\",\"search\":\"Поиск\",\"select\":\"Для редактирования выберите %{name}\",\"select_action\":\"Выбрать\",\"show_all\":\"Показать все\"},\"new\":{\"basic_info\":\"Основная информация\",\"cancel\":\"Отмена\",\"chosen\":\"Выбрано %{name}\",\"chose_all\":\"Выбрать все\",\"clear_all\":\"Очистить все\",\"one_char\":\"символ.\",\"optional\":\"Необязательно\",\"required\":\"Обязательно\",\"save\":\"Сохранить\",\"save_and_add_another\":\"Сохранить и добавить другое\",\"save_and_edit\":\"Сохранить и продолжить редактирование\",\"select_choice\":\"Выберите и кликните\",\"many_chars\":\"символов или меньше.\"},\"flash\":{\"error\":\"%{name} не удалось %{action}\",\"noaction\":\"Никаких действий не произведено\",\"successful\":\"%{name} было успешно %{action}\"}},\"build\":{\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\"},\"builds\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Дифф\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине, спонсируемой\"},\"name\":\"Билд\",\"started_at\":\"Начало\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} час\",\"few\":\"%{count} часа\",\"many\":\"%{count} часов\",\"other\":\"%{count} часа\"},\"minutes_exact\":{\"one\":\"%{count} минута\",\"few\":\"%{count} минуты\",\"many\":\"%{count} минут\",\"other\":\"%{count} минуты\"},\"seconds_exact\":{\"one\":\"%{count} секунда\",\"few\":\"%{count} секунды\",\"many\":\"%{count} секунд\",\"other\":\"%{count} секунды\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Ваш аккаунт успешно подтвержден. Приветствуем!\",\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для прохождения процедуры подтверждения аккаунта.\"},\"failure\":{\"inactive\":\"Ваш аккаунт еще не активирован.\",\"invalid\":\"Ошибка в адресе почты или пароле.\",\"invalid_token\":\"Неправильный токен аутентификации.\",\"locked\":\"Ваш аккаунт заблокирован.\",\"timeout\":\"Сессия окончена. Для продолжения работы войдите снова.\",\"unauthenticated\":\"Вам нужно войти или зарегистрироваться.\",\"unconfirmed\":\"Вы должны сначала подтвердить свой аккаунт.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Инструкции для подтверждению аккаунта\"},\"reset_password_instructions\":{\"subject\":\"Инструкции для сброса пароля\"},\"unlock_instructions\":{\"subject\":\"Инструкции для разблокирования аккаунта\"}},\"passwords\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для сброса пароля.\",\"updated\":\"Ваш пароль успешно изменен. Приветствуем!\"},\"registrations\":{\"destroyed\":\"Ваш аккаунт был успешно удален. Живите долго и процветайте!\",\"signed_up\":\"Вы успешно прошли регистрацию. Инструкции для подтверждения аккаунта отправлены на ваш электронный адрес.\",\"updated\":\"Аккаунт успешно обновлен.\"},\"sessions\":{\"signed_in\":\"Приветствуем!\",\"signed_out\":\"Удачи!\"},\"unlocks\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциям для разблокировния аккаунта.\",\"unlocked\":\"Ваш аккаунт успешно разблокирован. Приветствуем!\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"уже подтвержден\",\"not_found\":\"не найден\",\"not_locked\":\"не заблокирован\"}},\"home\":{\"name\":\"Главная\"},\"jobs\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине спонсируемой\"},\"started_at\":\"Начало\"},\"layouts\":{\"about\":{\"alpha\":\"Это альфа-версия\",\"join\":\"Присоединяйтесь к нам и помогайте!\",\"mailing_list\":\"Лист рассылки\",\"messages\":{\"alpha\":\"Пожалуйста, <strong>не</strong> считайте данный сервис стабильным. Мы еще очень далеки от стабильности! <a href='https://github.com/travis-ci'>Подробности</a>\"},\"repository\":\"Репозиторий\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"my_repositories\":\"Мои репозитории\",\"recent\":\"Недавние\",\"search\":\"Поиск\",\"sponsers\":\"Спонсоры\",\"sponsors_link\":\"Список всех наших замечательных спонсоров &rarr;\"},\"mobile\":{\"author\":\"Автор\",\"build\":\"Сборка\",\"build_matrix\":\"Матрица сборок\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\",\"log\":\"Журнал\"},\"top\":{\"admin\":\"Управление\",\"blog\":\"Блог\",\"docs\":\"Документация\",\"github_login\":\"Войти через Github\",\"home\":\"Главная\",\"profile\":\"Профиль\",\"sign_out\":\"Выход\",\"stats\":\"Статистика\"}},\"no_job\":\"Очередь пуста\",\"profiles\":{\"show\":{\"email\":\"Электронная почта\",\"github\":\"Github\",\"message\":{\"config\":\"как настроить специальные опции билда\",\"your_repos\":\"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.<br />\\nДля тестирования на нескольких версиях Ruby смотрите\"},\"messages\":{\"notice\":\"Перед началом, пожалуйста, прочтите <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Руководство для быстрого старта</a>. <small>Это займет всего несколько минут.</small>\"},\"token\":\"Токен\",\"update\":\"Обновить\",\"update_locale\":\"Обновить\",\"your_locale\":\"Ваш язык\",\"your_repos\":\"Ваши репозитории\"}},\"queue\":\"Очередь\",\"repositories\":{\"branch\":\"Ветка\",\"commit\":\"Коммит\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"image_url\":\"URL изображения\",\"markdown\":\"Markdown\",\"message\":\"Комментарий\",\"rdoc\":\"RDOC\",\"started_at\":\"Начало\",\"tabs\":{\"branches\":\"Статус веток\",\"build\":\"Билд\",\"build_history\":\"История\",\"current\":\"Текущий\",\"job\":\"Задача\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Длительность\"},\"statistics\":{\"index\":{\"build_count\":\"Количество билдов\",\"count\":\"Количество\",\"last_month\":\"прошлый месяц\",\"repo_growth\":\"Рост числа репозиториев\",\"total_builds\":\"Всего билдов\",\"total_projects\":\"Всего проектов/репозиториев\"}},\"workers\":\"Машины\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}}};\n\n\n})();\n//@ sourceURL=config/locales");minispade.register('ext/ember/bound_helper', "(function() {// https://gist.github.com/2018185\n// For reference: https://github.com/wagenet/ember.js/blob/ac66dcb8a1cbe91d736074441f853e0da474ee6e/packages/ember-handlebars/lib/views/bound_property_view.js\nvar BoundHelperView = Ember.View.extend(Ember._Metamorph, {\n\n  context: null,\n  options: null,\n  property: null,\n  // paths of the property that are also observed\n  propertyPaths: [],\n\n  value: Ember.K,\n\n  valueForRender: function() {\n    var value = this.value(Ember.get(this.context, this.property), this.options);\n    if (this.options.escaped) { value = Handlebars.Utils.escapeExpression(value); }\n    return value;\n  },\n\n  render: function(buffer) {\n    buffer.push(this.valueForRender());\n  },\n\n  valueDidChange: function() {\n    if (this.morph.isRemoved()) { return; }\n    this.morph.html(this.valueForRender());\n  },\n\n  didInsertElement: function() {\n    this.valueDidChange();\n  },\n\n  init: function() {\n    this._super();\n    Ember.addObserver(this.context, this.property, this, 'valueDidChange');\n    this.get('propertyPaths').forEach(function(propName) {\n        Ember.addObserver(this.context, this.property + '.' + propName, this, 'valueDidChange');\n    }, this);\n  },\n\n  destroy: function() {\n    Ember.removeObserver(this.context, this.property, this, 'valueDidChange');\n    this.get('propertyPaths').forEach(function(propName) {\n        this.context.removeObserver(this.property + '.' + propName, this, 'valueDidChange');\n    }, this);\n    this._super();\n  }\n\n});\n\nEmber.registerBoundHelper = function(name, func) {\n  var propertyPaths = Array.prototype.slice.call(arguments, 2);\n  Ember.Handlebars.registerHelper(name, function(property, options) {\n    var data = options.data,\n        view = data.view,\n        ctx  = this;\n\n    var bindView = view.createChildView(BoundHelperView, {\n      property: property,\n      propertyPaths: propertyPaths,\n      context: ctx,\n      options: options.hash,\n      value: func\n    });\n\n    view.appendChild(bindView);\n  });\n};\n\n\n})();\n//@ sourceURL=ext/ember/bound_helper");minispade.register('ext/ember/namespace', "(function() {Em.Namespace.reopen = Em.Namespace.reopenClass\n\n\n\n})();\n//@ sourceURL=ext/ember/namespace");
\ No newline at end of file
+;minispade.register('app', "(function() {(function() {\nminispade.require('auth');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('pusher');\nminispade.require('routes');\nminispade.require('slider');\nminispade.require('store');\nminispade.require('tailing');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n  Travis.reopen({\n    App: Em.Application.extend({\n      autoinit: false,\n      currentUserBinding: 'auth.user',\n      authStateBinding: 'auth.state',\n      init: function() {\n        this._super.apply(this, arguments);\n        this.store = Travis.Store.create();\n        this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n        this.set('auth', Travis.Auth.create({\n          store: this.store,\n          endpoint: Travis.config.api_endpoint\n        }));\n        this.slider = new Travis.Slider();\n        this.pusher = new Travis.Pusher(Travis.config.pusher);\n        return this.tailing = new Travis.Tailing();\n      },\n      signIn: function() {\n        return this.get('auth').signIn();\n      },\n      signOut: function() {\n        this.get('auth').signOut();\n        return this.get('router').send('goToRoot');\n      },\n      receive: function() {\n        return this.store.receive.apply(this.store, arguments);\n      },\n      toggleSidebar: function() {\n        var element;\n        $('body').toggleClass('maximized');\n        element = $('<span></span>');\n        $('#top .profile').append(element);\n        Em.run.later((function() {\n          return element.remove();\n        }), 10);\n        element = $('<span></span>');\n        $('#repository').append(element);\n        return Em.run.later((function() {\n          return element.remove();\n        }), 10);\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('auth', "(function() {(function() {\n\n  this.Travis.Auth = Ember.Object.extend({\n    iframe: $('<iframe id=\"auth-frame\" />').hide(),\n    timeout: 5000,\n    state: 'signed-out',\n    receivingEnd: \"\" + location.protocol + \"//\" + location.host,\n    init: function() {\n      var _this = this;\n      this.iframe.appendTo('body');\n      window.addEventListener('message', function(e) {\n        return _this.receiveMessage(e);\n      });\n      return this.loadUser();\n    },\n    accessToken: (function() {\n      return sessionStorage.getItem('travis.token');\n    }).property(),\n    loadUser: function() {\n      var user;\n      if (user = typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.getItem('travis.user') : void 0) {\n        return this.setData({\n          user: JSON.parse(user)\n        });\n      } else if (typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.getItem('travis.auto_signin') : void 0) {\n        return this.trySignIn();\n      }\n    },\n    signIn: function() {\n      this.set('state', 'signing-in');\n      this.trySignIn();\n      return Ember.run.later(this, this.checkSignIn.bind(this), this.timeout);\n    },\n    trySignIn: function() {\n      return this.iframe.attr('src', \"\" + this.endpoint + \"/auth/post_message?origin=\" + this.receivingEnd);\n    },\n    checkSignIn: function() {\n      if (this.get('state') === 'signing-in') {\n        return this.forceSignIn();\n      }\n    },\n    forceSignIn: function() {\n      if (typeof localStorage !== \"undefined\" && localStorage !== null) {\n        localStorage.setItem('travis.auto_signin', 'true');\n      }\n      return window.location = \"\" + this.endpoint + \"/auth/handshake?redirect_uri=\" + location;\n    },\n    signOut: function() {\n      if (typeof localStorage !== \"undefined\" && localStorage !== null) {\n        localStorage.clear();\n      }\n      if (typeof sessionStorage !== \"undefined\" && sessionStorage !== null) {\n        sessionStorage.clear();\n      }\n      return this.setData();\n    },\n    setData: function(data) {\n      var user;\n      if (typeof data === 'string') {\n        data = JSON.parse(data);\n      }\n      if (data != null ? data.token : void 0) {\n        this.storeToken(data.token);\n      }\n      if (data != null ? data.user : void 0) {\n        user = this.storeUser(data.user);\n      }\n      this.set('state', user ? 'signed-in' : 'signed-out');\n      return this.set('user', user ? user : void 0);\n    },\n    storeToken: function(token) {\n      if (typeof sessionStorage !== \"undefined\" && sessionStorage !== null) {\n        sessionStorage.setItem('travis.token', token);\n      }\n      return this.notifyPropertyChange('accessToken');\n    },\n    storeUser: function(user) {\n      if (typeof localStorage !== \"undefined\" && localStorage !== null) {\n        localStorage.setItem('travis.auto_signin', 'true');\n      }\n      if (typeof sessionStorage !== \"undefined\" && sessionStorage !== null) {\n        sessionStorage.setItem('travis.user', JSON.stringify(user));\n      }\n      this.store.load(Travis.User, user);\n      return this.store.find(Travis.User, user.id);\n    },\n    receiveMessage: function(event) {\n      if (event.origin === this.expectedOrigin()) {\n        this.setData(event.data);\n        return console.log(\"signed in as \" + event.data.user.login);\n      } else {\n        return console.log(\"unexpected message \" + event.origin + \": \" + event.data);\n      }\n    },\n    expectedOrigin: function() {\n      if (this.endpoint[0] === '/') {\n        return this.receivingEnd;\n      } else {\n        return this.endpoint;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=auth");minispade.register('controllers', "(function() {(function() {\nminispade.require('helpers');\nminispade.require('travis/ticker');\n\n  Travis.reopen({\n    Controller: Em.Controller.extend({\n      connectOutlet: function() {\n        var view, _connectedOutletViews;\n        view = this._super.apply(this, arguments);\n        if (view) {\n          _connectedOutletViews = Travis.app.get('_connectedOutletViews');\n          if (!_connectedOutletViews) {\n            _connectedOutletViews = [];\n          }\n          _connectedOutletViews.pushObject(view);\n          Travis.app.set('_connectedOutletViews', _connectedOutletViews);\n        }\n        return view;\n      }\n    }),\n    TopController: Em.Controller.extend({\n      userBinding: 'Travis.app.currentUser'\n    }),\n    ApplicationController: Em.Controller.extend(),\n    MainController: Em.Controller.extend(),\n    StatsLayoutController: Em.Controller.extend(),\n    ProfileLayoutController: Em.Controller.extend()\n  });\nminispade.require('controllers/accounts');\nminispade.require('controllers/builds');\nminispade.require('controllers/home');\nminispade.require('controllers/profile');\nminispade.require('controllers/repositories');\nminispade.require('controllers/repository');\nminispade.require('controllers/sidebar');\nminispade.require('controllers/stats');\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers");minispade.register('controllers/accounts', "(function() {(function() {\n\n  Travis.AccountsController = Ember.ArrayController.extend({\n    tab: 'accounts',\n    init: function() {\n      return this._super();\n    },\n    findByLogin: function(login) {\n      return this.find(function(account) {\n        return account.get('login') === 'login';\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/accounts");minispade.register('controllers/builds', "(function() {(function() {\n\n  Travis.BuildsController = Em.ArrayController.extend({\n    repositoryBinding: 'parent.repository',\n    contentBinding: 'parent.builds'\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/builds");minispade.register('controllers/home', "(function() {(function() {\n\n  Travis.HomeController = Travis.Controller.extend();\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/home");minispade.register('controllers/job', "(function() {(function() {\n\n\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/job");minispade.register('controllers/profile', "(function() {(function() {\n\n  Travis.ProfileController = Travis.Controller.extend({\n    name: 'profile',\n    userBinding: 'Travis.app.currentUser',\n    accountsBinding: 'Travis.app.router.accountsController',\n    account: (function() {\n      var login;\n      login = this.get('params.login') || Travis.app.get('currentUser.login');\n      return this.get('accounts').filter(function(account) {\n        if (account.get('login') === login) {\n          return account;\n        }\n      })[0];\n    }).property('accounts.length', 'params.login'),\n    activate: function(action, params) {\n      this.setParams(params || this.get('params'));\n      return this[\"view\" + ($.camelize(action))]();\n    },\n    viewHooks: function() {\n      this.connectTab('hooks');\n      return this.set('hooks', Travis.Hook.find({\n        owner_name: this.get('params.login') || Travis.app.get('currentUser.login')\n      }));\n    },\n    viewUser: function() {\n      return this.connectTab('user');\n    },\n    connectTab: function(tab) {\n      var viewClass;\n      viewClass = Travis[\"\" + ($.camelize(tab)) + \"View\"];\n      this.set('tab', tab);\n      return this.connectOutlet({\n        outletName: 'pane',\n        controller: this,\n        viewClass: viewClass\n      });\n    },\n    setParams: function(params) {\n      var key, value, _results;\n      this.set('params', {});\n      _results = [];\n      for (key in params) {\n        value = params[key];\n        _results.push(this.set(\"params.\" + key, params[key]));\n      }\n      return _results;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/profile");minispade.register('controllers/repositories', "(function() {(function() {\n\n  Travis.RepositoriesController = Ember.ArrayController.extend({\n    defaultTab: 'recent',\n    sortProperties: ['sortOrder'],\n    init: function() {\n      this.activate(this.defaultTab);\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    updateTimes: function() {\n      var content;\n      if (content = this.get('content')) {\n        content.forEach(function(r) {\n          return r.updateTimes();\n        });\n      }\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    activate: function(tab, params) {\n      this.set('tab', tab);\n      return this[\"view\" + ($.camelize(tab))](params);\n    },\n    viewRecent: function() {\n      return this.set('content', Travis.Repository.find());\n    },\n    viewOwned: function() {\n      return this.set('content', Travis.Repository.ownedBy(Travis.app.get('currentUser.login')));\n    },\n    viewSearch: function(params) {\n      return this.set('content', Travis.Repository.search(params.search));\n    },\n    searchObserver: (function() {\n      var search, tab;\n      search = this.get('search');\n      tab = search ? 'search' : 'recent';\n      return this.activate(tab, {\n        search: search\n      });\n    }).observes('search')\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repositories");minispade.register('controllers/repository', "(function() {(function() {\n\n  Travis.RepositoryController = Travis.Controller.extend({\n    bindings: [],\n    init: function() {\n      this._super.apply(this, arguments);\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    updateTimes: function() {\n      var build, builds;\n      if (builds = this.get('builds')) {\n        builds.forEach(function(b) {\n          return b.updateTimes();\n        });\n      }\n      if (build = this.get('build')) {\n        build.updateTimes();\n        build.get('jobs').forEach(function(j) {\n          return j.updateTimes();\n        });\n      }\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    activate: function(action) {\n      this._unbind();\n      return this[\"view\" + ($.camelize(action))]();\n    },\n    viewIndex: function() {\n      this._bind('repository', 'controllers.repositoriesController.firstObject');\n      this._bind('build', 'repository.lastBuild');\n      return this.connectTab('current');\n    },\n    viewCurrent: function() {\n      this.connectTab('current');\n      return this._bind('build', 'repository.lastBuild');\n    },\n    viewBuilds: function() {\n      this.connectTab('builds');\n      return this._bind('builds', 'repository.builds');\n    },\n    viewPullRequests: function() {\n      this.connectTab('pull_requests');\n      return this._bind('builds', 'repository.pullRequests');\n    },\n    viewBranches: function() {\n      this.connectTab('branches');\n      return this._bind('builds', 'repository.branches');\n    },\n    viewBuild: function() {\n      return this.connectTab('build');\n    },\n    viewJob: function() {\n      this._bind('build', 'job.build');\n      return this.connectTab('job');\n    },\n    repositoryObserver: (function() {\n      var repository;\n      repository = this.get('repository');\n      if (repository) {\n        return repository.select();\n      }\n    }).observes('repository.id'),\n    connectTab: function(tab) {\n      var name, viewClass;\n      name = tab === 'current' ? 'build' : tab;\n      viewClass = name === 'builds' || name === 'branches' || name === 'pull_requests' ? Travis.BuildsView : Travis[\"\" + ($.camelize(name)) + \"View\"];\n      this.set('tab', tab);\n      return this.connectOutlet({\n        outletName: 'pane',\n        controller: this,\n        viewClass: viewClass\n      });\n    },\n    _bind: function(to, from) {\n      return this.bindings.push(Ember.oneWay(this, to, from));\n    },\n    _unbind: function() {\n      var binding, _i, _len, _ref;\n      _ref = this.bindings;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        binding = _ref[_i];\n        binding.disconnect(this);\n      }\n      return this.bindings.length = 0;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repository");minispade.register('controllers/sidebar', "(function() {(function() {\n\n  Travis.reopen({\n    SidebarController: Em.ArrayController.extend({\n      init: function() {\n        this.tickables = [];\n        return Travis.Ticker.create({\n          target: this,\n          interval: Travis.INTERVALS.sponsors\n        });\n      },\n      tick: function() {\n        var tickable, _i, _len, _ref, _results;\n        _ref = this.tickables;\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          tickable = _ref[_i];\n          _results.push(tickable.tick());\n        }\n        return _results;\n      }\n    }),\n    QueuesController: Em.ArrayController.extend(),\n    WorkersController: Em.ArrayController.extend({\n      groups: (function() {\n        var content, groups, host, worker, _i, _len, _ref;\n        if (content = this.get('content')) {\n          groups = {};\n          _ref = content.toArray();\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            worker = _ref[_i];\n            host = worker.get('host');\n            if (!groups[host]) {\n              groups[host] = Em.ArrayProxy.create({\n                content: []\n              });\n            }\n            groups[host].pushObject(worker);\n          }\n          return $.values(groups);\n        }\n      }).property('content.length')\n    }),\n    SponsorsController: Em.ArrayController.extend({\n      page: 0,\n      arrangedContent: (function() {\n        return this.get('shuffled').slice(this.start(), this.end());\n      }).property('shuffled.length', 'page'),\n      shuffled: (function() {\n        var content;\n        if (content = this.get('content')) {\n          return $.shuffle(content);\n        } else {\n          return [];\n        }\n      }).property('content.length'),\n      tick: function() {\n        return this.set('page', this.isLast() ? 0 : this.get('page') + 1);\n      },\n      pages: (function() {\n        var length;\n        length = this.get('content.length');\n        if (length) {\n          return parseInt(length / this.get('perPage') + 1);\n        } else {\n          return 1;\n        }\n      }).property('length'),\n      isLast: function() {\n        return this.get('page') === this.get('pages') - 1;\n      },\n      start: function() {\n        return this.get('page') * this.get('perPage');\n      },\n      end: function() {\n        return this.start() + this.get('perPage');\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/sidebar");minispade.register('controllers/stats', "(function() {(function() {\n\n  Travis.StatsController = Travis.Controller.extend({\n    name: 'stats',\n    init: function() {\n      return this._super('top');\n    },\n    activate: function(action, params) {}\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/stats");minispade.register('helpers', "(function() {(function() {\nminispade.require('helpers/handlebars');\nminispade.require('helpers/helpers');\nminispade.require('helpers/urls');\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers");minispade.register('helpers/handlebars', "(function() {(function() {\n  var safe;\nminispade.require('ext/ember/bound_helper');\n\n  safe = function(string) {\n    return new Handlebars.SafeString(string);\n  };\n\n  Handlebars.registerHelper('tipsy', function(text, tip) {\n    return safe('<span class=\"tool-tip\" original-title=\"' + tip + '\">' + text + '</span>');\n  });\n\n  Handlebars.registerHelper('t', function(key) {\n    return safe(I18n.t(key));\n  });\n\n  Ember.registerBoundHelper('formatTime', function(value, options) {\n    return safe(Travis.Helpers.timeAgoInWords(value) || '-');\n  });\n\n  Ember.registerBoundHelper('formatDuration', function(duration, options) {\n    return safe(Travis.Helpers.timeInWords(duration));\n  });\n\n  Ember.registerBoundHelper('formatCommit', function(commit, options) {\n    if (commit) {\n      return safe(Travis.Helpers.formatCommit(commit.get('sha'), commit.get('branch')));\n    }\n  });\n\n  Ember.registerBoundHelper('formatSha', function(sha, options) {\n    return safe(Travis.Helpers.formatSha(sha));\n  });\n\n  Ember.registerBoundHelper('pathFrom', function(url, options) {\n    return safe(Travis.Helpers.pathFrom(url));\n  });\n\n  Ember.registerBoundHelper('formatMessage', function(message, options) {\n    return safe(Travis.Helpers.formatMessage(message, options));\n  });\n\n  Ember.registerBoundHelper('formatConfig', function(config, options) {\n    return safe(Travis.Helpers.formatConfig(config));\n  });\n\n  Ember.registerBoundHelper('formatLog', function(log, options) {\n    return Travis.Helpers.formatLog(log) || '';\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/handlebars");minispade.register('helpers/helpers', "(function() {(function() {\nminispade.require('travis/log');\nminispade.require('emoij');\n\n  this.Travis.Helpers = {\n    compact: function(object) {\n      var key, result, value, _ref;\n      result = {};\n      _ref = object || {};\n      for (key in _ref) {\n        value = _ref[key];\n        if (!$.isEmpty(value)) {\n          result[key] = value;\n        }\n      }\n      return result;\n    },\n    safe: function(string) {\n      return new Handlebars.SafeString(string);\n    },\n    colorForResult: function(result) {\n      if (result === 0) {\n        return 'green';\n      } else {\n        if (result === 1) {\n          return 'red';\n        } else {\n          return null;\n        }\n      }\n    },\n    formatCommit: function(sha, branch) {\n      return Travis.Helpers.formatSha(sha) + (branch ? \" (\" + branch + \")\" : '');\n    },\n    formatSha: function(sha) {\n      return (sha || '').substr(0, 7);\n    },\n    formatConfig: function(config) {\n      var values;\n      config = $.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'scala', 'jdk', 'python', 'perl');\n      values = $.map(config, function(value, key) {\n        value = (value && value.join ? value.join(', ') : value) || '';\n        return '%@: %@'.fmt($.camelize(key), value);\n      });\n      if (values.length === 0) {\n        return '-';\n      } else {\n        return values.join(', ');\n      }\n    },\n    formatMessage: function(message, options) {\n      message = message || '';\n      if (options.short) {\n        message = message.split(/\\n/)[0];\n      }\n      return this._emojize(this._escape(message)).replace(/\\n/g, '<br/>');\n    },\n    formatLog: function(log) {\n      return Travis.Log.filter(log);\n    },\n    pathFrom: function(url) {\n      return (url || '').split('/').pop();\n    },\n    timeAgoInWords: function(date) {\n      return $.timeago.distanceInWords(date);\n    },\n    durationFrom: function(started, finished) {\n      started = started && this._toUtc(new Date(this._normalizeDateString(started)));\n      finished = finished ? this._toUtc(new Date(this._normalizeDateString(finished))) : this._nowUtc();\n      if (started && finished) {\n        return Math.round((finished - started) / 1000);\n      } else {\n        return 0;\n      }\n    },\n    timeInWords: function(duration) {\n      var days, hours, minutes, result, seconds;\n      days = Math.floor(duration / 86400);\n      hours = Math.floor(duration % 86400 / 3600);\n      minutes = Math.floor(duration % 3600 / 60);\n      seconds = duration % 60;\n      if (days > 0) {\n        return 'more than 24 hrs';\n      } else {\n        result = [];\n        if (hours === 1) {\n          result.push(hours + ' hr');\n        }\n        if (hours > 1) {\n          result.push(hours + ' hrs');\n        }\n        if (minutes > 0) {\n          result.push(minutes + ' min');\n        }\n        if (seconds > 0) {\n          result.push(seconds + ' sec');\n        }\n        if (result.length > 0) {\n          return result.join(' ');\n        } else {\n          return '-';\n        }\n      }\n    },\n    _normalizeDateString: function(string) {\n      if (window.JHW) {\n        string = string.replace('T', ' ').replace(/-/g, '/');\n        string = string.replace('Z', '').replace(/\\..*$/, '');\n      }\n      return string;\n    },\n    _nowUtc: function() {\n      return this._toUtc(new Date());\n    },\n    _toUtc: function(date) {\n      return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n    },\n    _emojize: function(text) {\n      var emojis;\n      emojis = text.match(/:\\S+?:/g);\n      if (emojis !== null) {\n        $.each(emojis.uniq(), function(ix, emoji) {\n          var image, strippedEmoji;\n          strippedEmoji = emoji.substring(1, emoji.length - 1);\n          if (EmojiDictionary.indexOf(strippedEmoji) !== -1) {\n            image = '<img class=\\'emoji\\' title=\\'' + emoji + '\\' alt=\\'' + emoji + '\\' src=\\'' + '/images/emoji/' + strippedEmoji + '.png\\'/>';\n            return text = text.replace(new RegExp(emoji, 'g'), image);\n          }\n        });\n      }\n      return text;\n    },\n    _escape: function(text) {\n      return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/helpers");minispade.register('helpers/urls', "(function() {(function() {\n\n  this.Travis.Urls = {\n    repository: function(slug) {\n      return \"/\" + slug;\n    },\n    builds: function(slug) {\n      return \"/\" + slug + \"/builds\";\n    },\n    pullRequests: function(slug) {\n      return \"/\" + slug + \"/pull_requests\";\n    },\n    branches: function(slug) {\n      return \"/\" + slug + \"/branches\";\n    },\n    build: function(slug, id) {\n      return \"/\" + slug + \"/builds/\" + id;\n    },\n    job: function(slug, id) {\n      return \"/\" + slug + \"/jobs/\" + id;\n    },\n    githubCommit: function(slug, sha) {\n      return \"http://github.com/\" + slug + \"/commit/\" + sha;\n    },\n    githubRepository: function(slug) {\n      return \"http://github.com/\" + slug;\n    },\n    githubWatchers: function(slug) {\n      return \"http://github.com/\" + slug + \"/watchers\";\n    },\n    githubNetwork: function(slug) {\n      return \"http://github.com/\" + slug + \"/network\";\n    },\n    githubAdmin: function(slug) {\n      return \"http://github.com/\" + slug + \"/admin/hooks#travis_minibucket\";\n    },\n    statusImage: function(slug, branch) {\n      return (\"https://secure.travis-ci.org/\" + slug + \".png\") + (branch ? \"?branch=\" + branch : '');\n    },\n    email: function(email) {\n      return \"mailto:\" + email;\n    },\n    account: function(login) {\n      return \"/profile/\" + login;\n    },\n    user: function(login) {\n      return \"/profile/\" + login + \"/me\";\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/urls");minispade.register('models', "(function() {(function() {\nminispade.require('models/extensions');\nminispade.require('models/account');\nminispade.require('models/artifact');\nminispade.require('models/branch');\nminispade.require('models/build');\nminispade.require('models/commit');\nminispade.require('models/hook');\nminispade.require('models/job');\nminispade.require('models/repository');\nminispade.require('models/sponsor');\nminispade.require('models/user');\nminispade.require('models/worker');\n\n}).call(this);\n\n})();\n//@ sourceURL=models");minispade.register('models/account', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Account = Travis.Model.extend({\n    primaryKey: 'login',\n    login: DS.attr('string'),\n    name: DS.attr('string'),\n    type: DS.attr('string'),\n    reposCount: DS.attr('number'),\n    urlGithub: (function() {\n      return \"http://github.com/\" + (this.get('login'));\n    }).property()\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/account");minispade.register('models/artifact', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Artifact = Travis.Model.extend({\n    body: DS.attr('string'),\n    init: function() {\n      this._super.apply(this, arguments);\n      return this.set('queue', Ember.A([]));\n    },\n    append: function(body) {\n      if (this.get('isLoaded')) {\n        return this.set('body', this.get('body') + body);\n      } else {\n        return this.get('queue').pushObject(body);\n      }\n    },\n    recordDidLoad: (function() {\n      var queue;\n      if (this.get('isLoaded')) {\n        queue = this.get('queue');\n        if (queue.get('length') > 0) {\n          return this.append(queue.toArray().join(''));\n        }\n      }\n    }).observes('isLoaded')\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/artifact");minispade.register('models/branch', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Branch = Travis.Model.extend(Travis.Helpers, {\n    repositoryId: DS.attr('number'),\n    commitId: DS.attr('number'),\n    number: DS.attr('number'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    result: DS.attr('number'),\n    duration: DS.attr('number'),\n    startedAt: DS.attr('string'),\n    finishedAt: DS.attr('string'),\n    commit: DS.belongsTo('Travis.Commit'),\n    repository: (function() {\n      if (this.get('repositoryId')) {\n        return Travis.Repository.find(this.get('repositoryId'));\n      }\n    }).property('repositoryId'),\n    updateTimes: function() {\n      this.notifyPropertyChange('started_at');\n      return this.notifyPropertyChange('finished_at');\n    }\n  });\n\n  this.Travis.Branch.reopenClass({\n    byRepositoryId: function(id) {\n      return this.find({\n        repository_id: id\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/branch");minispade.register('models/build', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Build = Travis.Model.extend(Travis.DurationCalculations, {\n    eventType: DS.attr('string'),\n    repositoryId: DS.attr('number'),\n    commitId: DS.attr('number'),\n    state: DS.attr('string'),\n    number: DS.attr('number'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    result: DS.attr('number'),\n    _duration: DS.attr('number', {\n      key: 'duration'\n    }),\n    startedAt: DS.attr('string', {\n      key: 'started_at'\n    }),\n    finishedAt: DS.attr('string', {\n      key: 'finished_at'\n    }),\n    repository: DS.belongsTo('Travis.Repository'),\n    commit: DS.belongsTo('Travis.Commit'),\n    jobs: DS.hasMany('Travis.Job', {\n      key: 'job_ids'\n    }),\n    config: (function() {\n      return Travis.Helpers.compact(this.get('data.config'));\n    }).property('data.config'),\n    isMatrix: (function() {\n      return this.get('data.job_ids.length') > 1;\n    }).property('data.job_ids.length'),\n    requiredJobs: (function() {\n      return this.get('jobs').filter(function(data) {\n        return !data.get('allowFailure');\n      });\n    }).property('jobs.@each.allowFailure'),\n    allowedFailureJobs: (function() {\n      return this.get('jobs').filter(function(data) {\n        return data.get('allowFailure');\n      });\n    }).property('jobs.@each.allowFailure'),\n    configKeys: (function() {\n      var config, headers, key, keys;\n      if (!(config = this.get('config'))) {\n        return [];\n      }\n      keys = $.intersect($.keys(config), Travis.CONFIG_KEYS);\n      headers = (function() {\n        var _i, _len, _ref, _results;\n        _ref = ['build.job', 'build.duration', 'build.finished_at'];\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          key = _ref[_i];\n          _results.push(I18n.t(key));\n        }\n        return _results;\n      })();\n      return $.map(headers.concat(keys), function(key) {\n        return $.camelize(key);\n      });\n    }).property('config')\n  });\n\n  this.Travis.Build.reopenClass({\n    byRepositoryId: function(id, parameters) {\n      return this.find($.extend(parameters || {}, {\n        repository_id: id\n      }));\n    },\n    olderThanNumber: function(id, build_number) {\n      return this.find({\n        url: \"/builds\",\n        repository_id: id,\n        after_number: build_number\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/build");minispade.register('models/commit', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Commit = Travis.Model.extend({\n    buildId: DS.attr('number'),\n    sha: DS.attr('string'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    compareUrl: DS.attr('string'),\n    authorName: DS.attr('string'),\n    authorEmail: DS.attr('string'),\n    committerName: DS.attr('string'),\n    committerEmail: DS.attr('string'),\n    build: DS.belongsTo('Travis.Build', {\n      key: 'buildId'\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/commit");minispade.register('models/extensions', "(function() {(function() {\n\n  Travis.DurationCalculations = Ember.Mixin.create({\n    duration: (function() {\n      var duration;\n      if (duration = this.get('_duration')) {\n        return duration;\n      } else {\n        return Travis.Helpers.durationFrom(this.get('startedAt'), this.get('finishedAt'));\n      }\n    }).property('_duration', 'finishedAt', 'startedAt'),\n    updateTimes: function() {\n      this.notifyPropertyChange('_duration');\n      return this.notifyPropertyChange('finished_at');\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/extensions");minispade.register('models/hook', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Hook = Travis.Model.extend({\n    name: DS.attr('string'),\n    ownerName: DS.attr('string'),\n    description: DS.attr('string'),\n    active: DS.attr('boolean'),\n    account: (function() {\n      return this.get('slug').split('/')[0];\n    }).property('slug'),\n    slug: (function() {\n      return \"\" + (this.get('ownerName')) + \"/\" + (this.get('name'));\n    }).property('ownerName', 'name'),\n    urlGithub: (function() {\n      return \"http://github.com/\" + (this.get('slug'));\n    }).property(),\n    urlGithubAdmin: (function() {\n      return \"http://github.com/\" + (this.get('slug')) + \"/admin/hooks#travis_minibucket\";\n    }).property(),\n    toggle: function() {\n      var transaction;\n      transaction = this.get('store').transaction();\n      transaction.add(this);\n      this.set('active', !this.get('active'));\n      return transaction.commit();\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/hook");minispade.register('models/job', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Job = Travis.Model.extend(Travis.DurationCalculations, {\n    repositoryId: DS.attr('number'),\n    buildId: DS.attr('number'),\n    commitId: DS.attr('number'),\n    logId: DS.attr('number'),\n    queue: DS.attr('string'),\n    state: DS.attr('string'),\n    number: DS.attr('string'),\n    result: DS.attr('number'),\n    _duration: DS.attr('number', {\n      key: 'duration'\n    }),\n    startedAt: DS.attr('string'),\n    finishedAt: DS.attr('string'),\n    allowFailure: DS.attr('boolean', {\n      key: 'allow_failure'\n    }),\n    repository: DS.belongsTo('Travis.Repository', {\n      key: 'repository_id'\n    }),\n    build: DS.belongsTo('Travis.Build', {\n      key: 'build_id'\n    }),\n    commit: DS.belongsTo('Travis.Commit', {\n      key: 'commit_id'\n    }),\n    log: DS.belongsTo('Travis.Artifact', {\n      key: 'log_id'\n    }),\n    isQueued: (function() {}).property('state'),\n    config: (function() {\n      return Travis.Helpers.compact(this.get('data.config'));\n    }).property('data.config'),\n    sponsor: (function() {\n      return this.get('data.sponsor');\n    }).property('data.sponsor'),\n    configValues: (function() {\n      var config;\n      if (config = this.get('config')) {\n        return $.values($.only.apply(config, Travis.CONFIG_KEYS));\n      } else {\n        return [];\n      }\n    }).property('config'),\n    appendLog: function(text) {\n      var log;\n      if (log = this.get('log')) {\n        return log.append(text);\n      }\n    },\n    subscribe: function() {\n      var id;\n      if (id = this.get('id')) {\n        return Travis.app.pusher.subscribe(\"job-\" + id);\n      }\n    },\n    onStateChange: (function() {\n      if (this.get('state') === 'finished') {\n        return Travis.app.pusher.unsubscribe(\"job-\" + (this.get('id')));\n      }\n    }).observes('state')\n  });\n\n  this.Travis.Job.reopenClass({\n    queued: function(queue) {\n      this.find();\n      return Travis.app.store.filter(this, function(job) {\n        var queued;\n        queued = ['created', 'queued'].indexOf(job.get('state')) !== -1;\n        return queued && job.get('queue') === (\"builds.\" + queue);\n      });\n    },\n    findMany: function(ids) {\n      return Travis.app.store.findMany(this, ids);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/job");minispade.register('models/repository', "(function() {(function() {\nminispade.require('travis/expandable_record_array');\nminispade.require('travis/model');\n\n  this.Travis.Repository = Travis.Model.extend({\n    slug: DS.attr('string'),\n    description: DS.attr('string'),\n    lastBuildId: DS.attr('number'),\n    lastBuildNumber: DS.attr('string'),\n    lastBuildResult: DS.attr('number'),\n    lastBuildStartedAt: DS.attr('string'),\n    lastBuildFinishedAt: DS.attr('string'),\n    lastBuild: DS.belongsTo('Travis.Build'),\n    builds: (function() {\n      var array, builds, id;\n      id = this.get('id');\n      builds = Travis.Build.byRepositoryId(id, {\n        event_type: 'push'\n      });\n      array = Travis.ExpandableRecordArray.create({\n        type: Travis.Build,\n        content: Ember.A([]),\n        store: this.get('store')\n      });\n      array.load(builds);\n      return array;\n    }).property(),\n    pullRequests: (function() {\n      var array, builds, id;\n      id = this.get('id');\n      builds = Travis.Build.byRepositoryId(id, {\n        event_type: 'pull_request'\n      });\n      array = Travis.ExpandableRecordArray.create({\n        type: Travis.Build,\n        content: Ember.A([]),\n        store: this.get('store')\n      });\n      array.load(builds);\n      return array;\n    }).property(),\n    branches: (function() {\n      return Travis.Branch.byRepositoryId(this.get('id'));\n    }).property(),\n    owner: (function() {\n      return (this.get('slug') || '').split('/')[0];\n    }).property('slug'),\n    name: (function() {\n      return (this.get('slug') || '').split('/')[1];\n    }).property('slug'),\n    lastBuildDuration: (function() {\n      var duration;\n      duration = this.get('data.last_build_duration');\n      if (!duration) {\n        duration = Travis.Helpers.durationFrom(this.get('lastBuildStartedAt'), this.get('lastBuildFinishedAt'));\n      }\n      return duration;\n    }).property('data.last_build_duration', 'lastBuildStartedAt', 'lastBuildFinishedAt'),\n    sortOrder: (function() {\n      var lastBuildFinishedAt;\n      if (lastBuildFinishedAt = this.get('lastBuildFinishedAt')) {\n        return -new Date(lastBuildFinishedAt).getTime();\n      } else {\n        return -new Date('9999').getTime() - parseInt(this.get('lastBuildId'));\n      }\n    }).property('lastBuildFinishedAt', 'lastBuildId'),\n    stats: (function() {\n      var _this = this;\n      return this.get('_stats') || $.get(\"https://api.github.com/repos/\" + (this.get('slug')), function(data) {\n        _this.set('_stats', data);\n        return _this.notifyPropertyChange('stats');\n      }) && {};\n    }).property(),\n    select: function() {\n      return Travis.Repository.select(this.get('id'));\n    },\n    updateTimes: function() {\n      return this.notifyPropertyChange('lastBuildDuration');\n    }\n  });\n\n  this.Travis.Repository.reopenClass({\n    recent: function() {\n      return this.find();\n    },\n    ownedBy: function(login) {\n      return this.find({\n        owner_name: login,\n        orderBy: 'name'\n      });\n    },\n    search: function(query) {\n      return this.find({\n        search: query,\n        orderBy: 'name'\n      });\n    },\n    bySlug: function(slug) {\n      var repo;\n      repo = $.select(this.find().toArray(), function(repo) {\n        return repo.get('slug') === slug;\n      });\n      if (repo.length > 0) {\n        return repo;\n      } else {\n        return this.find({\n          slug: slug\n        });\n      }\n    },\n    select: function(id) {\n      return this.find().forEach(function(repository) {\n        return repository.set('selected', repository.get('id') === id);\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/repository");minispade.register('models/sponsor', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Sponsor = Travis.Model.extend({\n    type: DS.attr('string'),\n    url: DS.attr('string'),\n    link: DS.attr('string'),\n    image: (function() {\n      return \"/images/sponsors/\" + (this.get('data.image'));\n    }).property('data.image')\n  });\n\n  Travis.Sponsor.reopenClass({\n    decks: function() {\n      return this.platinum().concat(this.gold());\n    },\n    platinum: function() {\n      var platinum, sponsor, _i, _len, _results;\n      platinum = this.byType('platinum').toArray();\n      _results = [];\n      for (_i = 0, _len = platinum.length; _i < _len; _i++) {\n        sponsor = platinum[_i];\n        _results.push([sponsor]);\n      }\n      return _results;\n    },\n    gold: function() {\n      var gold, _results;\n      gold = this.byType('gold').toArray();\n      _results = [];\n      while (gold.length > 0) {\n        _results.push(gold.splice(0, 2));\n      }\n      return _results;\n    },\n    links: function() {\n      return this.byType('silver');\n    },\n    byType: function() {\n      var types;\n      types = Array.prototype.slice.apply(arguments);\n      return Travis.Sponsor.filter(function(sponsor) {\n        return types.indexOf(sponsor.get('type')) !== -1;\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/sponsor");minispade.register('models/user', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('travis/model');\n\n  this.Travis.User = Travis.Model.extend(Travis.Ajax, {\n    name: DS.attr('string'),\n    email: DS.attr('string'),\n    login: DS.attr('string'),\n    token: DS.attr('string'),\n    locale: DS.attr('string'),\n    gravatarId: DS.attr('string'),\n    isSyncing: DS.attr('boolean'),\n    syncedAt: DS.attr('string'),\n    repoCount: DS.attr('number'),\n    init: function() {\n      if (this.get('isSyncing')) {\n        this.poll();\n      }\n      this._super();\n      return Ember.run.next(this, function() {\n        var transaction;\n        transaction = this.get('store').transaction();\n        return transaction.add(this);\n      });\n    },\n    urlGithub: (function() {\n      return \"https://github.com/\" + (this.get('login'));\n    }).property(),\n    updateLocale: function(locale) {\n      var observer, self, transaction;\n      this.setWithSession('locale', locale);\n      transaction = this.get('transaction');\n      transaction.commit();\n      self = this;\n      observer = function() {\n        if (!self.get('isSaving')) {\n          self.removeObserver('isSaving', observer);\n          transaction = self.get('store').transaction();\n          return transaction.add(self);\n        }\n      };\n      return this.addObserver('isSaving', observer);\n    },\n    type: (function() {\n      return 'user';\n    }).property(),\n    sync: function() {\n      this.post('/users/sync');\n      this.setWithSession('isSyncing', true);\n      return this.poll();\n    },\n    poll: function() {\n      var _this = this;\n      return this.ajax('/users', 'get', {\n        success: function(data) {\n          if (data.user.is_syncing) {\n            return Ember.run.later(_this, _this.poll.bind(_this), 3000);\n          } else {\n            _this.set('isSyncing', false);\n            return _this.setWithSession('syncedAt', data.user.synced_at);\n          }\n        }\n      });\n    },\n    setWithSession: function(name, value) {\n      var user;\n      this.set(name, value);\n      user = JSON.parse(typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.getItem('travis.user') : void 0);\n      user[$.underscore(name)] = this.get(name);\n      return typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.setItem('travis.user', JSON.stringify(user)) : void 0;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/user");minispade.register('models/worker', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Worker = Travis.Model.extend({\n    state: DS.attr('string'),\n    name: DS.attr('string'),\n    host: DS.attr('string'),\n    lastSeenAt: DS.attr('string'),\n    payload: (function() {\n      return this.get('data.payload');\n    }).property('data.payload'),\n    number: (function() {\n      return this.get('name').match(/\\d+$/)[0];\n    }).property('name'),\n    isWorking: (function() {\n      return this.get('state') === 'working';\n    }).property('state'),\n    repository: (function() {\n      return Travis.Repository.find(this.get('payload.repository.id'));\n    }).property('payload.repository.id'),\n    job_id: (function() {\n      return this.get('payload.job.id');\n    }).property('payload.job.id'),\n    job: (function() {\n      return Travis.Job.find(this.get('job_id'));\n    }).property('job_id')\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/worker");minispade.register('pusher', "(function() {(function() {\n\n  Travis.Pusher = function(config) {\n    if (config) {\n      this.init(config);\n    }\n    return this;\n  };\n\n  $.extend(Travis.Pusher, {\n    CHANNELS: ['common'],\n    CHANNEL_PREFIX: ''\n  });\n\n  $.extend(Travis.Pusher.prototype, {\n    active_channels: [],\n    init: function(config) {\n      var channel, _i, _len, _ref, _results;\n      Pusher.warn = this.warn.bind(this);\n      this.pusher = new Pusher(config.key);\n      _ref = Travis.Pusher.CHANNELS;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        channel = _ref[_i];\n        _results.push(this.subscribe(channel));\n      }\n      return _results;\n    },\n    subscribe: function(channel) {\n      var _this = this;\n      if (this.pusher && this.active_channels.indexOf(channel) === -1) {\n        this.active_channels.push(channel);\n        return this.pusher.subscribe(this.prefix(channel)).bind_all(function(event, data) {\n          return _this.receive(event, data);\n        });\n      }\n    },\n    unsubscribe: function(channel) {\n      var ix;\n      ix = this.active_channels.indexOf(channel);\n      if (this.pusher && ix === -1) {\n        this.active_channels.splice(ix, 1);\n        return this.pusher.unsubscribe(this.prefix(channel));\n      }\n    },\n    prefix: function(channel) {\n      return \"\" + Travis.Pusher.CHANNEL_PREFIX + channel;\n    },\n    receive: function(event, data) {\n      if (event.substr(0, 6) === 'pusher') {\n        return;\n      }\n      if (data.id) {\n        data = this.normalize(event, data);\n      }\n      return Ember.run.next(function() {\n        return Travis.app.store.receive(event, data);\n      });\n    },\n    normalize: function(event, data) {\n      switch (event) {\n        case 'build:started':\n        case 'build:finished':\n          return data;\n        case 'job:created':\n        case 'job:started':\n        case 'job:finished':\n        case 'job:log':\n          if (data.queue) {\n            data.queue = data.queue.replace('builds.', '');\n          }\n          return {\n            job: data\n          };\n        case 'worker:added':\n        case 'worker:updated':\n        case 'worker:removed':\n          return {\n            worker: data\n          };\n      }\n    },\n    warn: function(type, warning) {\n      if (!this.ignoreWarning(warning)) {\n        return console.warn(warning);\n      }\n    },\n    ignoreWarning: function(warning) {\n      var message, _ref;\n      if (message = (_ref = warning.data) != null ? _ref.message : void 0) {\n        return message.indexOf('Existing subscription') === 0 || message.indexOf('No current subscription') === 0;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=pusher");minispade.register('routes', "(function() {(function() {\n\n  Travis.Router = Ember.Router.extend({\n    location: 'history',\n    enableLogging: true,\n    initialState: 'loading',\n    goToRoot: Ember.Route.transitionTo('root.home.show'),\n    goToStats: Ember.Route.transitionTo('root.stats'),\n    showRepository: Ember.Route.transitionTo('root.home.repository.show'),\n    showBuilds: Ember.Route.transitionTo('root.home.repository.builds.index'),\n    showBuild: Ember.Route.transitionTo('root.home.repository.builds.show'),\n    showPullRequests: Ember.Route.transitionTo('root.home.repository.pullRequests'),\n    showBranches: Ember.Route.transitionTo('root.home.repository.branches'),\n    showJob: Ember.Route.transitionTo('root.home.repository.job'),\n    showProfile: Ember.Route.transitionTo('root.profile'),\n    showAccount: Ember.Route.transitionTo('root.profile.account'),\n    showUserProfile: Ember.Route.transitionTo('root.profile.account.profile'),\n    signedIn: function() {\n      return !!Travis.app.get('auth.user');\n    },\n    requiresAuth: function(path) {\n      return path === '/profile' && !this.signedIn();\n    },\n    loading: Ember.Route.extend({\n      routePath: function(router, path) {\n        router.set('lastAttemptedPath', path);\n        if (router.requiresAuth(path)) {\n          return router.send('showUnauthenticated');\n        } else {\n          return router.send('showAuthenticated');\n        }\n      }\n    }),\n    showUnauthenticated: Ember.State.transitionTo('root.home.show'),\n    showAuthenticated: Ember.State.transitionTo('authenticated.index'),\n    authenticated: Ember.Route.extend({\n      index: Ember.Route.extend({\n        connectOutlets: function(router) {\n          var path;\n          router.transitionTo('root');\n          path = router.get('lastAttemptedPath');\n          if (path && path !== '/') {\n            return router.route(path);\n          }\n        }\n      })\n    }),\n    root: Ember.Route.extend({\n      initialState: 'home',\n      loading: Ember.State.extend(),\n      stats: Ember.Route.extend({\n        route: '/stats',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('statsLayout');\n          $('body').attr('id', 'stats');\n          router.get('statsLayoutController').connectOutlet('top', 'top');\n          return router.get('statsLayoutController').connectOutlet('main', 'stats');\n        }\n      }),\n      profile: Ember.Route.extend({\n        initialState: 'index',\n        route: '/profile',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('profileLayout');\n          $('body').attr('id', 'profile');\n          router.get('accountsController').set('content', Travis.Account.find());\n          router.get('profileLayoutController').connectOutlet('top', 'top');\n          return router.get('profileLayoutController').connectOutlet('left', 'accounts');\n        },\n        index: Ember.Route.extend({\n          route: '/',\n          connectOutlets: function(router) {\n            router.get('profileLayoutController').connectOutlet('main', 'profile');\n            return router.get('profileController').activate('hooks');\n          }\n        }),\n        account: Ember.Route.extend({\n          initialState: 'index',\n          route: '/:login',\n          connectOutlets: function(router, account) {\n            var params;\n            if (account) {\n              params = {\n                login: account.get('login')\n              };\n              return router.get('profileController').setParams(params);\n            } else {\n              return router.send('showProfile');\n            }\n          },\n          deserialize: function(router, params) {\n            return router.get('accountsController').findByLogin(params.login);\n          },\n          serialize: function(router, account) {\n            if (account) {\n              return {\n                login: account.get('login')\n              };\n            } else {\n              return {};\n            }\n          },\n          index: Ember.Route.extend({\n            route: '/',\n            connectOutlets: function(router) {\n              return router.get('profileController').activate('hooks');\n            }\n          }),\n          profile: Ember.Route.extend({\n            route: '/profile',\n            connectOutlets: function(router) {\n              return router.get('profileController').activate('user');\n            }\n          })\n        })\n      }),\n      home: Ember.Route.extend({\n        initialState: 'show',\n        route: '/',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('home');\n          $('body').attr('id', 'home');\n          router.get('homeController').connectOutlet('left', 'repositories');\n          router.get('homeController').connectOutlet('right', 'sidebar');\n          router.get('homeController').connectOutlet('top', 'top');\n          return router.get('homeController').connectOutlet('main', 'repository');\n        },\n        show: Ember.Route.extend({\n          route: '/',\n          connectOutlets: function(router) {\n            return router.get('repositoryController').activate('index');\n          }\n        }),\n        repository: Ember.Route.extend({\n          initialState: 'show',\n          route: '/:owner/:name',\n          connectOutlets: function(router, repository) {\n            return router.get('repositoryController').set('repository', repository);\n          },\n          deserialize: function(router, params) {\n            var deferred, observer, repos, slug;\n            slug = \"\" + params.owner + \"/\" + params.name;\n            repos = Travis.Repository.bySlug(slug);\n            deferred = $.Deferred();\n            observer = function() {\n              if (repos.get('isLoaded')) {\n                repos.removeObserver('isLoaded', observer);\n                return deferred.resolve(repos.objectAt(0));\n              }\n            };\n            repos.addObserver('isLoaded', observer);\n            return deferred.promise();\n          },\n          serialize: function(router, repository) {\n            if (repository) {\n              return {\n                owner: repository.get('owner'),\n                name: repository.get('name')\n              };\n            } else {\n              return {};\n            }\n          },\n          show: Ember.Route.extend({\n            route: '/',\n            connectOutlets: function(router) {\n              return router.get('repositoryController').activate('current');\n            }\n          }),\n          builds: Ember.Route.extend({\n            route: '/builds',\n            initialState: 'index',\n            index: Ember.Route.extend({\n              route: '/',\n              connectOutlets: function(router, repository) {\n                return router.get('repositoryController').activate('builds');\n              }\n            }),\n            show: Ember.Route.extend({\n              route: '/:build_id',\n              connectOutlets: function(router, build) {\n                if (!build.get) {\n                  build = Travis.Build.find(build);\n                }\n                router.get('repositoryController').set('build', build);\n                return router.get('repositoryController').activate('build');\n              },\n              serialize: function(router, build) {\n                if (build.get) {\n                  return {\n                    build_id: build.get('id')\n                  };\n                } else {\n                  return {\n                    build_id: build\n                  };\n                }\n              },\n              deserialize: function(router, params) {\n                var build, deferred, observer;\n                build = Travis.Build.find(params.build_id);\n                deferred = $.Deferred();\n                observer = function() {\n                  if (build.get('id')) {\n                    build.removeObserver('id', observer);\n                    return deferred.resolve(build);\n                  }\n                };\n                build.addObserver('id', observer);\n                return deferred.promise();\n              }\n            })\n          }),\n          pullRequests: Ember.Route.extend({\n            route: '/pull_requests',\n            connectOutlets: function(router, repository) {\n              return router.get('repositoryController').activate('pull_requests');\n            }\n          }),\n          branches: Ember.Route.extend({\n            route: '/branches',\n            connectOutlets: function(router, repository) {\n              return router.get('repositoryController').activate('branches');\n            }\n          }),\n          job: Ember.Route.extend({\n            route: '/jobs/:job_id',\n            connectOutlets: function(router, job) {\n              if (!job.get) {\n                job = Travis.Job.find(job);\n              }\n              router.get('repositoryController').set('job', job);\n              return router.get('repositoryController').activate('job');\n            },\n            serialize: function(router, job) {\n              if (job.get) {\n                return {\n                  job_id: job.get('id')\n                };\n              } else {\n                return {\n                  job_id: job\n                };\n              }\n            },\n            deserialize: function(router, params) {\n              var deferred, job, observer;\n              job = Travis.Job.find(params.job_id);\n              deferred = $.Deferred();\n              observer = function() {\n                if (job.get('id')) {\n                  job.removeObserver('id', observer);\n                  return deferred.resolve(job);\n                }\n              };\n              job.addObserver('id', observer);\n              return deferred.promise();\n            }\n          })\n        })\n      })\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=routes");minispade.register('slider', "(function() {(function() {\n\n  this.Travis.Slider = function() {\n    if ((typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.getItem('travis.maximized') : void 0) === 'true') {\n      this.minimize();\n    }\n    return this;\n  };\n\n  $.extend(Travis.Slider.prototype, {\n    persist: function() {\n      return typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.setItem('travis.maximized', this.isMinimized()) : void 0;\n    },\n    isMinimized: function() {\n      return $('body').hasClass('maximized');\n    },\n    minimize: function() {\n      return $('body').addClass('maximized');\n    },\n    toggle: function() {\n      var element;\n      $('body').toggleClass('maximized');\n      this.persist();\n      element = $('<span></span>');\n      $('#top .profile').append(element);\n      return Em.run.later((function() {\n        return element.remove();\n      }), 10);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=slider");minispade.register('store', "(function() {(function() {\n  var DATA_PROXY,\n    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\nminispade.require('store/rest_adapter');\n\n  DATA_PROXY = {\n    get: function(name) {\n      return this.savedData[name];\n    }\n  };\n\n  Travis.Store = DS.Store.extend({\n    revision: 4,\n    adapter: Travis.RestAdapter.create(),\n    merge: function(type, id, hash) {\n      var clientId, data, dataCache, primaryKey, record, recordCache, typeMap;\n      if (hash === void 0) {\n        hash = id;\n        primaryKey = type.proto().primaryKey;\n        Ember.assert(\"A data hash was loaded for a record of type \" + type.toString() + \" but no primary key '\" + primaryKey + \"' was provided.\", hash[primaryKey]);\n        id = hash[primaryKey];\n      }\n      typeMap = this.typeMapFor(type);\n      dataCache = typeMap.cidToHash;\n      clientId = typeMap.idToCid[id];\n      recordCache = this.get('recordCache');\n      if (clientId !== void 0) {\n        if (data = dataCache[clientId]) {\n          $.extend(data, hash);\n        } else {\n          dataCache[clientId] = hash;\n        }\n        if (record = recordCache[clientId]) {\n          record.send('didChangeData');\n        }\n      } else {\n        clientId = this.find(type, id).get('clientId');\n      }\n      if (clientId) {\n        DATA_PROXY.savedData = hash;\n        this.updateRecordArrays(type, clientId, DATA_PROXY);\n        return {\n          id: id,\n          clientId: clientId\n        };\n      }\n    },\n    receive: function(event, data) {\n      var job, mappings, name, type, _ref;\n      _ref = event.split(':'), name = _ref[0], type = _ref[1];\n      mappings = this.adapter.get('mappings');\n      type = mappings[name];\n      if (event === 'job:log') {\n        if (job = this.find(Travis.Job, data['job']['id'])) {\n          return job.appendLog(data['job']['_log']);\n        }\n      } else if (data[type.singularName()]) {\n        return this._loadOne(this, type, data);\n      } else if (data[type.pluralName()]) {\n        return this._loadMany(this, type, data);\n      } else {\n        if (!type) {\n          throw \"can't load data for \" + name;\n        }\n      }\n    },\n    _loadOne: function(store, type, json) {\n      var root;\n      root = type.singularName();\n      this.adapter.sideload(store, type, json, root);\n      this.merge(type, json[root]);\n      return this._updateAssociations(type, root, json[root]);\n    },\n    _loadMany: function(store, type, json) {\n      var root;\n      root = type.pluralName();\n      this.adapter.sideload(store, type, json, root);\n      return this.loadMany(type, json[root]);\n    },\n    _updateAssociations: function(type, name, data) {\n      var _this = this;\n      return Em.get(type, 'associationsByName').forEach(function(key, meta) {\n        var clientId, dataProxy, id, ids, parent, _ref;\n        if (meta.kind === 'belongsTo') {\n          id = data[\"\" + key + \"_id\"];\n          if (clientId = _this.typeMapFor(meta.type).idToCid[id]) {\n            if (parent = _this.findByClientId(meta.type, clientId, id)) {\n              dataProxy = parent.get('data');\n              if (ids = dataProxy.get(\"\" + name + \"_ids\")) {\n                if (_ref = data.id, __indexOf.call(ids, _ref) < 0) {\n                  ids.pushObject(data.id);\n                }\n                return parent.send('didChangeData');\n              }\n            }\n          }\n        }\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store");minispade.register('store/fixture_adapter', "(function() {(function() {\n\n  this.Travis.FixtureAdapter = DS.Adapter.extend({\n    find: function(store, type, id) {\n      var fixtures;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      if (fixtures.hasLoaded) {\n        return;\n      }\n      return setTimeout((function() {\n        store.loadMany(type, fixtures);\n        return fixtures.hasLoaded = true;\n      }), 300);\n    },\n    findMany: function() {\n      return this.find.apply(this, arguments);\n    },\n    findAll: function(store, type) {\n      var fixtures, ids;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      ids = fixtures.map(function(item, index, self) {\n        return item.id;\n      });\n      return store.loadMany(type, ids, fixtures);\n    },\n    findQuery: function(store, type, params, array) {\n      var fixture, fixtures, hashes, key, matches, value;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      hashes = (function() {\n        var _i, _len, _results;\n        _results = [];\n        for (_i = 0, _len = fixtures.length; _i < _len; _i++) {\n          fixture = fixtures[_i];\n          matches = (function() {\n            var _results1;\n            _results1 = [];\n            for (key in params) {\n              value = params[key];\n              _results1.push(key === 'orderBy' || fixture[key] === value);\n            }\n            return _results1;\n          })();\n          if (matches.reduce(function(a, b) {\n            return a && b;\n          })) {\n            _results.push(fixture);\n          } else {\n            _results.push(null);\n          }\n        }\n        return _results;\n      })();\n      return array.load(hashes.compact());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/fixture_adapter");minispade.register('store/rest_adapter', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('models');\n\n  this.Travis.RestAdapter = DS.RESTAdapter.extend(Travis.Ajax, {\n    mappings: {\n      repositories: Travis.Repository,\n      repository: Travis.Repository,\n      builds: Travis.Build,\n      build: Travis.Build,\n      commits: Travis.Commit,\n      commit: Travis.Commit,\n      jobs: Travis.Job,\n      job: Travis.Job,\n      account: Travis.Account,\n      accounts: Travis.Account,\n      worker: Travis.Worker,\n      workers: Travis.Worker\n    },\n    plurals: {\n      repository: 'repositories',\n      build: 'builds',\n      branch: 'branches',\n      job: 'jobs',\n      worker: 'workers',\n      profile: 'profile'\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/rest_adapter");minispade.register('tailing', "(function() {(function() {\n\n  this.Travis.Tailing = function() {\n    this.position = $(window).scrollTop();\n    $(window).scroll(this.onScroll.bind(this));\n    return this;\n  };\n\n  $.extend(Travis.Tailing.prototype, {\n    options: {\n      timeout: 200\n    },\n    run: function() {\n      this.autoScroll();\n      this.positionButton();\n      if (this.active()) {\n        return Ember.run.later(this.run.bind(this), this.options.timeout);\n      }\n    },\n    toggle: function(event) {\n      if (this.active()) {\n        return this.stop();\n      } else {\n        return this.start();\n      }\n    },\n    active: function() {\n      return $('#tail').hasClass('active');\n    },\n    start: function() {\n      $('#tail').addClass('active');\n      return this.run();\n    },\n    stop: function() {\n      return $('#tail').removeClass('active');\n    },\n    autoScroll: function() {\n      var log, logBottom, win, winBottom;\n      if (!this.active()) {\n        return;\n      }\n      win = $(window);\n      log = $('#log');\n      logBottom = log.offset().top + log.outerHeight() + 40;\n      winBottom = win.scrollTop() + win.height();\n      if (logBottom - winBottom > 0) {\n        return win.scrollTop(logBottom - win.height());\n      }\n    },\n    onScroll: function() {\n      var position;\n      this.positionButton();\n      position = $(window).scrollTop();\n      if (position < this.position) {\n        this.stop();\n      }\n      return this.position = position;\n    },\n    positionButton: function() {\n      var max, offset, tail;\n      tail = $('#tail');\n      if (tail.length === 0) {\n        return;\n      }\n      offset = $(window).scrollTop() - $('#log').offset().top;\n      max = $('#log').height() - $('#tail').height() + 5;\n      if (offset > max) {\n        offset = max;\n      }\n      if (offset > 0) {\n        return tail.css({\n          top: offset - 2\n        });\n      } else {\n        return tail.css({\n          top: 0\n        });\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=tailing");minispade.register('views', "(function() {(function() {\nminispade.require('ext/ember/namespace');\n\n  this.Travis.reopen({\n    View: Em.View.extend({\n      popup: function(event) {\n        return $(\"#\" + event.target.name).toggleClass('display');\n      }\n    })\n  });\n\n  this.Travis.reopen({\n    HomeView: Travis.View.extend({\n      templateName: 'layouts/home'\n    }),\n    ProfileLayoutView: Travis.View.extend({\n      templateName: 'layouts/profile'\n    }),\n    StatsLayoutView: Travis.View.extend({\n      templateName: 'layouts/simple'\n    }),\n    ApplicationView: Travis.View.extend({\n      templateName: 'application'\n    })\n  });\nminispade.require('views/accounts');\nminispade.require('views/build');\nminispade.require('views/job');\nminispade.require('views/repo');\nminispade.require('views/profile');\nminispade.require('views/sidebar');\nminispade.require('views/stats');\nminispade.require('views/top');\n\n}).call(this);\n\n})();\n//@ sourceURL=views");minispade.register('views/accounts', "(function() {(function() {\n\n  this.Travis.reopen({\n    AccountsView: Travis.View.extend({\n      tabBinding: 'controller.tab',\n      templateName: 'profile/accounts',\n      classAccounts: (function() {\n        if (this.get('tab') === 'accounts') {\n          return 'active';\n        }\n      }).property('tab')\n    }),\n    AccountsListView: Em.CollectionView.extend({\n      elementId: 'accounts',\n      accountBinding: 'content',\n      tagName: 'ul',\n      emptyView: Ember.View.extend({\n        template: Ember.Handlebars.compile('<div class=\"loading\"><span>Loading</span></div>')\n      }),\n      itemViewClass: Travis.View.extend({\n        accountBinding: 'content',\n        typeBinding: 'content.type',\n        selectedBinding: 'account.selected',\n        classNames: ['account'],\n        classNameBindings: ['type', 'selected'],\n        name: (function() {\n          return this.get('content.name') || this.get('content.login');\n        }).property('content.login', 'content.name'),\n        urlAccount: (function() {\n          return Travis.Urls.account(this.get('account.login'));\n        }).property('account.login')\n      })\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/accounts");minispade.register('views/build', "(function() {(function() {\n\n  this.Travis.reopen({\n    BuildsView: Travis.View.extend({\n      templateName: 'builds/list',\n      buildsBinding: 'controller.builds',\n      showMore: function() {\n        var id, number;\n        id = this.get('controller.repository.id');\n        number = this.get('builds.lastObject.number');\n        return this.get('builds').load(Travis.Build.olderThanNumber(id, number));\n      },\n      ShowMoreButton: Em.View.extend({\n        tagName: 'button',\n        classNameBindings: ['isLoading'],\n        attributeBindings: ['disabled'],\n        isLoadingBinding: 'controller.builds.isLoading',\n        template: Em.Handlebars.compile('{{view.label}}'),\n        disabledBinding: 'isLoading',\n        label: (function() {\n          if (this.get('isLoading')) {\n            return 'Loading';\n          } else {\n            return 'Show more';\n          }\n        }).property('isLoading'),\n        click: function() {\n          return this.get('parentView').showMore();\n        }\n      })\n    }),\n    BuildsItemView: Travis.View.extend({\n      tagName: 'tr',\n      classNameBindings: ['color'],\n      repositoryBinding: 'controller.repository',\n      buildBinding: 'context',\n      commitBinding: 'build.commit',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('build.result'));\n      }).property('build.result'),\n      urlBuild: (function() {\n        return Travis.Urls.build(this.get('repository.slug'), this.get('build.id'));\n      }).property('repository.slug', 'build.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repository.slug'), this.get('commit.sha'));\n      }).property('repository.slug', 'commit.sha')\n    }),\n    BuildView: Travis.View.extend({\n      templateName: 'builds/show',\n      elementId: 'build',\n      classNameBindings: ['color', 'loading'],\n      repositoryBinding: 'controller.repository',\n      buildBinding: 'controller.build',\n      commitBinding: 'build.commit',\n      loading: (function() {\n        return !this.get('build.isLoaded');\n      }).property('build.isLoaded'),\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('build.result'));\n      }).property('build.result'),\n      urlBuild: (function() {\n        return Travis.Urls.build(this.get('repository.slug'), this.get('build.id'));\n      }).property('repository.slug', 'build.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repository.slug'), this.get('commit.sha'));\n      }).property('repository.slug', 'commit.sha'),\n      urlAuthor: (function() {\n        return Travis.Urls.email(this.get('commit.authorEmail'));\n      }).property('commit.authorEmail'),\n      urlCommitter: (function() {\n        return Travis.Urls.email(this.get('commit.committerEmail'));\n      }).property('commit.committerEmail')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/build");minispade.register('views/job', "(function() {(function() {\n\n  this.Travis.reopen({\n    JobsView: Travis.View.extend({\n      templateName: 'jobs/list',\n      buildBinding: 'controller.build'\n    }),\n    JobsItemView: Travis.View.extend({\n      tagName: 'tr',\n      classNameBindings: ['color'],\n      repositoryBinding: 'context.repository',\n      jobBinding: 'context',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('job.result'));\n      }).property('job.result'),\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('repository.slug'), this.get('job.id'));\n      }).property('repository.slug', 'job.id')\n    }),\n    JobView: Travis.View.extend({\n      templateName: 'jobs/show',\n      repositoryBinding: 'controller.repository',\n      jobBinding: 'controller.job',\n      commitBinding: 'job.commit',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('job.result'));\n      }).property('job.result'),\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('repository.slug'), this.get('job.id'));\n      }).property('repository.slug', 'job.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repository.slug'), this.get('commit.sha'));\n      }).property('repository.slug', 'commit.sha'),\n      urlAuthor: (function() {\n        return Travis.Urls.email(this.get('commit.authorEmail'));\n      }).property('commit.authorEmail'),\n      urlCommitter: (function() {\n        return Travis.Urls.email(this.get('commit.committerEmail'));\n      }).property('commit.committerEmail')\n    }),\n    LogView: Travis.View.extend({\n      templateName: 'jobs/log',\n      logBinding: 'job.log',\n      click: function(event) {\n        return $(event.target).closest('.fold').toggleClass('open');\n      },\n      toTop: function() {\n        return $(window).scrollTop(0);\n      },\n      jobBinding: 'context',\n      toggleTailing: function(event) {\n        Travis.app.tailing.toggle();\n        return event.preventDefault();\n      },\n      logSubscriber: (function() {\n        var job, state;\n        job = this.get('job');\n        state = this.get('job.state');\n        if (job && state !== 'finished') {\n          job.subscribe();\n        }\n        return null;\n      }).property('job', 'job.state')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/job");minispade.register('views/left', "(function() {(function() {\n\n  this.Travis.reopen({\n    ReposView: Travis.View.extend({\n      templateName: 'repos/list',\n      tabBinding: 'controller.tab',\n      classRecent: (function() {\n        if (this.get('tab') === 'recent') {\n          return 'active';\n        }\n      }).property('tab'),\n      classOwned: (function() {\n        var classes;\n        classes = [];\n        if (this.get('tab') === 'owned') {\n          classes.push('active');\n        }\n        if (Travis.app.get('currentUser')) {\n          classes.push('display');\n        }\n        return classes.join(' ');\n      }).property('tab', 'Travis.currentUser'),\n      classSearch: (function() {\n        if (this.get('tab') === 'search') {\n          return 'active';\n        }\n      }).property('tab')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/left");minispade.register('views/profile', "(function() {(function() {\n\n  this.Travis.reopen({\n    ProfileView: Travis.View.extend({\n      templateName: 'profile/show',\n      accountBinding: 'controller.account',\n      name: (function() {\n        return this.get('account.name') || this.get('account.login');\n      }).property('account.name', 'account.login')\n    }),\n    ProfileTabsView: Travis.View.extend({\n      templateName: 'profile/tabs',\n      tabBinding: 'controller.tab',\n      activate: function(event) {\n        return this.get('controller').activate(event.target.name);\n      },\n      classHooks: (function() {\n        if (this.get('tab') === 'hooks') {\n          return 'active';\n        }\n      }).property('tab'),\n      classUser: (function() {\n        if (this.get('tab') === 'user') {\n          return 'active';\n        }\n      }).property('tab'),\n      accountBinding: 'controller.account',\n      displayUser: (function() {\n        return this.get('controller.account.login') === this.get('controller.user.login');\n      }).property('controller.account.login', 'controller.user.login')\n    }),\n    HooksView: Travis.View.extend({\n      templateName: 'profile/tabs/hooks',\n      userBinding: 'controller.user',\n      urlGithubAdmin: (function() {\n        return Travis.Urls.githubAdmin(this.get('hook.slug'));\n      }).property('hook.slug')\n    }),\n    UserView: Travis.View.extend({\n      templateName: 'profile/tabs/user',\n      userBinding: 'controller.user',\n      gravatarUrl: (function() {\n        return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=48&d=mm\";\n      }).property('user.gravatarId'),\n      locales: (function() {\n        return [\n          {\n            key: null,\n            name: ''\n          }, {\n            key: 'en',\n            name: 'English'\n          }, {\n            key: 'ca',\n            name: 'Catalan'\n          }, {\n            key: 'cs',\n            name: 'Čeština'\n          }, {\n            key: 'es',\n            name: 'Español'\n          }, {\n            key: 'fr',\n            name: 'Français'\n          }, {\n            key: 'ja',\n            name: '日本語'\n          }, {\n            key: 'nl',\n            name: 'Nederlands'\n          }, {\n            key: 'nb',\n            name: 'Norsk Bokmål'\n          }, {\n            key: 'pl',\n            name: 'Polski'\n          }, {\n            key: {\n              'pt-BR': {\n                name: 'Português brasileiro'\n              }\n            }\n          }, {\n            key: 'ru',\n            name: 'Русский'\n          }\n        ];\n      }).property(),\n      saveLocale: function(event) {\n        return this.get('user').updateLocale($('#locale').val());\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/profile");minispade.register('views/repo', "(function() {(function() {\nminispade.require('views/repo/list');\nminispade.require('views/repo/show');\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo");minispade.register('views/repo/list', "(function() {(function() {\n\n  this.Travis.reopen({\n    RepositoriesView: Travis.View.extend({\n      templateName: 'repos/list',\n      toggleInfo: function(event) {\n        return $('#repositories').toggleClass('open');\n      }\n    }),\n    RepositoriesListView: Em.CollectionView.extend({\n      elementId: 'repositories',\n      tagName: 'ul',\n      emptyView: Ember.View.extend({\n        template: Ember.Handlebars.compile('<div class=\"loading\"><span>Loading</span></div>')\n      }),\n      itemViewClass: Travis.View.extend({\n        repositoryBinding: 'content',\n        classNames: ['repository'],\n        classNameBindings: ['color', 'selected'],\n        selectedBinding: 'repository.selected',\n        color: (function() {\n          return Travis.Helpers.colorForResult(this.get('repository.lastBuildResult'));\n        }).property('repository.lastBuildResult'),\n        urlRepository: (function() {\n          return Travis.Urls.repository(this.get('repository.slug'));\n        }).property('repository.slug'),\n        urlLastBuild: (function() {\n          return Travis.Urls.build(this.get('repository.slug'), this.get('repository.lastBuildId'));\n        }).property('repository.slug', 'repository.lastBuildId')\n      })\n    }),\n    ReposListTabsView: Travis.View.extend({\n      templateName: 'repos/list/tabs',\n      tabBinding: 'controller.tab',\n      activate: function(event) {\n        return this.get('controller').activate(event.target.name);\n      },\n      classRecent: (function() {\n        if (this.get('tab') === 'recent') {\n          return 'active';\n        }\n      }).property('tab'),\n      classOwned: (function() {\n        var classes;\n        classes = [];\n        if (this.get('tab') === 'owned') {\n          classes.push('active');\n        }\n        if (Travis.app.get('currentUser')) {\n          classes.push('display-inline');\n        }\n        return classes.join(' ');\n      }).property('tab', 'Travis.app.currentUser'),\n      classSearch: (function() {\n        if (this.get('tab') === 'search') {\n          return 'active';\n        }\n      }).property('tab')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/list");minispade.register('views/repo/show', "(function() {(function() {\n\n  this.Travis.reopen({\n    RepositoryView: Travis.View.extend({\n      templateName: 'repos/show',\n      repositoryBinding: 'controller.repository',\n      \"class\": (function() {\n        if (!this.get('repository.isLoaded')) {\n          return 'loading';\n        }\n      }).property('repository.isLoaded'),\n      urlGithub: (function() {\n        return Travis.Urls.githubRepository(this.get('repository.slug'));\n      }).property('repository.slug'),\n      urlGithubWatchers: (function() {\n        return Travis.Urls.githubWatchers(this.get('repository.slug'));\n      }).property('repository.slug'),\n      urlGithubNetwork: (function() {\n        return Travis.Urls.githubNetwork(this.get('repository.slug'));\n      }).property('repository.slug')\n    }),\n    RepoShowTabsView: Travis.View.extend({\n      templateName: 'repos/show/tabs',\n      repositoryBinding: 'controller.repository',\n      buildBinding: 'controller.build',\n      jobBinding: 'controller.job',\n      tabBinding: 'controller.tab',\n      classCurrent: (function() {\n        if (this.get('tab') === 'current') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBuilds: (function() {\n        if (this.get('tab') === 'builds') {\n          return 'active';\n        }\n      }).property('tab'),\n      classPullRequests: (function() {\n        if (this.get('tab') === 'pull_requests') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBranches: (function() {\n        if (this.get('tab') === 'branches') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBuild: (function() {\n        var classes, tab;\n        tab = this.get('tab');\n        classes = [];\n        if (tab === 'build') {\n          classes.push('active');\n        }\n        if (tab === 'build' || tab === 'job') {\n          classes.push('display-inline');\n        }\n        return classes.join(' ');\n      }).property('tab'),\n      classJob: (function() {\n        if (this.get('tab') === 'job') {\n          return 'active display-inline';\n        }\n      }).property('tab')\n    }),\n    RepoShowToolsView: Travis.View.extend({\n      templateName: 'repos/show/tools',\n      repositoryBinding: 'controller.repository',\n      buildBinding: 'controller.build',\n      jobBinding: 'controller.job',\n      tabBinding: 'controller.tab',\n      toggle: function() {\n        var element;\n        element = $('#tools .pane').toggleClass('display-inline');\n        return this.set('active', element.hasClass('display-inline'));\n      },\n      branches: (function() {\n        if (this.get('active')) {\n          return this.get('repository.branches');\n        }\n      }).property('active', 'repository.branches'),\n      urlRepository: (function() {\n        return 'https://' + location.host + Travis.Urls.repository(this.get('repository.slug'));\n      }).property('repository.slug'),\n      urlStatusImage: (function() {\n        return Travis.Urls.statusImage(this.get('repository.slug'), this.get('branch.commit.branch'));\n      }).property('repository.slug', 'branch'),\n      markdownStatusImage: (function() {\n        return \"[![Build Status](\" + (this.get('urlStatusImage')) + \")](\" + (this.get('urlRepository')) + \")\";\n      }).property('urlStatusImage'),\n      textileStatusImage: (function() {\n        return \"!\" + (this.get('urlStatusImage')) + \"!:\" + (this.get('urlRepository'));\n      }).property('urlStatusImage'),\n      rdocStatusImage: (function() {\n        return \"{<img src=\\\"\" + (this.get('urlStatusImage')) + \"\\\" alt=\\\"Build Status\\\" />}[\" + (this.get('urlRepository')) + \"]\";\n      }).property('urlStatusImage')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/show");minispade.register('views/sidebar', "(function() {(function() {\n\n  this.Travis.reopen({\n    SidebarView: Travis.View.extend({\n      templateName: 'layouts/sidebar',\n      DecksView: Em.View.extend({\n        templateName: \"sponsors/decks\",\n        controller: Travis.SponsorsController.create({\n          perPage: 1\n        }),\n        didInsertElement: function() {\n          var controller;\n          controller = this.get('controller');\n          if (!controller.get('content')) {\n            Travis.app.get('router.sidebarController').tickables.push(controller);\n            controller.set('content', Travis.Sponsor.decks());\n          }\n          return this._super.apply(this, arguments);\n        }\n      }),\n      LinksView: Em.View.extend({\n        templateName: \"sponsors/links\",\n        controller: Travis.SponsorsController.create({\n          perPage: 6\n        }),\n        didInsertElement: function() {\n          var controller;\n          controller = this.get('controller');\n          if (!controller.get('content')) {\n            controller.set('content', Travis.Sponsor.links());\n            Travis.app.get('router.sidebarController').tickables.push(controller);\n          }\n          return this._super.apply(this, arguments);\n        }\n      }),\n      WorkersView: Em.View.extend({\n        templateName: 'workers/list',\n        controller: Travis.WorkersController.create(),\n        didInsertElement: function() {\n          this.set('controller.content', Travis.Worker.find());\n          return this._super.apply(this, arguments);\n        }\n      }),\n      QueuesView: Em.View.extend({\n        templateName: 'queues/list',\n        controller: Travis.QueuesController.create(),\n        didInsertElement: function() {\n          var queue, queues;\n          queues = (function() {\n            var _i, _len, _ref, _results;\n            _ref = Travis.QUEUES;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n              queue = _ref[_i];\n              _results.push(Em.ArrayController.create({\n                content: Travis.Job.queued(queue.name),\n                id: \"queue_\" + queue.name,\n                name: queue.display\n              }));\n            }\n            return _results;\n          })();\n          this.set('controller.content', queues);\n          return this._super.apply(this, arguments);\n        }\n      })\n    }),\n    WorkersView: Travis.View.extend({\n      toggleWorkers: function(event) {\n        var handle;\n        handle = $(event.target).toggleClass('open');\n        if (handle.hasClass('open')) {\n          return $('#workers li').addClass('open');\n        } else {\n          return $('#workers li').removeClass('open');\n        }\n      }\n    }),\n    WorkersListView: Travis.View.extend({\n      toggle: function(event) {\n        return $(event.target).closest('li').toggleClass('open');\n      }\n    }),\n    WorkersItemView: Travis.View.extend({\n      display: (function() {\n        var name, number, payload, repo, state;\n        name = (this.get('worker.name') || '').replace('travis-', '');\n        state = this.get('worker.state');\n        payload = this.get('worker.payload');\n        if (state === 'working' && payload !== void 0) {\n          repo = payload.repository.slug;\n          number = ' #' + payload.build.number;\n          return (\"<span class='name'>\" + name + \": \" + repo + \"</span> \" + number).htmlSafe();\n        } else {\n          return \"\" + name + \": \" + state;\n        }\n      }).property('worker.state')\n    }),\n    QueueItemView: Travis.View.extend({\n      tagName: 'li',\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('job.repository.slug'), this.get('job.id'));\n      }).property('job.repository.slug', 'job.id')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/sidebar");minispade.register('views/stats', "(function() {(function() {\n\n  this.Travis.reopen({\n    StatsView: Travis.View.extend({\n      templateName: 'stats/show',\n      didInsertElement: function() {},\n      renderChart: function(config) {\n        var chart;\n        chart = new Highcharts.Chart(config);\n        return this.fetch(config.source, function(data) {\n          var stats;\n          stats = (function() {\n            var _i, _len, _ref, _results;\n            _ref = data.stats;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n              stats = _ref[_i];\n              _results.push(config.map(stats));\n            }\n            return _results;\n          })();\n          return chart.series[0].setData(stats);\n        });\n      },\n      fetch: function(url, callback) {\n        return $.ajax({\n          type: 'GET',\n          url: url,\n          accepts: {\n            json: 'application/vnd.travis-ci.2+json'\n          },\n          success: callback\n        });\n      },\n      CHARTS: {\n        repos: {\n          source: '/api/stats/repos',\n          total: 0,\n          map: function(data) {\n            return [Date.parse(data.date), this.total += parseInt(data.count)];\n          },\n          chart: {\n            renderTo: \"repos_stats\"\n          },\n          title: {\n            text: \"Total Projects/Repositories\"\n          },\n          xAxis: {\n            type: \"datetime\",\n            dateTimeLabelFormats: {\n              month: \"%e. %b\",\n              year: \"%b\"\n            }\n          },\n          yAxis: {\n            title: {\n              text: \"Count\"\n            },\n            min: 0\n          },\n          tooltip: {\n            formatter: function() {\n              return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" repos\";\n            }\n          },\n          series: [\n            {\n              name: \"Repository Growth\",\n              data: []\n            }\n          ]\n        },\n        builds: {\n          source: '/api/stats/tests',\n          map: function(data) {\n            return [Date.parse(data.date), parseInt(data.count)];\n          },\n          chart: {\n            renderTo: \"tests_stats\",\n            type: \"column\"\n          },\n          title: {\n            text: \"Build Count\"\n          },\n          subtitle: {\n            text: \"last month\"\n          },\n          xAxis: {\n            type: \"datetime\",\n            dateTimeLabelFormats: {\n              month: \"%e. %b\",\n              year: \"%b\"\n            }\n          },\n          yAxis: {\n            title: {\n              text: \"Count\"\n            },\n            min: 0\n          },\n          tooltip: {\n            formatter: function() {\n              return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" builds\";\n            }\n          },\n          series: [\n            {\n              name: \"Total Builds\",\n              data: []\n            }\n          ]\n        }\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/stats");minispade.register('views/top', "(function() {(function() {\n\n  this.Travis.reopen({\n    TopView: Travis.View.extend({\n      templateName: 'layouts/top',\n      tabBinding: 'controller.tab',\n      userBinding: 'controller.user',\n      gravatarUrl: (function() {\n        return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=24&d=mm\";\n      }).property('user.gravatarId'),\n      classHome: (function() {\n        if (this.get('tab') === 'home') {\n          return 'active';\n        }\n      }).property('tab'),\n      classStats: (function() {\n        if (this.get('tab') === 'stats') {\n          return 'active';\n        }\n      }).property('tab'),\n      classProfile: (function() {\n        var classes;\n        classes = ['profile'];\n        if (this.get('tab') === 'profile') {\n          classes.push('active');\n        }\n        classes.push(Travis.app.get('authState'));\n        return classes.join(' ');\n      }).property('tab', 'Travis.app.authState'),\n      showProfile: function() {\n        return $('#top .profile ul').show();\n      },\n      hideProfile: function() {\n        return $('#top .profile ul').hide();\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/top");minispade.register('data/sponsors', "(function() {(function() {\n\n  this.Travis.SPONSORS = [\n    {\n      type: 'platinum',\n      url: \"http://www.wooga.com\",\n      image: \"wooga-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://bendyworks.com\",\n      image: \"bendyworks-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://cloudcontrol.com\",\n      image: \"cloudcontrol-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://xing.de\",\n      image: \"xing-205x130.png\"\n    }, {\n      type: 'gold',\n      url: \"http://heroku.com\",\n      image: \"heroku-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://soundcloud.com\",\n      image: \"soundcloud-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://nedap.com\",\n      image: \"nedap-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://mongohq.com\",\n      image: \"mongohq-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://zweitag.de\",\n      image: \"zweitag-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://kanbanery.com\",\n      image: \"kanbanery-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://ticketevolution.com\",\n      image: \"ticketevolution-205x60.jpg\"\n    }, {\n      type: 'gold',\n      url: \"http://plan.io/travis\",\n      image: \"planio-205x60.png\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://cobot.me\\\">Cobot</a><span>: The one tool to run your coworking space</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://jumpstartlab.com\\\">JumpstartLab</a><span>: We build developers</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://evilmartians.com\\\">Evil Martians</a><span>: Agile Ruby on Rails development</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://zendesk.com\\\">Zendesk</a><span>: Love your helpdesk</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://stripe.com\\\">Stripe</a><span>: Payments for developers</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://basho.com\\\">Basho</a><span>: We make Riak!</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://thinkrelevance.com\\\">Relevance</a><span>: We deliver software solutions</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://mindmatters.de\\\">Mindmatters</a><span>: Software für Menschen</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://amenhq.com\\\">Amen</a><span>: The best and worst of everything</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://site5.com\\\">Site5</a><span>: Premium Web Hosting Solutions</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.crowdint.com\\\">Crowd Interactive</a><span>: Leading Rails consultancy in Mexico</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.atomicobject.com/detroit\\\">Atomic Object</a><span>: Work with really smart people</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://codeminer.com.br\\\">Codeminer</a><span>: smart services for your startup</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://cloudant.com\\\">Cloudant</a><span>: grow into your data layer, not out of it</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://gidsy.com\\\">Gidsy</a><span>: Explore, organize &amp; book unique things to do!</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://5apps.com\\\">5apps</a><span>: Package &amp; deploy HTML5 apps automatically</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://meltmedia.com\\\">Meltmedia</a><span>: We are Interactive Superheroes</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.fngtps.com\\\">Fingertips</a><span> offers design and development services</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.engineyard.com\\\">Engine Yard</a><span>: Build epic apps, let us handle the rest</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://malwarebytes.org\\\">Malwarebytes</a><span>: Defeat Malware once and for all.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://readmill.com\\\">Readmill</a><span>: The best reading app on the iPad.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.mdsol.com\\\">Medidata</a><span>: clinical tech improving quality of life</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://coderwall.com/teams/4f27194e973bf000040005f0\\\">ESM</a><span>: Japan's best agile Ruby/Rails consultancy</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://twitter.com\\\">Twitter</a><span>: instantly connects people everywhere</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://agileanimal.com\\\">AGiLE ANiMAL</a><span>: we <3 Travis CI.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://tupalo.com\\\">Tupalo</a><span>: Discover, review &amp; share local businesses.</span>\"\n    }\n  ];\n\n}).call(this);\n\n})();\n//@ sourceURL=data/sponsors");minispade.register('emoij', "(function() {(function() {\n\n  this.EmojiDictionary = ['-1', '0', '1', '109', '2', '3', '4', '5', '6', '7', '8', '8ball', '9', 'a', 'ab', 'airplane', 'alien', 'ambulance', 'angel', 'anger', 'angry', 'apple', 'aquarius', 'aries', 'arrow_backward', 'arrow_down', 'arrow_forward', 'arrow_left', 'arrow_lower_left', 'arrow_lower_right', 'arrow_right', 'arrow_up', 'arrow_upper_left', 'arrow_upper_right', 'art', 'astonished', 'atm', 'b', 'baby', 'baby_chick', 'baby_symbol', 'balloon', 'bamboo', 'bank', 'barber', 'baseball', 'basketball', 'bath', 'bear', 'beer', 'beers', 'beginner', 'bell', 'bento', 'bike', 'bikini', 'bird', 'birthday', 'black_square', 'blue_car', 'blue_heart', 'blush', 'boar', 'boat', 'bomb', 'book', 'boot', 'bouquet', 'bow', 'bowtie', 'boy', 'bread', 'briefcase', 'broken_heart', 'bug', 'bulb', 'bullettrain_front', 'bullettrain_side', 'bus', 'busstop', 'cactus', 'cake', 'calling', 'camel', 'camera', 'cancer', 'capricorn', 'car', 'cat', 'cd', 'chart', 'checkered_flag', 'cherry_blossom', 'chicken', 'christmas_tree', 'church', 'cinema', 'city_sunrise', 'city_sunset', 'clap', 'clapper', 'clock1', 'clock10', 'clock11', 'clock12', 'clock2', 'clock3', 'clock4', 'clock5', 'clock6', 'clock7', 'clock8', 'clock9', 'closed_umbrella', 'cloud', 'clubs', 'cn', 'cocktail', 'coffee', 'cold_sweat', 'computer', 'confounded', 'congratulations', 'construction', 'construction_worker', 'convenience_store', 'cool', 'cop', 'copyright', 'couple', 'couple_with_heart', 'couplekiss', 'cow', 'crossed_flags', 'crown', 'cry', 'cupid', 'currency_exchange', 'curry', 'cyclone', 'dancer', 'dancers', 'dango', 'dart', 'dash', 'de', 'department_store', 'diamonds', 'disappointed', 'dog', 'dolls', 'dolphin', 'dress', 'dvd', 'ear', 'ear_of_rice', 'egg', 'eggplant', 'egplant', 'eight_pointed_black_star', 'eight_spoked_asterisk', 'elephant', 'email', 'es', 'european_castle', 'exclamation', 'eyes', 'factory', 'fallen_leaf', 'fast_forward', 'fax', 'fearful', 'feelsgood', 'feet', 'ferris_wheel', 'finnadie', 'fire', 'fire_engine', 'fireworks', 'fish', 'fist', 'flags', 'flushed', 'football', 'fork_and_knife', 'fountain', 'four_leaf_clover', 'fr', 'fries', 'frog', 'fuelpump', 'gb', 'gem', 'gemini', 'ghost', 'gift', 'gift_heart', 'girl', 'goberserk', 'godmode', 'golf', 'green_heart', 'grey_exclamation', 'grey_question', 'grin', 'guardsman', 'guitar', 'gun', 'haircut', 'hamburger', 'hammer', 'hamster', 'hand', 'handbag', 'hankey', 'hash', 'headphones', 'heart', 'heart_decoration', 'heart_eyes', 'heartbeat', 'heartpulse', 'hearts', 'hibiscus', 'high_heel', 'horse', 'hospital', 'hotel', 'hotsprings', 'house', 'hurtrealbad', 'icecream', 'id', 'ideograph_advantage', 'imp', 'information_desk_person', 'iphone', 'it', 'jack_o_lantern', 'japanese_castle', 'joy', 'jp', 'key', 'kimono', 'kiss', 'kissing_face', 'kissing_heart', 'koala', 'koko', 'kr', 'leaves', 'leo', 'libra', 'lips', 'lipstick', 'lock', 'loop', 'loudspeaker', 'love_hotel', 'mag', 'mahjong', 'mailbox', 'man', 'man_with_gua_pi_mao', 'man_with_turban', 'maple_leaf', 'mask', 'massage', 'mega', 'memo', 'mens', 'metal', 'metro', 'microphone', 'minidisc', 'mobile_phone_off', 'moneybag', 'monkey', 'monkey_face', 'moon', 'mortar_board', 'mount_fuji', 'mouse', 'movie_camera', 'muscle', 'musical_note', 'nail_care', 'necktie', 'new', 'no_good', 'no_smoking', 'nose', 'notes', 'o', 'o2', 'ocean', 'octocat', 'octopus', 'oden', 'office', 'ok', 'ok_hand', 'ok_woman', 'older_man', 'older_woman', 'open_hands', 'ophiuchus', 'palm_tree', 'parking', 'part_alternation_mark', 'pencil', 'penguin', 'pensive', 'persevere', 'person_with_blond_hair', 'phone', 'pig', 'pill', 'pisces', 'plus1', 'point_down', 'point_left', 'point_right', 'point_up', 'point_up_2', 'police_car', 'poop', 'post_office', 'postbox', 'pray', 'princess', 'punch', 'purple_heart', 'question', 'rabbit', 'racehorse', 'radio', 'rage', 'rage1', 'rage2', 'rage3', 'rage4', 'rainbow', 'raised_hands', 'ramen', 'red_car', 'red_circle', 'registered', 'relaxed', 'relieved', 'restroom', 'rewind', 'ribbon', 'rice', 'rice_ball', 'rice_cracker', 'rice_scene', 'ring', 'rocket', 'roller_coaster', 'rose', 'ru', 'runner', 'sa', 'sagittarius', 'sailboat', 'sake', 'sandal', 'santa', 'satellite', 'satisfied', 'saxophone', 'school', 'school_satchel', 'scissors', 'scorpius', 'scream', 'seat', 'secret', 'shaved_ice', 'sheep', 'shell', 'ship', 'shipit', 'shirt', 'shit', 'shoe', 'signal_strength', 'six_pointed_star', 'ski', 'skull', 'sleepy', 'slot_machine', 'smile', 'smiley', 'smirk', 'smoking', 'snake', 'snowman', 'sob', 'soccer', 'space_invader', 'spades', 'spaghetti', 'sparkler', 'sparkles', 'speaker', 'speedboat', 'squirrel', 'star', 'star2', 'stars', 'station', 'statue_of_liberty', 'stew', 'strawberry', 'sunflower', 'sunny', 'sunrise', 'sunrise_over_mountains', 'surfer', 'sushi', 'suspect', 'sweat', 'sweat_drops', 'swimmer', 'syringe', 'tada', 'tangerine', 'taurus', 'taxi', 'tea', 'telephone', 'tennis', 'tent', 'thumbsdown', 'thumbsup', 'ticket', 'tiger', 'tm', 'toilet', 'tokyo_tower', 'tomato', 'tongue', 'top', 'tophat', 'traffic_light', 'train', 'trident', 'trophy', 'tropical_fish', 'truck', 'trumpet', 'tshirt', 'tulip', 'tv', 'u5272', 'u55b6', 'u6307', 'u6708', 'u6709', 'u6e80', 'u7121', 'u7533', 'u7a7a', 'umbrella', 'unamused', 'underage', 'unlock', 'up', 'us', 'v', 'vhs', 'vibration_mode', 'virgo', 'vs', 'walking', 'warning', 'watermelon', 'wave', 'wc', 'wedding', 'whale', 'wheelchair', 'white_square', 'wind_chime', 'wink', 'wink2', 'wolf', 'woman', 'womans_hat', 'womens', 'x', 'yellow_heart', 'zap', 'zzz'];\n\n}).call(this);\n\n})();\n//@ sourceURL=emoij");minispade.register('ext/jquery', "(function() {(function() {\n\n  $.fn.extend({\n    outerHtml: function() {\n      return $(this).wrap('<div></div>').parent().html();\n    },\n    outerElement: function() {\n      return $($(this).outerHtml()).empty();\n    },\n    flash: function() {\n      return Utils.flash(this);\n    },\n    unflash: function() {\n      return Utils.unflash(this);\n    },\n    filterLog: function() {\n      this.deansi();\n      return this.foldLog();\n    },\n    deansi: function() {\n      return this.html(Utils.deansi(this.html()));\n    },\n    foldLog: function() {\n      return this.html(Utils.foldLog(this.html()));\n    },\n    unfoldLog: function() {\n      return this.html(Utils.unfoldLog(this.html()));\n    },\n    updateTimes: function() {\n      return Utils.updateTimes(this);\n    },\n    activateTab: function(tab) {\n      return Utils.activateTab(this, tab);\n    },\n    timeInWords: function() {\n      return $(this).each(function() {\n        return $(this).text(Utils.timeInWords(parseInt($(this).attr('title'))));\n      });\n    },\n    updateGithubStats: function(repository) {\n      return Utils.updateGithubStats(repository, $(this));\n    }\n  });\n\n  $.extend({\n    isEmpty: function(obj) {\n      if ($.isArray(obj)) {\n        return !obj.length;\n      } else if ($.isObject(obj)) {\n        return !$.keys(obj).length;\n      } else {\n        return !obj;\n      }\n    },\n    isObject: function(obj) {\n      return Object.prototype.toString.call(obj) === '[object Object]';\n    },\n    keys: function(obj) {\n      var keys;\n      keys = [];\n      $.each(obj, function(key) {\n        return keys.push(key);\n      });\n      return keys;\n    },\n    values: function(obj) {\n      var values;\n      values = [];\n      $.each(obj, function(key, value) {\n        return values.push(value);\n      });\n      return values;\n    },\n    underscore: function(string) {\n      return string[0].toLowerCase() + string.substring(1).replace(/([A-Z])?/g, function(match, chr) {\n        if (chr) {\n          return \"_\" + (chr.toUpperCase());\n        } else {\n          return '';\n        }\n      });\n    },\n    camelize: function(string, uppercase) {\n      string = uppercase === false ? $.underscore(string) : $.capitalize(string);\n      return string.replace(/_(.)?/g, function(match, chr) {\n        if (chr) {\n          return chr.toUpperCase();\n        } else {\n          return '';\n        }\n      });\n    },\n    capitalize: function(string) {\n      return string[0].toUpperCase() + string.substring(1);\n    },\n    compact: function(object) {\n      return $.grep(object, function(value) {\n        return !!value;\n      });\n    },\n    all: function(array, callback) {\n      var args, i;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          return false;\n        }\n        i++;\n      }\n      return true;\n    },\n    detect: function(array, callback) {\n      var args, i;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          return array[i];\n        }\n        i++;\n      }\n    },\n    select: function(array, callback) {\n      var args, i, result;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      result = [];\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          result.push(array[i]);\n        }\n        i++;\n      }\n      return result;\n    },\n    slice: function(object, key) {\n      var keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) > -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    only: function(object) {\n      var key, keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) !== -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    except: function(object) {\n      var key, keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) === -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    intersect: function(array, other) {\n      return array.filter(function(element) {\n        return other.indexOf(element) !== -1;\n      });\n    },\n    map: function(elems, callback, arg) {\n      var i, isArray, key, length, ret, value;\n      value = void 0;\n      key = void 0;\n      ret = [];\n      i = 0;\n      length = elems.length;\n      isArray = elems instanceof jQuery || length !== void 0 && typeof length === 'number' && (length > 0 && elems[0] && elems[length - 1]) || length === 0 || jQuery.isArray(elems);\n      if (isArray) {\n        while (i < length) {\n          value = callback(elems[i], i, arg);\n          if (value != null) {\n            ret[ret.length] = value;\n          }\n          i++;\n        }\n      } else {\n        for (key in elems) {\n          value = callback(elems[key], key, arg);\n          if (value != null) {\n            ret[ret.length] = value;\n          }\n        }\n      }\n      return ret.concat.apply([], ret);\n    },\n    shuffle: function(array) {\n      var current, tmp, top;\n      array = array.slice();\n      top = array.length;\n      while (top && --top) {\n        current = Math.floor(Math.random() * (top + 1));\n        tmp = array[current];\n        array[current] = array[top];\n        array[top] = tmp;\n      }\n      return array;\n    },\n    truncate: function(string, length) {\n      if (string.length > length) {\n        return string.trim().substring(0, length) + '...';\n      } else {\n        return string;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=ext/jquery");minispade.register('travis/ajax', "(function() {(function() {\n\n  jQuery.support.cors = true;\n\n  this.Travis.Ajax = Ember.Mixin.create({\n    DEFAULT_OPTIONS: {\n      accepts: {\n        json: 'application/vnd.travis-ci.2+json'\n      }\n    },\n    post: function(url, data, callback) {\n      return this.ajax(url, 'post', {\n        data: data,\n        success: callback\n      });\n    },\n    ajax: function(url, method, options) {\n      var accessToken, endpoint, _base, _ref;\n      endpoint = Travis.config.api_endpoint || '';\n      options = options || {};\n      if (accessToken = (_ref = Travis.app) != null ? _ref.get('auth.accessToken') : void 0) {\n        options.headers || (options.headers = {});\n        (_base = options.headers)['Authorization'] || (_base['Authorization'] = \"token \" + accessToken);\n      }\n      options.url = \"\" + endpoint + url;\n      options.type = method;\n      options.dataType = 'json';\n      options.contentType = 'application/json; charset=utf-8';\n      options.context = this;\n      if (options.data && method !== 'GET' && method !== 'get') {\n        options.data = JSON.stringify(options.data);\n      }\n      return $.ajax($.extend(options, this.DEFAULT_OPTIONS));\n    }\n  });\n\n  this.Travis.ajax = Em.Object.create(this.Travis.Ajax, {\n    get: function(url, callback) {\n      return this.ajax(url, 'get', {\n        success: callback\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ajax");minispade.register('travis/expandable_record_array', "(function() {(function() {\n\n  Travis.ExpandableRecordArray = DS.RecordArray.extend({\n    isLoaded: false,\n    isLoading: false,\n    load: function(array) {\n      var observer, self;\n      this.set('isLoading', true);\n      self = this;\n      observer = function() {\n        var content;\n        if (this.get('isLoaded')) {\n          content = self.get('content');\n          array.removeObserver('isLoaded', observer);\n          array.forEach(function(record) {\n            return self.pushObject(record);\n          });\n          self.set('isLoading', false);\n          return self.set('isLoaded', true);\n        }\n      };\n      return array.addObserver('isLoaded', observer);\n    },\n    pushObject: function(record) {\n      var clientId, id, ids;\n      ids = this.get('content');\n      id = record.get('id');\n      clientId = record.get('clientId');\n      if (ids.contains(clientId)) {\n        return;\n      }\n      return ids.pushObject(clientId);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/expandable_record_array");minispade.register('travis/log', "(function() {(function() {\n\n  this.Travis.Log = {\n    FOLDS: {\n      schema: /(<p.*?\\/a>\\$ (?:bundle exec )?rake( db:create)? db:schema:load[\\s\\S]*?<p.*?\\/a>-- assume_migrated_upto_version[\\s\\S]*?<\\/p>\\n<p.*?\\/a>.*<\\/p>)/g,\n      migrate: /(<p.*?\\/a>\\$ (?:bundle exec )?rake( db:create)? db:migrate[\\s\\S]*== +\\w+: migrated \\(.*\\) =+)/g,\n      bundle: /(<p.*?\\/a>\\$ bundle install.*<\\/p>\\n(<p.*?\\/a>(Updating|Using|Installing|Fetching|remote:|Receiving|Resolving).*?<\\/p>\\n|<p.*?\\/a><\\/p>\\n)*)/g,\n      exec: /(<p.*?\\/a>[\\/\\w]*.rvm\\/rubies\\/[\\S]*?\\/(ruby|rbx|jruby) .*?<\\/p>)/g\n    },\n    filter: function(log) {\n      log = this.escape(log);\n      log = this.deansi(log);\n      log = log.replace(/\\r/g, '');\n      log = this.number(log);\n      log = this.fold(log);\n      log = log.replace(/\\n/g, '');\n      return log;\n    },\n    stripPaths: function(log) {\n      return log.replace(/\\/home\\/vagrant\\/builds(\\/[^\\/\\n]+){2}\\//g, '');\n    },\n    escape: function(log) {\n      return Handlebars.Utils.escapeExpression(log);\n    },\n    escapeRuby: function(log) {\n      return log.replace(/#<(\\w+.*?)>/, '#&lt;$1&gt;');\n    },\n    number: function(log) {\n      var result;\n      result = '';\n      $.each(log.trim().split('\\n'), function(ix, line) {\n        var number, path;\n        number = ix + 1;\n        path = Travis.Log.location().substr(1).replace(/\\/L\\d+/, '') + '/L' + number;\n        return result += '<p><a href=\\'#%@\\' id=\\'%@\\' name=\\'L%@\\'>%@</a>%@</p>\\n'.fmt(path, path, number, number, line);\n      });\n      return result.trim();\n    },\n    deansi: function(log) {\n      var ansi, text;\n      log = log.replace(/\\r\\r/g, '\\r').replace(/\\033\\[K\\r/g, '\\r').replace(/^.*\\r(?!$)/gm, '').replace(/\u001b\\[2K/g, '').replace(/\\033\\(B/g, \"\");\n      ansi = ansiparse(log);\n      text = '';\n      ansi.forEach(function(part) {\n        var classes;\n        classes = [];\n        part.foreground && classes.push(part.foreground);\n        part.background && classes.push('bg-' + part.background);\n        part.bold && classes.push('bold');\n        part.italic && classes.push('italic');\n        return text += (classes.length ? '<span class=\\'' + classes.join(' ') + '\\'>' + part.text + '</span>' : part.text);\n      });\n      return text.replace(/\\033/g, '');\n    },\n    fold: function(log) {\n      log = this.unfold(log);\n      $.each(Travis.Log.FOLDS, function(name, pattern) {\n        return log = log.replace(pattern, function() {\n          return '<div class=\\'fold ' + name + '\\'>' + arguments[1].trim() + '</div>';\n        });\n      });\n      return log;\n    },\n    unfold: function(log) {\n      return log.replace(/<div class='fold[^']*'>([\\s\\S]*?)<\\/div>/g, '$1\\n');\n    },\n    location: function() {\n      return window.location.hash;\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/log");minispade.register('travis/model', "(function() {(function() {\n\n  this.Travis.Model = DS.Model.extend({\n    primaryKey: 'id',\n    id: DS.attr('number'),\n    refresh: function() {\n      var id;\n      id = this.get('id');\n      if (id) {\n        return Travis.app.store.adapter.find(Travis.app.store, this.constructor, id);\n      }\n    },\n    update: function(attrs) {\n      var _this = this;\n      $.each(attrs, function(key, value) {\n        if (key !== 'id') {\n          return _this.set(key, value);\n        }\n      });\n      return this;\n    }\n  });\n\n  this.Travis.Model.reopenClass({\n    find: function() {\n      if (arguments.length === 0) {\n        return Travis.app.store.findAll(this);\n      } else {\n        return this._super.apply(this, arguments);\n      }\n    },\n    filter: function(callback) {\n      return Travis.app.store.filter(this, callback);\n    },\n    load: function(attrs) {\n      return Travis.app.store.load(this, attrs);\n    },\n    buildURL: function(suffix) {\n      var base, url;\n      base = this.url || this.pluralName();\n      Ember.assert('Base URL (' + base + ') must not start with slash', !base || base.toString().charAt(0) !== '/');\n      Ember.assert('URL suffix (' + suffix + ') must not start with slash', !suffix || suffix.toString().charAt(0) !== '/');\n      url = [base];\n      if (suffix !== void 0) {\n        url.push(suffix);\n      }\n      return url.join('/');\n    },\n    singularName: function() {\n      var name, parts;\n      parts = this.toString().split('.');\n      name = parts[parts.length - 1];\n      return name.replace(/([A-Z])/g, '_$1').toLowerCase().slice(1);\n    },\n    pluralName: function() {\n      return Travis.app.store.adapter.pluralize(this.singularName());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/model");minispade.register('travis/ticker', "(function() {(function() {\n\n  this.Travis.Ticker = Ember.Object.extend({\n    init: function() {\n      if (this.get('interval') !== -1) {\n        return this.schedule();\n      }\n    },\n    tick: function() {\n      var context, target, targets, _i, _len;\n      context = this.get('context');\n      targets = this.get('targets') || [this.get('target')];\n      for (_i = 0, _len = targets.length; _i < _len; _i++) {\n        target = targets[_i];\n        if (context) {\n          target = context.get(target);\n        }\n        if (target) {\n          target.tick();\n        }\n      }\n      return this.schedule();\n    },\n    schedule: function() {\n      var _this = this;\n      return Ember.run.later((function() {\n        return _this.tick();\n      }), this.get('interval') || Travis.app.TICK_INTERVAL);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ticker");minispade.register('travis', "(function() {(function() {\nminispade.require('ext/jquery');\nminispade.require('ext/ember/namespace');\n\n  this.Travis = Em.Namespace.create({\n    config: {\n      api_endpoint: $('meta[rel=\"travis.api_endpoint\"]').attr('href')\n    },\n    CONFIG_KEYS: ['rvm', 'gemfile', 'env', 'jdk', 'otp_release', 'php', 'node_js', 'perl', 'python', 'scala'],\n    ROUTES: {\n      'profile/:login/me': ['profile', 'user'],\n      'profile/:login': ['profile', 'hooks'],\n      'profile': ['profile', 'hooks'],\n      'stats': ['stats', 'show'],\n      ':owner/:name/jobs/:id/:line': ['home', 'job'],\n      ':owner/:name/jobs/:id': ['home', 'job'],\n      ':owner/:name/builds/:id': ['home', 'build'],\n      ':owner/:name/builds': ['home', 'builds'],\n      ':owner/:name/pull_requests': ['home', 'pullRequests'],\n      ':owner/:name/branches': ['home', 'branches'],\n      ':owner/:name': ['home', 'current'],\n      '': ['home', 'index'],\n      '#': ['home', 'index']\n    },\n    QUEUES: [\n      {\n        name: 'common',\n        display: 'Common'\n      }, {\n        name: 'php',\n        display: 'PHP, Perl and Python'\n      }, {\n        name: 'node_js',\n        display: 'Node.js'\n      }, {\n        name: 'jvmotp',\n        display: 'JVM and Erlang'\n      }, {\n        name: 'rails',\n        display: 'Rails'\n      }, {\n        name: 'spree',\n        display: 'Spree'\n      }\n    ],\n    INTERVALS: {\n      sponsors: -1,\n      times: -1,\n      updateTimes: 1000\n    },\n    run: function(attrs) {\n      var _this = this;\n      if (location.hash.slice(0, 2) === '#!') {\n        location.href = location.href.replace('#!/', '');\n      }\n      return this.loadConfig(function(config) {\n        var app;\n        app = Travis.App.create(attrs || {});\n        $.each(Travis, function(key, value) {\n          if (value && value.isClass && key !== 'constructor') {\n            return app[key] = value;\n          }\n        });\n        _this.app = app;\n        _this.store = app.store;\n        return $(function() {\n          return app.initialize();\n        });\n      });\n    },\n    loadConfig: function(callback) {\n      var _this = this;\n      return this.ajax.get('/config', function(data) {\n        $.extend(_this.config, data.config);\n        console.log(\"Connecting to \" + data.config.api_endpoint);\n        return callback(data.config);\n      });\n    }\n  });\nminispade.require('travis/ajax');\nminispade.require('app');\n\n}).call(this);\n\n})();\n//@ sourceURL=travis");minispade.register('templates', "(function() {\nEmber.TEMPLATES['application'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression;\n\n\n  stack1 = helpers._triageMustache.call(depth0, \"outlet\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['builds/list'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n  <table id=\\\"builds\\\" class=\\\"list\\\">\\n    <thead>\\n      <tr>\\n        <th>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.name\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.name\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</th>\\n        <th>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.commit\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.commit\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</th>\\n        <th>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.message\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.message\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</th>\\n        <th>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</th>\\n        <th>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.finished_at\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.finished_at\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</th>\\n      </tr>\\n    </thead>\\n\\n    <tbody>\\n      \");\n  stack1 = helpers.each.call(depth0, \"build\", \"in\", \"builds\", {hash:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </tbody>\\n  </table>\\n  <p>\\n    \");\n  stack1 = helpers.view.call(depth0, \"view.ShowMoreButton\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </p>\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        \");\n  stack1 = {};\n  stack1['contextBinding'] = \"build\";\n  stack1 = helpers.view.call(depth0, \"Travis.BuildsItemView\", {hash:stack1,inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n      \");\n  return buffer;}\nfunction program3(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n          <td class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            \");\n  stack1 = helpers['if'].call(depth0, \"id\", {hash:{},inverse:self.noop,fn:self.program(4, program4, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          </td>\\n          <td class=\\\"commit\\\">\\n            <a \");\n  stack1 = {};\n  stack1['href'] = \"view.urlGithubCommit\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n              \");\n  foundHelper = helpers.formatCommit;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"commit\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatCommit\", \"commit\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n            </a>\\n          </td>\\n          <td class=\\\"message\\\">\\n            \");\n  stack1 = {};\n  stack1['short'] = \"true\";\n  foundHelper = helpers.formatMessage;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"commit.message\", {hash:stack1,contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatMessage\", \"commit.message\", {hash:stack1,contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          </td>\\n          <td class=\\\"duration\\\" \");\n  stack1 = {};\n  stack1['title'] = \"duration\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            \");\n  foundHelper = helpers.formatDuration;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatDuration\", \"duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </td>\\n          <td class=\\\"finished_at timeago\\\" \");\n  stack1 = {};\n  stack1['title'] = \"finishedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            \");\n  foundHelper = helpers.formatTime;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"finishedAt\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatTime\", \"finishedAt\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </td>\\n        \");\n  return buffer;}\nfunction program4(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n              <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showBuild\", \"\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n                \");\n  stack1 = helpers._triageMustache.call(depth0, \"number\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n              </a>\\n            \");\n  return buffer;}\n\nfunction program6(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n  <div class=\\\"loading\\\"><span>Loading</span></div>\\n\");}\n\n  stack1 = helpers['if'].call(depth0, \"builds.isLoaded\", {hash:{},inverse:self.program(6, program6, data),fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['builds/show'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n  \");\n  stack1 = helpers['if'].call(depth0, \"loading\", {hash:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n    <span>Loading</span>\\n  \");}\n\nfunction program4(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n    <dl id=\\\"summary\\\">\\n      <div class=\\\"left\\\">\\n        <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.name\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.name\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n        <dd class=\\\"number\\\">\\n          <span class=\\\"status\\\"></span>\\n          \");\n  stack1 = helpers['if'].call(depth0, \"build.id\", {hash:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n        </dd>\\n        <dt class=\\\"finished_at_label\\\">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.finished_at\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.finished_at\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n        <dd class=\\\"finished_at timeago\\\" \");\n  stack1 = {};\n  stack1['title'] = \"finishedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.formatTime;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"build.finishedAt\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatTime\", \"build.finishedAt\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dd>\\n        <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n        <dd class=\\\"duration\\\" \");\n  stack1 = {};\n  stack1['title'] = \"startedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.formatDuration;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"build.duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatDuration\", \"build.duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dd>\\n      </div>\\n\\n      <div class=\\\"right\\\">\\n        <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.commit\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.commit\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n        <dd class=\\\"commit\\\"><a href=\\\"\");\n  stack1 = helpers.unbound.call(depth0, \"urlGithubCommit\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\\">\");\n  foundHelper = helpers.formatCommit;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"build.commit\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatCommit\", \"build.commit\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n        \");\n  stack1 = helpers['if'].call(depth0, \"commit.compareUrl\", {hash:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n        \");\n  stack1 = helpers['if'].call(depth0, \"commit.authorName\", {hash:{},inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n        \");\n  stack1 = helpers['if'].call(depth0, \"commit.committerName\", {hash:{},inverse:self.noop,fn:self.program(11, program11, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n      </div>\\n\\n      <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.message\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.message\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n      <dd class=\\\"message\\\">\");\n  foundHelper = helpers.formatMessage;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"build.commit.message\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatMessage\", \"build.commit.message\", {hash:{},contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"</dd>\\n\\n      \");\n  stack1 = helpers.unless.call(depth0, \"isMatrix\", {hash:{},inverse:self.noop,fn:self.program(13, program13, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </dl>\\n\\n    \");\n  stack1 = helpers['if'].call(depth0, \"build.isMatrix\", {hash:{},inverse:self.program(17, program17, data),fn:self.program(15, program15, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n  \");\n  return buffer;}\nfunction program5(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n            <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showBuild\", \"build\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"build.number\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n          \");\n  return buffer;}\n\nfunction program7(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n          <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.compare\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.compare\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n          <dd class=\\\"compare\\\"><a href=\\\"\");\n  stack1 = helpers.unbound.call(depth0, \"commit.compareUrl\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\\">\");\n  foundHelper = helpers.pathFrom;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"build.commit.compareUrl\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"pathFrom\", \"build.commit.compareUrl\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n        \");\n  return buffer;}\n\nfunction program9(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n          <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.author\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.author\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n          <dd class=\\\"author\\\"><a href=\\\"\");\n  stack1 = helpers.unbound.call(depth0, \"urlAuthor\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"build.commit.authorName\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n        \");\n  return buffer;}\n\nfunction program11(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n          <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.committer\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.committer\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n          <dd class=\\\"committer\\\"><a href=\\\"\");\n  stack1 = helpers.unbound.call(depth0, \"urlCommitter\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"build.commit.committerName\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n        \");\n  return buffer;}\n\nfunction program13(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n        <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.config\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.config\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n        <dd class=\\\"config\\\">\");\n  foundHelper = helpers.formatConfig;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"build.config\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatConfig\", \"build.config\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dd>\\n      \");\n  return buffer;}\n\nfunction program15(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n      \");\n  stack1 = {};\n  stack1['jobsBinding'] = \"build.requiredJobs\";\n  stack1['required'] = \"true\";\n  stack1 = helpers.view.call(depth0, \"Travis.JobsView\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      \");\n  stack1 = {};\n  stack1['jobsBinding'] = \"build.allowedFailureJobs\";\n  stack1 = helpers.view.call(depth0, \"Travis.JobsView\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n    \");\n  return buffer;}\n\nfunction program17(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n      \");\n  stack1 = {};\n  stack1['contextBinding'] = \"build.jobs.firstObject\";\n  stack1 = helpers.view.call(depth0, \"Travis.LogView\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n    \");\n  return buffer;}\n\n  stack1 = helpers['with'].call(depth0, \"view\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['jobs/list'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n  \");\n  stack1 = helpers['if'].call(depth0, \"view.required\", {hash:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    <thead>\\n      <tr>\\n        \");\n  stack1 = helpers.each.call(depth0, \"key\", \"in\", \"view.build.configKeys\", {hash:{},inverse:self.noop,fn:self.program(6, program6, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n      </tr>\\n    </thead>\\n    <tbody>\\n      \");\n  stack1 = helpers.each.call(depth0, \"job\", \"in\", \"view.jobs\", {hash:{},inverse:self.noop,fn:self.program(8, program8, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </tbody>\\n  </table>\\n\\n  \");\n  stack1 = helpers.unless.call(depth0, \"view.required\", {hash:{},inverse:self.noop,fn:self.program(14, program14, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n    <table id=\\\"jobs\\\" class=\\\"list\\\">\\n      <caption>\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.build_matrix\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.build_matrix\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      </caption>\\n  \");\n  return buffer;}\n\nfunction program4(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n    <table id=\\\"allowed_failure_jobs\\\" class=\\\"list\\\">\\n      <caption>\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.allowed_failures\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.allowed_failures\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n        <a title=\\\"What's this?\\\" class=\\\"help\\\" name=\\\"help-allowed_failures\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"popup\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"></a>\\n      </caption>\\n  \");\n  return buffer;}\n\nfunction program6(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n          <th>\");\n  stack1 = helpers._triageMustache.call(depth0, \"key\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</th>\\n        \");\n  return buffer;}\n\nfunction program8(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        \");\n  stack1 = {};\n  stack1['contextBinding'] = \"job\";\n  stack1 = helpers.view.call(depth0, \"Travis.JobsItemView\", {hash:stack1,inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n      \");\n  return buffer;}\nfunction program9(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n          <td class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            \");\n  stack1 = helpers['if'].call(depth0, \"job.id\", {hash:{},inverse:self.noop,fn:self.program(10, program10, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          </td>\\n          <td class=\\\"duration\\\" \");\n  stack1 = {};\n  stack1['title'] = \"startedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            \");\n  foundHelper = helpers.formatDuration;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatDuration\", \"duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </td>\\n          <td class=\\\"finished_at timeago\\\" \");\n  stack1 = {};\n  stack1['title'] = \"finishedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            \");\n  foundHelper = helpers.formatTime;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"finishedAt\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatTime\", \"finishedAt\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </td>\\n          \");\n  stack1 = helpers.each.call(depth0, \"value\", \"in\", \"configValues\", {hash:{},inverse:self.noop,fn:self.program(12, program12, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n        \");\n  return buffer;}\nfunction program10(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n              <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showJob\", \"repository\", \"job\", {hash:stack1,contexts:[depth0,depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"number\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n            \");\n  return buffer;}\n\nfunction program12(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n            <td>\");\n  stack1 = helpers._triageMustache.call(depth0, \"value\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</td>\\n          \");\n  return buffer;}\n\nfunction program14(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n    <div id=\\\"help-allowed_failures\\\" class=\\\"popup\\\">\\n      <h4>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.allowed_failures\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.allowed_failures\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</h4>\\n      <p>\\n        Allowed Failures are items in your build matrix that are allowed to\\n        fail without causing the entire build to be shown as failed.\\n      </p>\\n      <p>\\n        You can define allowed failures in the build matrix as follows:\\n      </p>\\n      <pre>matrix:\\n  allow_failures:\\n    - rvm: ruby-head</pre>\\n      <p>\\n        This lets you add in experimental and preparatory builds to test against versions or\\n        configurations that you are not ready to officially support.\\n      </p>\\n    </div>\\n  \");\n  return buffer;}\n\n  stack1 = helpers['if'].call(depth0, \"view.jobs.length\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['jobs/log'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n  <pre id=\\\"log\\\" class=\\\"ansi\\\"><a href=\\\"#\\\" id=\\\"tail\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"toggleTailing\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <span class=\\\"status\\\"></span>\\n    <label>Follow logs</label>\\n  </a>\");\n  foundHelper = helpers.formatLog;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"log.body\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatLog\", \"log.body\", {hash:{},contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"</pre>\\n\\n  \");\n  stack1 = helpers['if'].call(depth0, \"sponsor.name\", {hash:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n  <a href='#' class=\\\"to-top\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"toTop\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">To top</a>\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n    <p class=\\\"sponsor\\\">\\n    \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"builds.messages.sponsored_by\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"builds.messages.sponsored_by\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      <a \");\n  stack1 = {};\n  stack1['href'] = \"sponsor.url\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"sponsor.name\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n    </p>\\n  \");\n  return buffer;}\n\nfunction program4(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n  <div id=\\\"log\\\" class=\\\"loading\\\">\\n    <span>Loading</span>\\n  </div>\\n\");}\n\n  stack1 = helpers._triageMustache.call(depth0, \"view.logSubscriber\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\\n\");\n  stack1 = helpers['if'].call(depth0, \"log.isLoaded\", {hash:{},inverse:self.program(4, program4, data),fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['jobs/show'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n  \");\n  stack1 = helpers['if'].call(depth0, \"job.isLoaded\", {hash:{},inverse:self.program(11, program11, data),fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n    <div \");\n  stack1 = {};\n  stack1['class'] = \"view.color\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n      <dl id=\\\"summary\\\">\\n        <div class=\\\"left\\\">\\n          <dt>Job</dt>\\n          <dd class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            \");\n  stack1 = helpers['if'].call(depth0, \"job.id\", {hash:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          </dd>\\n          <dt class=\\\"finished_at_label\\\">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.finished_at\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.finished_at\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n          <dd class=\\\"finished_at timeago\\\" \");\n  stack1 = {};\n  stack1['title'] = \"finishedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.formatTime;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"job.finishedAt\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatTime\", \"job.finishedAt\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dd>\\n          <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n          <dd class=\\\"duration\\\" \");\n  stack1 = {};\n  stack1['title'] = \"startedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.formatDuration;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"job.duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatDuration\", \"job.duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dd>\\n        </div>\\n\\n        <div class=\\\"right\\\">\\n          <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.commit\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.commit\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n          <dd class=\\\"commit\\\"><a \");\n  stack1 = {};\n  stack1['href'] = \"urlGithubCommit\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.formatCommit;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"commit\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatCommit\", \"commit\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n          \");\n  stack1 = helpers['if'].call(depth0, \"commit.compareUrl\", {hash:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          \");\n  stack1 = helpers['if'].call(depth0, \"commit.authorName\", {hash:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          \");\n  stack1 = helpers['if'].call(depth0, \"commit.committerName\", {hash:{},inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n        </div>\\n\\n        <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.message\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.message\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n        <dd class=\\\"message\\\">\");\n  foundHelper = helpers.formatMessage;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"commit.message\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatMessage\", \"commit.message\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dd>\\n        <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.config\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.config\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n        <dd class=\\\"config\\\">\");\n  foundHelper = helpers.formatConfig;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"job.config\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatConfig\", \"job.config\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dd>\\n      </dl>\\n\\n      \");\n  stack1 = {};\n  stack1['contextBinding'] = \"job\";\n  stack1 = helpers.view.call(depth0, \"Travis.LogView\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n    </div>\\n  \");\n  return buffer;}\nfunction program3(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n              <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showJob\", \"repository\", \"job\", {hash:stack1,contexts:[depth0,depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"job.number\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n            \");\n  return buffer;}\n\nfunction program5(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n            <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.compare\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.compare\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n            <dd class=\\\"compare\\\"><a \");\n  stack1 = {};\n  stack1['href'] = \"commit.compareUrl\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.pathFrom;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"commit.compareUrl\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"pathFrom\", \"commit.compareUrl\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n          \");\n  return buffer;}\n\nfunction program7(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n            <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.author\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.author\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n            <dd class=\\\"author\\\"><a \");\n  stack1 = {};\n  stack1['href'] = \"urlAuthor\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"commit.authorName\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n          \");\n  return buffer;}\n\nfunction program9(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n            <dt>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"jobs.committer\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"jobs.committer\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</dt>\\n            <dd class=\\\"committer\\\"><a \");\n  stack1 = {};\n  stack1['href'] = \"urlCommitter\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"commit.committerName\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></dd>\\n          \");\n  return buffer;}\n\nfunction program11(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n    <div id=\\\"job\\\" class=\\\"loading\\\">\\n      <span>Loading</span>\\n    </div>\\n  \");}\n\n  stack1 = helpers['with'].call(depth0, \"view\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['layouts/home'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n  data.buffer.push(\"<div id=\\\"top\\\">\\n  \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"top\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"top\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"left\\\">\\n    \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"left\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"left\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </div>\\n\\n  <div id=\\\"main\\\">\\n    \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"main\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"main\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </div>\\n\\n  <div id=\\\"right\\\">\\n    \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"right\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"right\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </div>\\n</div>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['layouts/profile'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n  data.buffer.push(\"<div id=\\\"top\\\">\\n  \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"top\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"top\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"left\\\">\\n    \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"left\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"left\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </div>\\n\\n  <div id=\\\"main\\\">\\n    \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"main\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"main\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </div>\\n\\n  <div id=\\\"right\\\">\\n    <a id=\\\"github\\\" href=\\\"https://github.com/travis-ci\\\" title=\\\"Fork me on GitHub\\\">\\n      \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.fork_me\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.fork_me\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n    </a>\\n\\n    <div id=\\\"slider\\\" \");\n  stack1 = {};\n  stack1['target'] = \"Travis.app.slider\";\n  stack1 = helpers.action.call(depth0, \"toggle\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n      <div class='icon'></div>&nbsp;\\n    </div>\\n\\n    <div class=\\\"box\\\">\\n      <h4>Getting started?</h4>\\n      <p>\\n        Please read our <a href=\\\"http://about.travis-ci.org/docs/user/getting-started\\\">guide</a>.\\n        It will only take a few minutes :)\\n      </p>\\n      <p>\\n        You can find detailled docs on our <a href=\\\"http://about.travis-ci.org/\\\">about</a> site.\\n      </p>\\n      <p>\\n        If you need help please don't hesitate to join\\n        <a href=\\\"irc://irc.freenode.net#travis\\\">#travis</a> on irc.freenode.net\\n        or our <a href=\\\"http://groups.google.com/group/travis-ci\\\">mailinglist</a>.\\n      </p>\\n    </div>\\n  </div>\\n</div>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['layouts/sidebar'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n  data.buffer.push(\"<a id=\\\"github\\\" href=\\\"https://github.com/travis-ci\\\" title=\\\"Fork me on GitHub\\\">\\n  \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.fork_me\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.fork_me\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n</a>\\n\\n<div id=\\\"slider\\\" \");\n  stack1 = {};\n  stack1['target'] = \"Travis.app.slider\";\n  stack1 = helpers.action.call(depth0, \"toggle\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n  <div class='icon'></div>&nbsp;\\n</div>\\n\\n\");\n  stack1 = helpers.view.call(depth0, \"view.DecksView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\");\n  stack1 = helpers.view.call(depth0, \"view.WorkersView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\");\n  stack1 = helpers.view.call(depth0, \"view.QueuesView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\");\n  stack1 = helpers.view.call(depth0, \"view.LinksView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\\n<div id=\\\"about\\\" class=\\\"box\\\">\\n  <h4>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.about.join\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.about.join\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</h4>\\n  <ul>\\n    <li>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.about.repository\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.about.repository\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \": <a href=\\\"http://github.com/travis-ci\\\">Github</a></li>\\n    <li>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.about.twitter\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.about.twitter\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \": <a href=\\\"http://twitter.com/travisci\\\">@travisci</a></li>\\n    <li>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.about.mailing_list\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.about.mailing_list\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \": <a href=\\\"http://groups.google.com/group/travis-ci\\\">travis-ci</a></li>\\n    <li><a href=\\\"irc://irc.freenode.net#travis\\\">irc.freenode.net#travis</a></li>\\n  </ul>\\n</div>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['layouts/simple'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n  data.buffer.push(\"<div id=\\\"top\\\">\\n  \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"top\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"top\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"main\\\">\\n    \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"main\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"main\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </div>\\n</div>\\n\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['layouts/top'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n  data.buffer.push(\"<a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"goToRoot\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n  <h1>Travis</h1>\\n</a>\\n\\n<ul id=\\\"navigation\\\">\\n  <li \");\n  stack1 = {};\n  stack1['class'] = \"view.classHome\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"goToRoot\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">Home</a>\\n  </li>\\n  <li \");\n  stack1 = {};\n  stack1['class'] = \"view.classStats\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"goToStats\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">Stats</a>\\n  </li>\\n  <li>\\n    <a href=\\\"http://about.travis-ci.org/blog\\\">Blog</a>\\n  </li>\\n  <li>\\n    <a href=\\\"http://about.travis-ci.org/docs\\\">Docs</a>\\n  </li>\\n  <li \");\n  stack1 = {};\n  stack1['class'] = \"view.classProfile\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <p class=\\\"handle\\\">\\n      <a class=\\\"signed-out\\\" href=\\\"#\\\" \");\n  stack1 = {};\n  stack1['target'] = \"Travis.app\";\n  stack1 = helpers.action.call(depth0, \"signIn\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.top.github_login\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.top.github_login\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n      <a class=\\\"signed-in\\\" \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showProfile\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"><img \");\n  stack1 = {};\n  stack1['src'] = \"view.gravatarUrl\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"user.name\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n      <span class=\\\"signing-in\\\">Signing in</span>\\n    </p>\\n    <ul>\\n      <li>\\n        <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showProfile\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.top.profile\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.top.profile\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n      </li>\\n      <li>\\n        <a href=\\\"/\\\" \");\n  stack1 = {};\n  stack1['target'] = \"Travis.app\";\n  stack1 = helpers.action.call(depth0, \"signOut\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.top.sign_out\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.top.sign_out\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n      </li>\\n    </ul>\\n  </li>\\n</ul>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['profile/accounts'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n    <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showAccount\", \"view.account\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" class=\\\"name\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"view.name\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n    <p class=\\\"summary\\\">\\n      <span class=\\\"repos_label\\\">Repositories:</span>\\n      <abbr class=\\\"repos\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"view.content.reposCount\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</abbr>\\n    </p>\\n  \");\n  return buffer;}\n\n  data.buffer.push(\"<div id=\\\"search_box\\\">\\n</div>\\n\\n<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_accounts\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classAccounts\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5><a name=\\\"accounts\\\" href=\\\"\\\">Accounts</a></h5>\\n  </li>\\n</ul>\\n\\n<div class=\\\"tab\\\">\\n  \");\n  stack1 = {};\n  stack1['contentBinding'] = \"controller\";\n  foundHelper = helpers.collection;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"Travis.AccountsListView\", {hash:stack1,inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data}) : helperMissing.call(depth0, \"collection\", \"Travis.AccountsListView\", {hash:stack1,inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n</div>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['profile/show'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n  data.buffer.push(\"<h3>\");\n  stack1 = helpers._triageMustache.call(depth0, \"view.name\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</h3>\\n\\n\");\n  stack1 = helpers.view.call(depth0, \"Travis.ProfileTabsView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\\n<div class=\\\"tab\\\">\\n  \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"pane\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"pane\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n</div>\\n\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['profile/tabs'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n    <li id=\\\"tab_user\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classUser\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n      <h5>\\n        <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showUserProfile\", \"view.account\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">Profile</a>\\n      </h5>\\n    </li>\\n  \");\n  return buffer;}\n\n  data.buffer.push(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_hooks\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classHooks\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5>\\n      <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showAccount\", \"view.account\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">Repositories</a>\\n    </h5>\\n  </li>\\n  \");\n  stack1 = helpers['if'].call(depth0, \"view.displayUser\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n</ul>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['profile/tabs/hooks'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n  \");\n  stack1 = helpers['if'].call(depth0, \"user.isSyncing\", {hash:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n    <p class=\\\"message loading\\\">\\n      <span>Please wait while we sync from GitHub</span>\\n    </p>\\n  \");}\n\nfunction program4(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n    <p class=\\\"message\\\">\\n      Last synchronized from GitHub: \");\n  foundHelper = helpers.formatTime;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"user.syncedAt\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatTime\", \"user.syncedAt\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      <button class=\\\"sync_now\\\" \");\n  stack1 = {};\n  stack1['target'] = \"user\";\n  stack1 = helpers.action.call(depth0, \"sync\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        Sync now\\n      </button>\\n    </p>\\n\\n    <ul id=\\\"hooks\\\">\\n      \");\n  stack1 = helpers.each.call(depth0, \"hook\", \"in\", \"hooks\", {hash:{},inverse:self.program(7, program7, data),fn:self.program(5, program5, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </ul>\\n  \");\n  return buffer;}\nfunction program5(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        <li \");\n  stack1 = {};\n  stack1['class'] = \"hook.active:active\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n          <a \");\n  stack1 = {};\n  stack1['href'] = \"hook.urlGithub\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" rel=\\\"nofollow\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"hook.slug\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n          <p class=\\\"description\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"hook.description\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</p>\\n\\n          <div class=\\\"controls\\\">\\n            <a \");\n  stack1 = {};\n  stack1['href'] = \"hook.urlGithubAdmin\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" class=\\\"github-admin tool-tip\\\" title=\\\"Github service hooks admin page\\\"></a>\\n            <a \");\n  stack1 = {};\n  stack1['target'] = \"hook\";\n  stack1 = helpers.action.call(depth0, \"toggle\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" class=\\\"switch\\\"></a>\\n          </div>\\n        </li>\\n      \");\n  return buffer;}\n\nfunction program7(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n        <li>\\n          You do not seem to have any repositories that we could sync.\\n        </li>\\n      \");}\n\nfunction program9(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n  <p class=\\\"message loading\\\">\\n    <span>Loading</span>\\n  </p>\\n\");}\n\n  data.buffer.push(\"<p class=\\\"tip\\\">\\n  \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"profiles.show.message.your_repos\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"profiles.show.message.your_repos\", {hash:{},contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n</p>\\n\\n\");\n  stack1 = helpers['if'].call(depth0, \"hooks.isLoaded\", {hash:{},inverse:self.program(9, program9, data),fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['profile/tabs/user'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n  data.buffer.push(\"<img \");\n  stack1 = {};\n  stack1['src'] = \"view.gravatarUrl\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n\\n<dl class=\\\"profile\\\">\\n  <dt>\\n    \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"profiles.show.github\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"profiles.show.github\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":\\n  </dt>\\n  <dd>\\n    <a \");\n  stack1 = {};\n  stack1['href'] = \"urlGithub\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"user.login\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n  </dd>\\n  <dt>\\n    \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"profiles.show.email\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"profiles.show.email\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":\\n  </dt>\\n  <dd>\\n    \");\n  stack1 = helpers._triageMustache.call(depth0, \"user.email\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </dd>\\n  <dt>\\n    \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"profiles.show.token\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"profiles.show.token\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":\\n  </dt>\\n  <dd>\\n    \");\n  stack1 = helpers._triageMustache.call(depth0, \"user.token\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </dd>\\n</dl>\\n\\n<form>\\n  \");\n  stack1 = {};\n  stack1['id'] = \"locale\";\n  stack1['contentBinding'] = \"view.locales\";\n  stack1['valueBinding'] = \"Travis.app.currentUser.locale\";\n  stack1['optionLabelPath'] = \"content.name\";\n  stack1['optionValuePath'] = \"content.key\";\n  stack1 = helpers.view.call(depth0, \"Ember.Select\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\\n  <button name=\\\"commit\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"saveLocale\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"profiles.show.update_locale\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"profiles.show.update_locale\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </button>\\n</form>\\n\\n\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['queues/list'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n  <li class=\\\"queue\\\">\\n    <h4>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"queue\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"queue\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \": \");\n  stack1 = helpers._triageMustache.call(depth0, \"queue.name\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</h4>\\n    <ul \");\n  stack1 = {};\n  stack1['id'] = \"queue.id\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n      \");\n  stack1 = helpers.each.call(depth0, \"job\", \"in\", \"queue\", {hash:{},inverse:self.program(5, program5, data),fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </ul>\\n  </li>\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        \");\n  stack1 = {};\n  stack1['jobBinding'] = \"job\";\n  stack1 = helpers.view.call(depth0, \"Travis.QueueItemView\", {hash:stack1,inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n      \");\n  return buffer;}\nfunction program3(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n          <a \");\n  stack1 = {};\n  stack1['target'] = \"Travis.app.router\";\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showJob\", \"job.repository\", \"job\", {hash:stack1,contexts:[depth0,depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            <span class=\\\"slug\\\">\\n              \");\n  stack1 = helpers._triageMustache.call(depth0, \"job.repository.slug\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n            </span>\\n            #\");\n  stack1 = helpers._triageMustache.call(depth0, \"job.number\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </a>\\n        \");\n  return buffer;}\n\nfunction program5(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"no_job\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"no_job\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      \");\n  return buffer;}\n\n  data.buffer.push(\"<ul id=\\\"queues\\\">\\n\");\n  stack1 = helpers.each.call(depth0, \"queue\", \"in\", \"controller\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n</ul>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['repos/list'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n    \");\n  stack1 = helpers['with'].call(depth0, \"view.repository\", {hash:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n  \");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n      <div class=\\\"slug-and-status\\\">\\n        <span class=\\\"status\\\"></span>\\n        \");\n  stack1 = helpers['if'].call(depth0, \"slug\", {hash:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n      </div>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"lastBuildId\", {hash:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n      <p class=\\\"summary\\\">\\n        <span class=\\\"duration_label\\\">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.duration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.duration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":</span>\\n        <abbr class=\\\"duration\\\" \");\n  stack1 = {};\n  stack1['title'] = \"lastBuildStartedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.formatDuration;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"lastBuildDuration\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatDuration\", \"lastBuildDuration\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</abbr>,\\n        <span class=\\\"finished_at_label\\\">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.finished_at\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.finished_at\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":</span>\\n        <abbr class=\\\"finished_at timeago\\\" \");\n  stack1 = {};\n  stack1['title'] = \"lastBuildFinishedAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers.formatTime;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"lastBuildFinishedAt\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"formatTime\", \"lastBuildFinishedAt\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</abbr>\\n      </p>\\n\\n      <div class=\\\"indicator\\\"><span></span></div>\\n\\n      \");\n  stack1 = helpers['if'].call(depth0, \"description\", {hash:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    \");\n  return buffer;}\nfunction program3(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n          <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showRepository\", \"\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" class=\\\"slug\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"slug\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n        \");\n  return buffer;}\n\nfunction program5(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showBuild\", \"\", \"lastBuildId\", {hash:stack1,contexts:[depth0,depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" class=\\\"last_build\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"lastBuildNumber\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n      \");\n  return buffer;}\n\nfunction program7(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        <div class=\\\"info\\\">\\n          <p class=\\\"description\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"description\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</p>\\n        </div>\\n      \");\n  return buffer;}\n\n  data.buffer.push(\"<div id=\\\"search_box\\\">\\n  \");\n  stack1 = {};\n  stack1['valueBinding'] = \"controller.search\";\n  stack1 = helpers.view.call(depth0, \"Ember.TextField\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n</div>\\n\\n\");\n  stack1 = helpers.view.call(depth0, \"Travis.ReposListTabsView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n\\n<a \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"toggleInfo\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" class=\\\"toggle-info\\\"></a>\\n\\n<div class=\\\"tab\\\">\\n  \");\n  stack1 = {};\n  stack1['contentBinding'] = \"controller\";\n  foundHelper = helpers.collection;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"Travis.RepositoriesListView\", {hash:stack1,inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data}) : helperMissing.call(depth0, \"collection\", \"Travis.RepositoriesListView\", {hash:stack1,inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n</div>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['repos/list/tabs'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n  data.buffer.push(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_recent\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classRecent\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5><a name=\\\"recent\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"activate\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.recent\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.recent\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></h5>\\n  </li>\\n  <li id=\\\"tab_owned\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classOwned\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5><a name=\\\"owned\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"activate\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.my_repositories\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.my_repositories\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></h5>\\n  </li>\\n  <li id=\\\"tab_search\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classSearch\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5><a name=\\\"search\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"activate\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.search\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.search\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a></h5>\\n  </li>\\n</ul>\\n\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['repos/show'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n    \");\n  stack1 = helpers['with'].call(depth0, \"view.repository\", {hash:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n  \");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n      <h3>\\n        <a \");\n  stack1 = {};\n  stack1['href'] = \"view.urlGithub\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\");\n  stack1 = helpers._triageMustache.call(depth0, \"slug\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</a>\\n      </h3>\\n\\n      <p class=\\\"description\\\">\");\n  stack1 = helpers._triageMustache.call(depth0, \"description\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</p>\\n\\n      <ul class=\\\"github-stats\\\">\\n        <li class=\\\"language\\\">\\n          \");\n  stack1 = helpers._triageMustache.call(depth0, \"lastBuildLanguage\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n        </li>\\n        <li>\\n          <a class=\\\"watchers\\\" title=\\\"Watchers\\\" \");\n  stack1 = {};\n  stack1['href'] = \"view.urlGithubWatchers\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            \");\n  stack1 = helpers._triageMustache.call(depth0, \"stats.watchers\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </a>\\n        </li>\\n        <li>\\n          <a class=\\\"forks\\\" title=\\\"Forks\\\" \");\n  stack1 = {};\n  stack1['href'] = \"view.urlGithubNetwork\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            \");\n  stack1 = helpers._triageMustache.call(depth0, \"stats.forks\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </a>\\n        </li>\\n      </ul>\\n\\n      \");\n  stack1 = helpers.view.call(depth0, \"Travis.RepoShowTabsView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      \");\n  stack1 = helpers.view.call(depth0, \"Travis.RepoShowToolsView\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n    \");\n  return buffer;}\n\nfunction program4(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n    <span>Loading</span>\\n  \");}\n\n  data.buffer.push(\"<div id=\\\"repository\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.class\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n  \");\n  stack1 = helpers['if'].call(depth0, \"view.repository.isLoaded\", {hash:{},inverse:self.program(4, program4, data),fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n  <div class=\\\"tab\\\">\\n    \");\n  foundHelper = helpers.outlet;\n  stack1 = foundHelper ? foundHelper.call(depth0, \"pane\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"outlet\", \"pane\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n  </div>\\n</div>\\n\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['repos/show/tabs'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n      <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showRepository\", \"view.repository\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.tabs.current\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.tabs.current\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      </a>\\n      \");\n  return buffer;}\n\nfunction program3(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n      <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showBuilds\", \"view.repository\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.tabs.build_history\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.tabs.build_history\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      </a>\\n      \");\n  return buffer;}\n\nfunction program5(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n      <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showPullRequests\", \"view.repository\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.tabs.pull_requests\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.tabs.pull_requests\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      </a>\\n      \");\n  return buffer;}\n\nfunction program7(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n      <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showBranches\", \"view.repository\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.tabs.branches\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.tabs.branches\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      </a>\\n      \");\n  return buffer;}\n\nfunction program9(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n      <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showBuild\", \"view.build\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.tabs.build\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.tabs.build\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" #\");\n  stack1 = helpers._triageMustache.call(depth0, \"view.build.number\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      </a>\\n      \");\n  return buffer;}\n\nfunction program11(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n      <a \");\n  stack1 = {};\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showBuild\", \"view.job\", {hash:stack1,contexts:[depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.tabs.job\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.tabs.job\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" #\");\n  stack1 = helpers._triageMustache.call(depth0, \"view.job.number\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      </a>\\n      \");\n  return buffer;}\n\n  data.buffer.push(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_current\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classCurrent\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"view.repository.slug\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_builds\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classBuilds\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"view.repository.slug\", {hash:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_pull_requests\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classPullRequests\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"view.repository.slug\", {hash:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_branches\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classBranches\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"view.repository.slug\", {hash:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_build\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classBuild\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"view.build.id\", {hash:{},inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_job\\\" \");\n  stack1 = {};\n  stack1['class'] = \"view.classJob\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n    <h5>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"view.job.id\", {hash:{},inverse:self.noop,fn:self.program(11, program11, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </h5>\\n  </li>\\n</ul>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['repos/show/tools'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        \");\n  stack1 = {};\n  stack1['contentBinding'] = \"view.branches\";\n  stack1['selectionBinding'] = \"view.branch\";\n  stack1['optionLabelPath'] = \"content.commit.branch\";\n  stack1['optionValuePath'] = \"content.commit.branch\";\n  stack1 = helpers.view.call(depth0, \"Ember.Select\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n      \");\n  return buffer;}\n\nfunction program3(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n        <span class=\\\"loading\\\"></span>\\n      \");}\n\n  data.buffer.push(\"<div id=\\\"tools\\\">\\n  <a href=\\\"#\\\" \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"toggle\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"></a>\\n  <div class=\\\"pane\\\">\\n    <p>\\n      <label>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.branch\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.branch\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":</label>\\n      \");\n  stack1 = helpers['if'].call(depth0, \"view.branches.isLoaded\", {hash:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </p>\\n    <p>\\n      <label>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.image_url\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.image_url\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":</label>\\n      <input type=\\\"text\\\" class=\\\"url\\\" \");\n  stack1 = {};\n  stack1['value'] = \"view.urlStatusImage\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"></input>\\n    </p>\\n    <p>\\n      <label>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.markdown\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.markdown\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":</label>\\n      <input type=\\\"text\\\" class=\\\"markdown\\\" \");\n  stack1 = {};\n  stack1['value'] = \"view.markdownStatusImage\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"></input>\\n    </p>\\n    <p>\\n      <label>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.textile\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.textile\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":</label>\\n      <input type=\\\"text\\\" class=\\\"textile\\\" \");\n  stack1 = {};\n  stack1['value'] = \"view.textileStatusImage\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"></input>\\n    </p>\\n    <p>\\n      <label>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"repositories.rdoc\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"repositories.rdoc\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \":</label>\\n      <input type=\\\"text\\\" class=\\\"rdoc\\\" \");\n  stack1 = {};\n  stack1['value'] = \"view.rdocStatusImage\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"></input>\\n    </p>\\n  </div>\\n</div>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['sponsors/decks'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n    \");\n  stack1 = helpers.each.call(depth0, \"deck\", {hash:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n  \");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n      <li \");\n  stack1 = {};\n  stack1['class'] = \"type\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        <a \");\n  stack1 = {};\n  stack1['href'] = \"url\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n          <img \");\n  stack1 = {};\n  stack1['src'] = \"image\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n        </a>\\n      </li>\\n    \");\n  return buffer;}\n\n  data.buffer.push(\"<h4>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.sponsers\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.sponsers\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</h4>\\n\\n<ul class=\\\"sponsors top\\\">\\n  \");\n  stack1 = helpers.each.call(depth0, \"deck\", \"in\", \"controller\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n</ul>\\n\\n<p class=\\\"hint\\\">\\n  <a href=\\\"https://love.travis-ci.org/sponsors\\\">\\n    \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.sponsors_link\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.sponsors_link\", {hash:{},contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n  </a>\\n</p>\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['sponsors/links'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, foundHelper, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n      <li>\\n        \");\n  stack1 = {};\n  stack1['unescaped'] = \"true\";\n  stack1 = helpers._triageMustache.call(depth0, \"link\", {hash:stack1,contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n      </li>\\n    \");\n  return buffer;}\n\n  data.buffer.push(\"<div class=\\\"box\\\">\\n  <h4>\");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.sponsers\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.sponsers\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"</h4>\\n\\n  <ul class=\\\"sponsors bottom\\\">\\n    \");\n  stack1 = helpers.each.call(depth0, \"controller\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n  </ul>\\n\\n  <p class=\\\"hint\\\">\\n    <a href=\\\"https://love.travis-ci.org/sponsors\\\">\\n      \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"layouts.application.sponsors_link\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"layouts.application.sponsors_link\", {hash:{},contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    </a>\\n  </p>\\n</div>\\n\\n\\n\");\n  return buffer;\n});\n\nEmber.TEMPLATES['stats/show'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  \n\n\n  data.buffer.push(\"<div id=\\\"repos_stats\\\"></div>\\n<div id=\\\"tests_stats\\\"></div>\\n\\n\");\n});\n\nEmber.TEMPLATES['workers/list'] = Ember.Handlebars.template(function anonymous(Handlebars, depth0, helpers, partials, data) { helpers = helpers || Ember.Handlebars.helpers;\n  var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\nfunction program1(depth0,data) {\n  \n  var buffer = '', stack1, foundHelper;\n  data.buffer.push(\"\\n  <h4>\\n    \");\n  foundHelper = helpers['t'];\n  stack1 = foundHelper ? foundHelper.call(depth0, \"workers\", {hash:{},contexts:[depth0],data:data}) : helperMissing.call(depth0, \"t\", \"workers\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n    <a id=\\\"toggle-workers\\\" \");\n  stack1 = {};\n  stack1['target'] = \"parentView.parentView\";\n  stack1 = helpers.action.call(depth0, \"toggleWorkers\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"></a>\\n  </h4>\\n  <ul id=\\\"workers\\\">\\n    \");\n  stack1 = helpers.each.call(depth0, \"group\", \"in\", \"controller.groups\", {hash:{},inverse:self.program(11, program11, data),fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n  </ul>\\n\");\n  return buffer;}\nfunction program2(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n      \");\n  stack1 = helpers.view.call(depth0, \"Travis.WorkersListView\", {hash:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n    \");\n  return buffer;}\nfunction program3(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n        <li class=\\\"group\\\">\\n          <h5 \");\n  stack1 = {};\n  stack1['target'] = \"view\";\n  stack1 = helpers.action.call(depth0, \"toggle\", {hash:stack1,contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n            \");\n  stack1 = helpers._triageMustache.call(depth0, \"group.firstObject.host\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n          </h5>\\n          <ul>\\n          \");\n  stack1 = helpers.each.call(depth0, \"worker\", \"in\", \"group\", {hash:{},inverse:self.noop,fn:self.program(4, program4, data),contexts:[depth0,depth0,depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          </ul>\\n        </li>\\n      \");\n  return buffer;}\nfunction program4(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n            \");\n  stack1 = {};\n  stack1['workerBinding'] = \"worker\";\n  stack1 = helpers.view.call(depth0, \"Travis.WorkersItemView\", {hash:stack1,inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n          \");\n  return buffer;}\nfunction program5(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n              <li class=\\\"worker\\\">\\n                <div class=\\\"status\\\"></div>\\n                \");\n  stack1 = helpers['if'].call(depth0, \"worker.isWorking\", {hash:{},inverse:self.program(9, program9, data),fn:self.program(6, program6, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n              </li>\\n            \");\n  return buffer;}\nfunction program6(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n                  \");\n  stack1 = helpers['if'].call(depth0, \"worker.job_id\", {hash:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n                \");\n  return buffer;}\nfunction program7(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n                    <a \");\n  stack1 = {};\n  stack1['target'] = \"Travis.app.router\";\n  stack1['href'] = true;\n  stack1 = helpers.action.call(depth0, \"showJob\", \"worker.repository\", \"worker.job_id\", {hash:stack1,contexts:[depth0,depth0,depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \" \");\n  stack1 = {};\n  stack1['title'] = \"worker.lastSeenAt\";\n  stack1 = helpers.bindAttr.call(depth0, {hash:stack1,contexts:[],data:data});\n  data.buffer.push(escapeExpression(stack1) + \">\\n                      \");\n  stack1 = helpers._triageMustache.call(depth0, \"view.display\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n                    </a>\\n                  \");\n  return buffer;}\n\nfunction program9(depth0,data) {\n  \n  var buffer = '', stack1;\n  data.buffer.push(\"\\n                  \");\n  stack1 = helpers._triageMustache.call(depth0, \"view.display\", {hash:{},contexts:[depth0],data:data});\n  data.buffer.push(escapeExpression(stack1) + \"\\n                \");\n  return buffer;}\n\nfunction program11(depth0,data) {\n  \n  \n  data.buffer.push(\"\\n      No workers\\n    \");}\n\n  stack1 = helpers.view.call(depth0, \"Travis.WorkersView\", {hash:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],data:data});\n  if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n  data.buffer.push(\"\\n\\n\");\n  return buffer;\n});\n\n})();\n//@ sourceURL=templates");minispade.register('config/locales', "(function() {window.I18n = window.I18n || {}\nwindow.I18n.translations = {\"ca\":{\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"pt-BR\":\"português brasileiro\",\"ru\":\"Русский\"}},\"en\":{\"errors\":{\"messages\":{\"not_found\":\"not found\",\"already_confirmed\":\"was already confirmed\",\"not_locked\":\"was not locked\"}},\"devise\":{\"failure\":{\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"You have to confirm your account before continuing.\",\"locked\":\"Your account is locked.\",\"invalid\":\"Invalid email or password.\",\"invalid_token\":\"Invalid authentication token.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"inactive\":\"Your account was not activated yet.\"},\"sessions\":{\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"passwords\":{\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"updated\":\"Your password was changed successfully. You are now signed in.\"},\"confirmations\":{\"send_instructions\":\"You will receive an email with instructions about how to confirm your account in a few minutes.\",\"confirmed\":\"Your account was successfully confirmed. You are now signed in.\"},\"registrations\":{\"signed_up\":\"You have signed up successfully. If enabled, a confirmation was sent to your e-mail.\",\"updated\":\"You updated your account successfully.\",\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"unlocked\":\"Your account was successfully unlocked. You are now signed in.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions\"}}},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hour\",\"other\":\"%{count} hours\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} second\",\"other\":\"%{count} seconds\"}}},\"workers\":\"Workers\",\"queue\":\"Queue\",\"no_job\":\"There are no jobs\",\"repositories\":{\"branch\":\"Branch\",\"image_url\":\"Image URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"tabs\":{\"current\":\"Current\",\"build_history\":\"Build History\",\"branches\":\"Branch Summary\",\"pull_requests\":\"Pull Requests\",\"build\":\"Build\",\"job\":\"Job\"}},\"build\":{\"job\":\"Job\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"show_more\":\"Show more\"},\"layouts\":{\"top\":{\"home\":\"Home\",\"blog\":\"Blog\",\"docs\":\"Docs\",\"stats\":\"Stats\",\"github_login\":\"Sign in with Github\",\"profile\":\"Profile\",\"sign_out\":\"Sign Out\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Recent\",\"search\":\"Search\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"See all of our amazing sponsors &rarr;\",\"my_repositories\":\"My Repositories\"},\"about\":{\"alpha\":\"This stuff is alpha.\",\"messages\":{\"alpha\":\"Please do <strong>not</strong> consider this a stable service. We're still far from that! More info <a href='https://github.com/travis-ci'>here.</a>\"},\"join\":\"Join us and help!\",\"mailing_list\":\"Mailing List\",\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Author\",\"build\":\"Build\",\"build_matrix\":\"Build Matrix\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Compare\",\"config\":\"Config\",\"duration\":\"Duration\",\"finished_at\":\"Finished at\",\"job\":\"Job\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.\",\"config\":\"how to configure custom build options\"},\"messages\":{\"notice\":\"To get started, please read our <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Getting Started guide</a>.\\n  <small>It will only take a couple of minutes.</small>\"},\"token\":\"Token\",\"your_repos\":\"Your Repositories\",\"update\":\"Update\",\"update_locale\":\"Update\",\"your_locale\":\"Your Locale\"}},\"statistics\":{\"index\":{\"count\":\"Count\",\"repo_growth\":\"Repository Growth\",\"total_projects\":\"Total Projects/Repositories\",\"build_count\":\"Build Count\",\"last_month\":\"last month\",\"total_builds\":\"Total Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"es\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"workers\":\"Procesos\",\"queue\":\"Cola\",\"no_job\":\"No hay trabajos\",\"repositories\":{\"branch\":\"Rama\",\"image_url\":\"Imagen URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"tabs\":{\"current\":\"Actual\",\"build_history\":\"Histórico\",\"branches\":\"Ramas\",\"build\":\"Builds\",\"job\":\"Trabajo\"}},\"build\":{\"job\":\"Trabajo\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"sponsored_by\":\"Patrocinado por\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"layouts\":{\"top\":{\"home\":\"Inicio\",\"blog\":\"Blog\",\"docs\":\"Documentación\",\"stats\":\"Estadísticas\",\"github_login\":\"Iniciar sesión con Github\",\"profile\":\"Perfil\",\"sign_out\":\"Desconectar\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Hazme un Fork en Github\",\"recent\":\"Reciente\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Ver todos nuestros patrocinadores &rarr;\",\"my_repositories\":\"Mis Repositorios\"},\"about\":{\"alpha\":\"Esto es alpha.\",\"messages\":{\"alpha\":\"Por favor <strong>no</strong> considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información <a href='https://github.com/travis-ci'>aquí.</a>\"},\"join\":\"Únetenos y ayudanos!\",\"mailing_list\":\"Lista de Correos\",\"repository\":\"Repositorio\",\"twitter\":\"Twitter\"}},\"profiles\":{\"show\":{\"email\":\"Correo electrónico\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Activa los interruptores para inicial el  Travis service hook para tus proyectos, y haz un Push en GitHub.<br />\\n  Para probar varias versiones de ruby, mira\",\"config\":\"como configurar tus propias opciones para el Build\"},\"messages\":{\"notice\":\"Para comenzar, por favor lee nuestra <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Guía de Inicio </a>.\\n  <small>Solo tomará unos pocos minutos.</small>\"},\"token\":\"Token\",\"your_repos\":\"Tus repositorios\",\"update\":\"Actualizar\",\"update_locale\":\"Actualizar\",\"your_locale\":\"Tu Idioma\"}},\"statistics\":{\"index\":{\"count\":\"Número\",\"repo_growth\":\"Crecimiento de Repositorios\",\"total_projects\":\"Total de Proyectos/Repositorios\",\"build_count\":\"Número de Builds\",\"last_month\":\"mes anterior\",\"total_builds\":\"Total de Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"fr\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} heure\",\"other\":\"%{count} heures\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} secondes\"}}},\"workers\":\"Processus\",\"queue\":\"File\",\"no_job\":\"Pas de tâches\",\"repositories\":{\"branch\":\"Branche\",\"image_url\":\"Image\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"tabs\":{\"current\":\"Actuel\",\"build_history\":\"Historique des tâches\",\"branches\":\"Résumé des branches\",\"build\":\"Construction\",\"job\":\"Tâche\"}},\"build\":{\"job\":\"Tâche\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"builds\":{\"name\":\"Version\",\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"layouts\":{\"top\":{\"home\":\"Accueil\",\"blog\":\"Blog\",\"docs\":\"Documentation\",\"stats\":\"Statistiques\",\"github_login\":\"Connection Github\",\"profile\":\"Profil\",\"sign_out\":\"Déconnection\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Faites un Fork sur Github\",\"recent\":\"Récent\",\"search\":\"Chercher\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Voir tous nos extraordinaire sponsors &rarr;\",\"my_repositories\":\"Mes dépôts\"},\"about\":{\"alpha\":\"Ceci est en alpha.\",\"messages\":{\"alpha\":\"S'il vous plaît ne considérez <strong>pas</strong> ce service comme étant stable. Nous sommes loin de ça! Plus d'infos <a href='https://github.com/travis-ci'>ici.</a>\"},\"join\":\"Joignez-vous à nous et aidez-nous!\",\"mailing_list\":\"Liste de distribution\",\"repository\":\"Dépôt\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Version\",\"build_matrix\":\"Matrice des versions\",\"commit\":\"Commit\",\"committer\":\"Committeur\",\"compare\":\"Comparer\",\"config\":\"Config\",\"duration\":\"Durée\",\"finished_at\":\"Terminé à\",\"job\":\"Tâche\",\"log\":\"Journal\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"message\":{\"your_repos\":\"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.<br />\\nPour tester sur plus de versions de ruby, voir\",\"config\":\"comment configurer des options de version personnalisées\"},\"messages\":{\"notice\":\"Pour commencer, veuillez lire notre <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">guide de démarrage</a>.\\n <small>Cela ne vous prendra que quelques minutes.</small>\"},\"token\":\"Jeton\",\"your_repos\":\"Vos dépôts\",\"email\":\"Courriel\",\"update\":\"Modifier\",\"update_locale\":\"Modifier\",\"your_locale\":\"Votre langue\"}},\"statistics\":{\"index\":{\"count\":\"Décompte\",\"repo_growth\":\"Croissance de dépôt\",\"total_projects\":\"Total des projets/dépôts\",\"build_count\":\"Décompte des versions\",\"last_month\":\"mois dernier\",\"total_builds\":\"Total des versions\"}},\"admin\":{\"actions\":{\"create\":\"créer\",\"created\":\"créé\",\"delete\":\"supprimer\",\"deleted\":\"supprimé\",\"update\":\"mise à jour\",\"updated\":\"mis à jour\"},\"credentials\":{\"log_out\":\"Déconnection\"},\"delete\":{\"confirmation\":\"Oui, je suis sure\",\"flash_confirmation\":\"%{name} a été détruit avec succès\"},\"flash\":{\"error\":\"%{name} n'a pas pu être %{action}\",\"noaction\":\"Aucune action n'a été entreprise\",\"successful\":\"%{name} a réussi à %{action}\"},\"history\":{\"name\":\"Historique\",\"no_activity\":\"Aucune activité\",\"page_name\":\"Historique pour %{name}\"},\"list\":{\"add_new\":\"Ajouter un nouveau\",\"delete_action\":\"Supprimer\",\"delete_selected\":\"Supprimer la sélection\",\"edit_action\":\"Modifier\",\"search\":\"Rechercher\",\"select\":\"Sélectionner le %{name} à modifier\",\"select_action\":\"Sélectionner\",\"show_all\":\"Montrer tout\"},\"new\":{\"basic_info\":\"Information de base\",\"cancel\":\"Annuler\",\"chosen\":\"%{name} choisi\",\"chose_all\":\"Choisir tout\",\"clear_all\":\"Déselectionner tout\",\"many_chars\":\"caractères ou moins\",\"one_char\":\"caractère.\",\"optional\":\"Optionnel\",\"required\":\"Requis\",\"save\":\"Sauvegarder\",\"save_and_add_another\":\"Sauvegarder et en ajouter un autre\",\"save_and_edit\":\"Sauvegarder et modifier\",\"select_choice\":\"Faites vos choix et cliquez\"},\"dashboard\":{\"add_new\":\"Ajouter un nouveau\",\"last_used\":\"Dernière utilisation\",\"model_name\":\"Nom du modèle\",\"modify\":\"Modification\",\"name\":\"Tableau de bord\",\"pagename\":\"Administration du site\",\"records\":\"Enregistrements\",\"show\":\"Voir\",\"ago\":\"plus tôt\"}},\"home\":{\"name\":\"accueil\"},\"repository\":{\"duration\":\"Durée\"},\"devise\":{\"confirmations\":{\"confirmed\":\"Votre compte a été crée avec succès. Vous être maintenant connecté.\",\"send_instructions\":\"Vous allez recevoir un courriel avec les instructions de confirmation de votre compte dans quelques minutes.\"},\"failure\":{\"inactive\":\"Votre compte n'a pas encore été activé.\",\"invalid\":\"Adresse courriel ou mot de passe invalide.\",\"invalid_token\":\"Jeton d'authentification invalide.\",\"locked\":\"Votre compte est bloqué.\",\"timeout\":\"Votre session est expirée, veuillez vous reconnecter pour continuer.\",\"unauthenticated\":\"Vous devez vous connecter ou vous enregistrer afin de continuer\",\"unconfirmed\":\"Vous devez confirmer votre compte avant de continuer.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instructions de confirmations\"},\"reset_password_instructions\":{\"subject\":\"Instruction de remise à zéro du mot de passe\"},\"unlock_instructions\":{\"subject\":\"Instruction de débloquage\"}},\"passwords\":{\"send_instructions\":\"Vous recevrez un courriel avec les instructions de remise à zéro du mot de passe dans quelques minutes.\",\"updated\":\"Votre mot de passe a été changé avec succès. Vous êtes maintenant connecté.\"},\"registrations\":{\"destroyed\":\"Au revoir! Votre compte a été annulé avec succès. Nous espérons vous revoir bientôt.\",\"signed_up\":\"Vous êtes enregistré avec succès. Si activé, une confirmation vous a été envoyé par courriel.\",\"updated\":\"Votre compte a été mis a jour avec succès\"},\"sessions\":{\"signed_in\":\"Connecté avec succès\",\"signed_out\":\"Déconnecté avec succès\"},\"unlocks\":{\"send_instructions\":\"Vous recevrez un courriel contenant les instructions pour débloquer votre compte dans quelques minutes.\",\"unlocked\":\"Votre compte a été débloqué avec succès.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"étais déja confirmé\",\"not_found\":\"n'a pas été trouvé\",\"not_locked\":\"n'étais pas bloqué\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"ja\":{\"workers\":\"ワーカー\",\"queue\":\"キュー\",\"no_job\":\"ジョブはありません\",\"repositories\":{\"branch\":\"ブランチ\",\"image_url\":\"画像URL\",\"markdown\":\".md\",\"textile\":\".textile\",\"rdoc\":\".rdoc\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"tabs\":{\"current\":\"最新\",\"build_history\":\"ビルド履歴\",\"branches\":\"ブランチまとめ\",\"build\":\"ビルド\",\"job\":\"ジョブ\"}},\"build\":{\"job\":\"ジョブ\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"ビルドマトリクス\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"builds\":{\"name\":\"ビルド\",\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"失敗許容範囲外\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"layouts\":{\"about\":{\"alpha\":\"まだアルファですよ!\",\"join\":\"参加してみよう!\",\"mailing_list\":\"メールリスト\",\"messages\":{\"alpha\":\"Travis-ciは安定したサービスまで後一歩!詳しくは<a href='https://github.com/travis-ci'>こちら</a>\"},\"repository\":\"リポジトリ\",\"twitter\":\"ツイッター\"},\"application\":{\"fork_me\":\"Githubでフォークしよう\",\"my_repositories\":\"マイリポジトリ\",\"recent\":\"最近\",\"search\":\"検索\",\"sponsers\":\"スポンサー\",\"sponsors_link\":\"スポンサーをもっと見る &rarr;\"},\"top\":{\"blog\":\"ブログ\",\"docs\":\"Travisとは?\",\"github_login\":\"Githubでログイン\",\"home\":\"ホーム\",\"profile\":\"プロフィール\",\"sign_out\":\"ログアウト\",\"stats\":\"統計\",\"admin\":\"管理\"},\"mobile\":{\"author\":\"制作者\",\"build\":\"ビルド\",\"build_matrix\":\"ビルドマトリクス\",\"commit\":\"コミット\",\"committer\":\"コミット者\",\"compare\":\"比較\",\"config\":\"設定\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"job\":\"ジョブ\",\"log\":\"ログ\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"email\":\"メール\",\"message\":{\"config\":\"詳細設定\",\"your_repos\":\"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:\"},\"messages\":{\"notice\":\"まずは<a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Travisのはじめ方</a>を参照してください。\"},\"token\":\"トークン\",\"your_repos\":\"リポジトリ\",\"update\":\"更新\",\"update_locale\":\"更新\",\"your_locale\":\"言語設定\"}},\"statistics\":{\"index\":{\"build_count\":\"ビルド数\",\"count\":\"数\",\"last_month\":\"先月\",\"repo_growth\":\"リポジトリ\",\"total_builds\":\"合計ビルド数\",\"total_projects\":\"合計リポジトリ\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nb\":{\"admin\":{\"actions\":{\"create\":\"opprett\",\"created\":\"opprettet\",\"delete\":\"slett\",\"deleted\":\"slettet\",\"update\":\"oppdater\",\"updated\":\"oppdatert\"},\"credentials\":{\"log_out\":\"Logg ut\"},\"dashboard\":{\"add_new\":\"Legg til ny\",\"ago\":\"siden\",\"last_used\":\"Sist brukt\",\"model_name\":\"Modell\",\"modify\":\"Rediger\",\"name\":\"Dashbord\",\"pagename\":\"Nettstedsadministrasjon\",\"records\":\"Oppføringer\",\"show\":\"Vis\"},\"delete\":{\"confirmation\":\"Ja, jeg er sikker\",\"flash_confirmation\":\"%{name} ble slettet\"},\"flash\":{\"error\":\"%{name} kunne ikke bli %{action}\",\"noaction\":\"Ingen handlinger ble utført\",\"successful\":\"%{name} ble %{action}\"},\"history\":{\"name\":\"Logg\",\"no_activity\":\"Ingen aktivitet\",\"page_name\":\"Logg for %{name}\"},\"list\":{\"add_new\":\"Legg til ny\",\"delete_action\":\"Slett\",\"delete_selected\":\"Slett valgte\",\"edit_action\":\"Rediger\",\"search\":\"Søk\",\"select\":\"Velg %{name} for å redigere\",\"select_action\":\"Velg\",\"show_all\":\"Vis alle \"},\"new\":{\"basic_info\":\"Basisinformasjon\",\"cancel\":\"Avbryt\",\"chosen\":\"Valgt %{name}\",\"chose_all\":\"Velg alle\",\"clear_all\":\"Fjern alle\",\"many_chars\":\"eller færre tegn.\",\"one_char\":\"tegn.\",\"optional\":\"Valgfri\",\"required\":\"Påkrevd\",\"save\":\"Lagre\",\"save_and_add_another\":\"Lagre og legg til ny\",\"save_and_edit\":\"Lagre og rediger\",\"select_choice\":\"Kryss av for dine valg og klikk\"}},\"build\":{\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\"},\"builds\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testen ble kjørt på en maskin sponset av\"},\"name\":\"Jobb\",\"started_at\":\"Startet\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} time\",\"other\":\"%{count} timer\"},\"minutes_exact\":{\"one\":\"%{count} minutt\",\"other\":\"%{count} minutter\"},\"seconds_exact\":{\"one\":\"%{count} sekund\",\"other\":\"%{count} sekunder\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Din konto er aktivert og du er nå innlogget.\",\"send_instructions\":\"Om noen få minutter så vil du få en e-post med informasjon om hvordan du bekrefter kontoen din.\"},\"failure\":{\"inactive\":\"Kontoen din har ikke blitt aktivert enda.\",\"invalid\":\"Ugyldig e-post eller passord.\",\"invalid_token\":\"Ugyldig autentiseringskode.\",\"locked\":\"Kontoen din er låst.\",\"timeout\":\"Du ble logget ut siden på grunn av mangel på aktivitet, vennligst logg inn på nytt.\",\"unauthenticated\":\"Du må logge inn eller registrere deg for å fortsette.\",\"unconfirmed\":\"Du må bekrefte kontoen din før du kan fortsette.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bekreftelsesinformasjon\"},\"reset_password_instructions\":{\"subject\":\"Instruksjoner for å få nytt passord\"},\"unlock_instructions\":{\"subject\":\"Opplåsningsinstruksjoner\"}},\"passwords\":{\"send_instructions\":\"Om noen få minutter så vil du få en epost med informasjon om hvordan du kan få et nytt passord.\",\"updated\":\"Passordet ditt ble endret, og du er logget inn.\"},\"registrations\":{\"destroyed\":\"Adjø! Kontoen din ble kansellert. Vi håper vi ser deg igjen snart.\",\"signed_up\":\"Du er nå registrert.\",\"updated\":\"Kontoen din ble oppdatert.\"},\"sessions\":{\"signed_in\":\"Du er nå logget inn.\",\"signed_out\":\"Du er nå logget ut.\"},\"unlocks\":{\"send_instructions\":\"Om noen få minutter så kommer du til å få en e-post med informasjon om hvordan du kan låse opp kontoen din.\",\"unlocked\":\"Kontoen din ble låst opp, og du er nå logget inn igjen.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"har allerede blitt bekreftet\",\"not_found\":\"ikke funnnet\",\"not_locked\":\"var ikke låst\"}},\"home\":{\"name\":\"hjem\"},\"jobs\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testserien ble kjørt på en maskin sponset av\"},\"started_at\":\"Startet\"},\"layouts\":{\"about\":{\"alpha\":\"Dette er alfa-greier.\",\"join\":\"Bli med og hjelp oss!\",\"mailing_list\":\"E-postliste\",\"messages\":{\"alpha\":\"Dette er <strong>ikke</strong> en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du <a href=\\\"https://github.com/travis-ci\\\">her</a>.\"},\"repository\":\"Kodelager\",\"twitter\":\"Twitter.\"},\"application\":{\"fork_me\":\"Se koden på Github\",\"my_repositories\":\"Mine kodelagre\",\"recent\":\"Nylig\",\"search\":\"Søk\",\"sponsers\":\"Sponsorer\",\"sponsors_link\":\"Se alle de flotte sponsorene våre &rarr;\"},\"mobile\":{\"author\":\"Forfatter\",\"build\":\"Jobb\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\",\"log\":\"Logg\"},\"top\":{\"admin\":\"Administrator\",\"blog\":\"Blogg\",\"docs\":\"Dokumentasjon\",\"github_login\":\"Logg inn med Github\",\"home\":\"Hjem\",\"profile\":\"Profil\",\"sign_out\":\"Logg ut\",\"stats\":\"Statistikk\"}},\"no_job\":\"Ingen jobber finnnes\",\"profiles\":{\"show\":{\"email\":\"E-post\",\"github\":\"Github\",\"message\":{\"config\":\"hvordan sette opp egne jobbinnstillinger\",\"your_repos\":\"Slå\\u0010 på Travis for prosjektene dine ved å dra i bryterne under, og send koden til Github.<br />\\nFor å teste mot flere ruby-versjoner, se dokumentasjonen for\"},\"messages\":{\"notice\":\"For å komme i gang, vennligst les <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">kom-i-gang-veivisereren</a> vår. <small>Det tar bare et par minutter.</small>\"},\"token\":\"Kode\",\"update\":\"Oppdater\",\"update_locale\":\"Oppdater\",\"your_locale\":\"Ditt språk\",\"your_repos\":\"Dine kodelagre\"}},\"queue\":\"Kø\",\"repositories\":{\"branch\":\"Gren\",\"commit\":\"Innsender\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"image_url\":\"Bilde-URL\",\"markdown\":\"Markdown\",\"message\":\"Beskrivelse\",\"rdoc\":\"RDOC\",\"started_at\":\"Startet\",\"tabs\":{\"branches\":\"Grensammendrag\",\"build\":\"Jobb\",\"build_history\":\"Jobblogg\",\"current\":\"Siste\",\"job\":\"Jobb\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Varighet\"},\"statistics\":{\"index\":{\"build_count\":\"Antall jobber\",\"count\":\"Antall\",\"last_month\":\"siste måned\",\"repo_growth\":\"Vekst i kodelager\",\"total_builds\":\"Totale jobber\",\"total_projects\":\"Antall prosjekter/kodelagre\"}},\"workers\":\"Arbeidere\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nl\":{\"admin\":{\"actions\":{\"create\":\"aanmaken\",\"created\":\"aangemaakt\",\"delete\":\"verwijderen\",\"deleted\":\"verwijderd\",\"update\":\"bijwerken\",\"updated\":\"bijgewerkt\"},\"credentials\":{\"log_out\":\"Afmelden\"},\"dashboard\":{\"add_new\":\"Nieuwe toevoegen\",\"ago\":\"geleden\",\"last_used\":\"Laatst gebruikt\",\"model_name\":\"Model naam\",\"modify\":\"Wijzigen\",\"pagename\":\"Site administratie\",\"show\":\"Laten zien\",\"records\":\"Gegevens\"},\"delete\":{\"confirmation\":\"Ja, ik ben zeker\",\"flash_confirmation\":\"%{name} is vernietigd\"},\"flash\":{\"error\":\"%{name} kon niet worden %{action}\",\"noaction\":\"Er zijn geen acties genomen\",\"successful\":\"%{name} is %{action}\"},\"history\":{\"name\":\"Geschiedenis\",\"no_activity\":\"Geen activiteit\",\"page_name\":\"Geschiedenis van %{name}\"},\"list\":{\"add_new\":\"Nieuwe toevoegen\",\"delete_action\":\"Verwijderen\",\"delete_selected\":\"Verwijder geselecteerden\",\"edit_action\":\"Bewerken\",\"search\":\"Zoeken\",\"select\":\"Selecteer %{name} om te bewerken\",\"select_action\":\"Selecteer\",\"show_all\":\"Laat allen zien\"},\"new\":{\"basic_info\":\"Basisinfo\",\"cancel\":\"Annuleren\",\"chosen\":\"%{name} gekozen\",\"chose_all\":\"Kies allen\",\"clear_all\":\"Deselecteer allen\",\"many_chars\":\"tekens of minder.\",\"one_char\":\"teken.\",\"optional\":\"Optioneel\",\"required\":\"Vereist\",\"save\":\"Opslaan\",\"save_and_add_another\":\"Opslaan en een nieuwe toevoegen\",\"save_and_edit\":\"Opslaan en bewerken\",\"select_choice\":\"Selecteer uw keuzes en klik\"}},\"build\":{\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"job\":\"Taak\"},\"builds\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw Matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze tests zijn gedraaid op een machine gesponsord door\"},\"name\":\"Bouw\",\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} uur\",\"other\":\"%{count} uren\"},\"minutes_exact\":{\"one\":\"%{count} minuut\",\"other\":\"%{count} minuten\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} seconden\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Uw account is bevestigd. U wordt nu ingelogd.\",\"send_instructions\":\"Binnen enkele minuten zal u een email ontvangen met instructies om uw account te bevestigen.\"},\"failure\":{\"inactive\":\"Uw account is nog niet geactiveerd.\",\"invalid\":\"Ongeldig email adres of wachtwoord.\",\"invalid_token\":\"Ongeldig authenticatie token.\",\"locked\":\"Uw account is vergrendeld.\",\"timeout\":\"Uw sessie is verlopen, gelieve opnieuw in te loggen om verder te gaan.\",\"unauthenticated\":\"U moet inloggen of u registeren voordat u verder gaat.\",\"unconfirmed\":\"U moet uw account bevestigen voordat u verder gaat.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bevestigings-instructies\"},\"reset_password_instructions\":{\"subject\":\"Wachtwoord herstel instructies\"},\"unlock_instructions\":{\"subject\":\"Ontgrendel-instructies\"}},\"passwords\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw wachtwoord opnieuw in te stellen.\",\"updated\":\"Uw wachtwoord is veranderd. U wordt nu ingelogd.\"},\"registrations\":{\"destroyed\":\"Dag! Uw account is geannuleerd. We hopen u vlug terug te zien.\",\"signed_up\":\"Uw registratie is voltooid. Als het ingeschakeld is wordt een bevestiging naar uw email adres verzonden.\",\"updated\":\"Het bijwerken van uw account is gelukt.\"},\"sessions\":{\"signed_in\":\"Inloggen gelukt.\",\"signed_out\":\"Uitloggen gelukt.\"},\"unlocks\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw account te ontgrendelen.\",\"unlocked\":\"Uw account is ontgrendeld. U wordt nu ingelogd.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"was al bevestigd\",\"not_found\":\"niet gevonden\",\"not_locked\":\"was niet vergrendeld\"}},\"jobs\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze testen zijn uitgevoerd op een machine gesponsord door\"},\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"layouts\":{\"about\":{\"alpha\":\"Dit is in alfa-stadium.\",\"join\":\"Doe met ons mee en help!\",\"mailing_list\":\"Mailing lijst\",\"messages\":{\"alpha\":\"Gelieve deze service <strong>niet</strong> te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info <a href='https://github.com/travis-ci'>hier.</a>\"},\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Maak een fork op Github\",\"my_repositories\":\"Mijn repositories\",\"recent\":\"Recent\",\"search\":\"Zoeken\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Bekijk al onze geweldige sponsors &rarr;\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Bouw\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid op\",\"job\":\"Taak\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"log\":\"Logboek\"},\"top\":{\"admin\":\"Administratie\",\"blog\":\"Blog\",\"docs\":\"Documentatie\",\"github_login\":\"Inloggen met Github\",\"home\":\"Home\",\"profile\":\"Profiel\",\"sign_out\":\"Uitloggen\",\"stats\":\"Statistieken\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Er zijn geen taken\",\"profiles\":{\"show\":{\"email\":\"Email adres\",\"github\":\"Github\",\"message\":{\"config\":\"hoe eigen bouw-opties in te stellen\",\"your_repos\":\"Zet de schakelaars hieronder aan om de Travis hook voor uw projecten te activeren en push daarna naar Github<br />\\nOm te testen tegen meerdere rubies, zie\"},\"messages\":{\"notice\":\"Om te beginnen kunt u onze <a href=\\\\\\\"http://about.travis-ci.org/docs/user/getting-started/\\\\\\\">startersgids</a> lezen.\\\\n  <small>Het zal maar enkele minuten van uw tijd vergen.</small>\"},\"update\":\"Bijwerken\",\"update_locale\":\"Bijwerken\",\"your_locale\":\"Uw taal\",\"your_repos\":\"Uw repositories\",\"token\":\"Token\"}},\"queue\":\"Wachtrij\",\"repositories\":{\"branch\":\"Tak\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"image_url\":\"Afbeeldings URL\",\"message\":\"Bericht\",\"started_at\":\"Gestart\",\"tabs\":{\"branches\":\"Tak samenvatting\",\"build\":\"Bouw\",\"build_history\":\"Bouw geschiedenis\",\"current\":\"Huidig\",\"job\":\"Taak\"},\"commit\":\"Commit\",\"markdown\":\"Markdown\",\"rdoc\":\"RDOC\",\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duur\"},\"statistics\":{\"index\":{\"build_count\":\"Bouw aantal\",\"count\":\"Aantal\",\"last_month\":\"voorbije maand\",\"repo_growth\":\"Repository groei\",\"total_builds\":\"Bouw totaal\",\"total_projects\":\"Projecten/Repository totaal\"}},\"workers\":\"Machines\",\"home\":{\"name\":\"Hoofdpagina\"}},\"pl\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} godzina\",\"other\":\"%{count} godziny\"},\"minutes_exact\":{\"one\":\"%{count} minuta\",\"other\":\"%{count} minuty\"},\"seconds_exact\":{\"one\":\"%{count} sekunda\",\"other\":\"%{count} sekundy\"}}},\"workers\":\"Workers\",\"queue\":\"Kolejka\",\"no_job\":\"Brak zadań\",\"repositories\":{\"branch\":\"Gałąź\",\"image_url\":\"URL obrazka\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"tabs\":{\"current\":\"Aktualny\",\"build_history\":\"Historia Buildów\",\"branches\":\"Wszystkie Gałęzie\",\"build\":\"Build\",\"job\":\"Zadanie\"}},\"build\":{\"job\":\"Zadanie\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Committer\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Komitujący\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"layouts\":{\"top\":{\"home\":\"Start\",\"blog\":\"Blog\",\"docs\":\"Dokumentacja\",\"stats\":\"Statystki\",\"github_login\":\"Zaloguj się przy pomocy Githuba\",\"profile\":\"Profil\",\"sign_out\":\"Wyloguj się\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Ostatnie\",\"search\":\"Wyniki\",\"sponsers\":\"Sponsorzy\",\"sponsors_link\":\"Zobacz naszych wszystkich wspaniałych sponsorów &rarr;\",\"my_repositories\":\"Moje repozytoria\"},\"about\":{\"alpha\":\"To wciąż jest wersja alpha.\",\"messages\":{\"alpha\":\"Proszę <strong>nie</strong> traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz <a href='https://github.com/travis-ci'>tutaj.</a>\"},\"join\":\"Pomóż i dołącz do nas!\",\"mailing_list\":\"Lista mailingowa\",\"repository\":\"Repozytorium\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Macierz Buildów\",\"commit\":\"Commit\",\"committer\":\"Komitujący\",\"compare\":\"Porównianie\",\"config\":\"Konfiguracja\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"job\":\"Zadanie\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.<br />\\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz\",\"config\":\"jak skonfigurować niestandardowe opcje builda\"},\"messages\":{\"notice\":\"Aby zacząć, przeczytaj nasz <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Przewodnik </a>.\\n  <small>Zajmie ci to tylko kilka minut.</small>\"},\"token\":\"Token\",\"your_repos\":\"Twoje repozytoria\"}},\"statistics\":{\"index\":{\"count\":\"Ilość\",\"repo_growth\":\"Przyrost repozytoriów\",\"total_projects\":\"Łącznie projektów/repozytoriów\",\"build_count\":\"Liczba buildów\",\"last_month\":\"ostatni miesiąc\",\"total_builds\":\"Łącznie Buildów\"}},\"date\":{\"abbr_day_names\":[\"nie\",\"pon\",\"wto\",\"śro\",\"czw\",\"pią\",\"sob\"],\"abbr_month_names\":[\"sty\",\"lut\",\"mar\",\"kwi\",\"maj\",\"cze\",\"lip\",\"sie\",\"wrz\",\"paź\",\"lis\",\"gru\"],\"day_names\":[\"niedziela\",\"poniedziałek\",\"wtorek\",\"środa\",\"czwartek\",\"piątek\",\"sobota\"],\"formats\":{\"default\":\"%d-%m-%Y\",\"long\":\"%B %d, %Y\",\"short\":\"%d %b\"},\"month_names\":[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\"sierpień\",\"wrzesień\",\"październik\",\"listopad\",\"grudzień\"],\"order\":[\"day\",\"month\",\"year\"]},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"musi zostać zaakceptowane\",\"blank\":\"nie może być puste\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"pt-BR\":{\"admin\":{\"actions\":{\"create\":\"criar\",\"created\":\"criado\",\"delete\":\"deletar\",\"deleted\":\"deletado\",\"update\":\"atualizar\",\"updated\":\"atualizado\"},\"credentials\":{\"log_out\":\"Deslogar\"},\"dashboard\":{\"add_new\":\"Adicionar novo\",\"ago\":\"atrás\",\"last_used\":\"Última utilização\",\"model_name\":\"Nome do modelo\",\"modify\":\"Modificar\",\"name\":\"Dashboard\",\"pagename\":\"Administração do site\",\"records\":\"Registros\",\"show\":\"Mostrar\"},\"delete\":{\"confirmation\":\"Sim, tenho certeza\",\"flash_confirmation\":\"%{name} foi destruído com sucesso\"},\"flash\":{\"error\":\"%{name} falhou ao %{action}\",\"noaction\":\"Nenhuma ação foi tomada\",\"successful\":\"%{name} foi %{action} com sucesso\"},\"history\":{\"name\":\"Histórico\",\"no_activity\":\"Nenhuma Atividade\",\"page_name\":\"Histórico para %{name}\"},\"list\":{\"add_new\":\"Adicionar novo\",\"delete_action\":\"Deletar\",\"delete_selected\":\"Deletar selecionados\",\"edit_action\":\"Editar\",\"search\":\"Buscar\",\"select\":\"Selecionar %{name} para editar\",\"select_action\":\"Selecionar\",\"show_all\":\"Mostrar todos\"},\"new\":{\"basic_info\":\"Informações básicas\",\"cancel\":\"Cancelar\",\"chosen\":\"Escolhido %{name}\",\"chose_all\":\"Escolher todos\",\"clear_all\":\"Limpar todos\",\"many_chars\":\"caracteres ou menos.\",\"one_char\":\"caractere.\",\"optional\":\"Opcional\",\"required\":\"Requerido\",\"save\":\"Salvar\",\"save_and_add_another\":\"Salvar e adicionar outro\",\"save_and_edit\":\"Salvar e alterar\",\"select_choice\":\"Selecione e clique\"}},\"build\":{\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\"},\"builds\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"name\":\"Build\",\"started_at\":\"Iniciou em\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Sua conta foi confirmada com sucesso. Você agora está logado.\",\"send_instructions\":\"Você receberá um email com instruções de como confirmar sua conta em alguns minutos.\"},\"failure\":{\"inactive\":\"Sua conta ainda não foi ativada.\",\"invalid\":\"Email ou senha inválidos.\",\"invalid_token\":\"Token de autenticação inválido.\",\"locked\":\"Sua conta está trancada.\",\"timeout\":\"Sua sessão expirou, por favor faça seu login novamente.\",\"unauthenticated\":\"Você precisa fazer o login ou cadastrar-se antes de continuar.\",\"unconfirmed\":\"Você precisa confirmar sua conta antes de continuar.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instruções de confirmação\"},\"reset_password_instructions\":{\"subject\":\"Instruções de atualização de senha\"},\"unlock_instructions\":{\"subject\":\"Instruções de destrancamento\"}},\"passwords\":{\"send_instructions\":\"Você receberá um email com instruções de como atualizar sua senha em alguns minutos.\",\"updated\":\"Sua senha foi alterada com sucesso. Você agora está logado.\"},\"registrations\":{\"destroyed\":\"Tchau! Sua conta foi cancelada com sucesso. Esperamos vê-lo novamente em breve!\",\"signed_up\":\"Você se cadastrou com sucesso. Se ativada, uma confirmação foi enviada para seu email.\",\"updated\":\"Você atualizou sua conta com sucesso.\"},\"sessions\":{\"signed_in\":\"Logado com sucesso.\",\"signed_out\":\"Deslogado com sucesso.\"},\"unlocks\":{\"send_instructions\":\"Você receberá um email com instruções de como destrancar sua conta em alguns minutos.\",\"unlocked\":\"Sua conta foi destrancada com sucesso. Você agora está logado.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"já foi confirmado\",\"not_found\":\"não encontrado\",\"not_locked\":\"não estava trancado\"}},\"home\":{\"name\":\"home\"},\"jobs\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"started_at\":\"Iniciou em\"},\"layouts\":{\"about\":{\"alpha\":\"Isto é um alpha.\",\"join\":\"Junte-se à nós e ajude!\",\"mailing_list\":\"Lista de email\",\"messages\":{\"alpha\":\"Por favor, <strong>não</strong> considere isto um serviço estável. Estamos muito longe disso! Mais informações <a href='https://github.com/travis-ci'>aqui.</a>\"},\"repository\":\"Repositório\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Faça fork no Github\",\"my_repositories\":\"Meus Repositórios\",\"recent\":\"Recentes\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Conheça todos os nossos patrocinadores &rarr;\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\",\"log\":\"Log\"},\"top\":{\"admin\":\"Admin\",\"blog\":\"Blog\",\"docs\":\"Documentação\",\"github_login\":\"Logue com o Github\",\"home\":\"Home\",\"profile\":\"Perfil\",\"sign_out\":\"Sair\",\"stats\":\"Estatísticas\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Não há trabalhos\",\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"config\":\"como configurar opções de build\",\"your_repos\":\"Use os botões abaixo para ligar ou desligar o hook de serviço do Travis para seus projetos, e então, faça um push para o Github.<br />Para testar com múltiplas versões do Ruby, leia\"},\"messages\":{\"notice\":\"Para começar, leia nosso <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Guia de início</a>. <small>Só leva alguns minutinhos.</small>\"},\"token\":\"Token\",\"update\":\"Atualizar\",\"update_locale\":\"Atualizar\",\"your_locale\":\"Sua língua\",\"your_repos\":\"Seus Repositórios\"}},\"queue\":\"Fila\",\"repositories\":{\"branch\":\"Branch\",\"commit\":\"Commit\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"image_url\":\"URL da imagem\",\"markdown\":\"Markdown\",\"message\":\"Mensagem\",\"rdoc\":\"RDOC\",\"started_at\":\"Iniciou em\",\"tabs\":{\"branches\":\"Sumário do Branch\",\"build\":\"Build\",\"build_history\":\"Histórico de Build\",\"current\":\"Atual\",\"job\":\"Trabalho\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duração\"},\"statistics\":{\"index\":{\"build_count\":\"Número de Builds\",\"count\":\"Número\",\"last_month\":\"último mês\",\"repo_growth\":\"Crescimento de Repositório\",\"total_builds\":\"Total de Builds\",\"total_projects\":\"Total de Projetos/Repositórios\"}},\"workers\":\"Processos\"},\"ru\":{\"admin\":{\"actions\":{\"create\":\"создать\",\"created\":\"создано\",\"delete\":\"удалить\",\"deleted\":\"удалено\",\"update\":\"обновить\",\"updated\":\"обновлено\"},\"credentials\":{\"log_out\":\"Выход\"},\"dashboard\":{\"add_new\":\"Добавить\",\"ago\":\"назад\",\"last_used\":\"Использовалось в последний раз\",\"model_name\":\"Имя модели\",\"modify\":\"Изменить\",\"name\":\"Панель управления\",\"pagename\":\"Управление сайтом\",\"records\":\"Записи\",\"show\":\"Показать\"},\"delete\":{\"confirmation\":\"Да, я уверен\",\"flash_confirmation\":\"%{name} успешно удалено\"},\"history\":{\"name\":\"История\",\"no_activity\":\"Нет активности\",\"page_name\":\"История %{name}\"},\"list\":{\"add_new\":\"Добавить\",\"delete_action\":\"Удалить\",\"delete_selected\":\"Удалить выбранные\",\"edit_action\":\"Редактировать\",\"search\":\"Поиск\",\"select\":\"Для редактирования выберите %{name}\",\"select_action\":\"Выбрать\",\"show_all\":\"Показать все\"},\"new\":{\"basic_info\":\"Основная информация\",\"cancel\":\"Отмена\",\"chosen\":\"Выбрано %{name}\",\"chose_all\":\"Выбрать все\",\"clear_all\":\"Очистить все\",\"one_char\":\"символ.\",\"optional\":\"Необязательно\",\"required\":\"Обязательно\",\"save\":\"Сохранить\",\"save_and_add_another\":\"Сохранить и добавить другое\",\"save_and_edit\":\"Сохранить и продолжить редактирование\",\"select_choice\":\"Выберите и кликните\",\"many_chars\":\"символов или меньше.\"},\"flash\":{\"error\":\"%{name} не удалось %{action}\",\"noaction\":\"Никаких действий не произведено\",\"successful\":\"%{name} было успешно %{action}\"}},\"build\":{\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\"},\"builds\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Дифф\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине, спонсируемой\"},\"name\":\"Билд\",\"started_at\":\"Начало\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} час\",\"few\":\"%{count} часа\",\"many\":\"%{count} часов\",\"other\":\"%{count} часа\"},\"minutes_exact\":{\"one\":\"%{count} минута\",\"few\":\"%{count} минуты\",\"many\":\"%{count} минут\",\"other\":\"%{count} минуты\"},\"seconds_exact\":{\"one\":\"%{count} секунда\",\"few\":\"%{count} секунды\",\"many\":\"%{count} секунд\",\"other\":\"%{count} секунды\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Ваш аккаунт успешно подтвержден. Приветствуем!\",\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для прохождения процедуры подтверждения аккаунта.\"},\"failure\":{\"inactive\":\"Ваш аккаунт еще не активирован.\",\"invalid\":\"Ошибка в адресе почты или пароле.\",\"invalid_token\":\"Неправильный токен аутентификации.\",\"locked\":\"Ваш аккаунт заблокирован.\",\"timeout\":\"Сессия окончена. Для продолжения работы войдите снова.\",\"unauthenticated\":\"Вам нужно войти или зарегистрироваться.\",\"unconfirmed\":\"Вы должны сначала подтвердить свой аккаунт.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Инструкции для подтверждению аккаунта\"},\"reset_password_instructions\":{\"subject\":\"Инструкции для сброса пароля\"},\"unlock_instructions\":{\"subject\":\"Инструкции для разблокирования аккаунта\"}},\"passwords\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для сброса пароля.\",\"updated\":\"Ваш пароль успешно изменен. Приветствуем!\"},\"registrations\":{\"destroyed\":\"Ваш аккаунт был успешно удален. Живите долго и процветайте!\",\"signed_up\":\"Вы успешно прошли регистрацию. Инструкции для подтверждения аккаунта отправлены на ваш электронный адрес.\",\"updated\":\"Аккаунт успешно обновлен.\"},\"sessions\":{\"signed_in\":\"Приветствуем!\",\"signed_out\":\"Удачи!\"},\"unlocks\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциям для разблокировния аккаунта.\",\"unlocked\":\"Ваш аккаунт успешно разблокирован. Приветствуем!\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"уже подтвержден\",\"not_found\":\"не найден\",\"not_locked\":\"не заблокирован\"}},\"home\":{\"name\":\"Главная\"},\"jobs\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине спонсируемой\"},\"started_at\":\"Начало\"},\"layouts\":{\"about\":{\"alpha\":\"Это альфа-версия\",\"join\":\"Присоединяйтесь к нам и помогайте!\",\"mailing_list\":\"Лист рассылки\",\"messages\":{\"alpha\":\"Пожалуйста, <strong>не</strong> считайте данный сервис стабильным. Мы еще очень далеки от стабильности! <a href='https://github.com/travis-ci'>Подробности</a>\"},\"repository\":\"Репозиторий\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"my_repositories\":\"Мои репозитории\",\"recent\":\"Недавние\",\"search\":\"Поиск\",\"sponsers\":\"Спонсоры\",\"sponsors_link\":\"Список всех наших замечательных спонсоров &rarr;\"},\"mobile\":{\"author\":\"Автор\",\"build\":\"Сборка\",\"build_matrix\":\"Матрица сборок\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\",\"log\":\"Журнал\"},\"top\":{\"admin\":\"Управление\",\"blog\":\"Блог\",\"docs\":\"Документация\",\"github_login\":\"Войти через Github\",\"home\":\"Главная\",\"profile\":\"Профиль\",\"sign_out\":\"Выход\",\"stats\":\"Статистика\"}},\"no_job\":\"Очередь пуста\",\"profiles\":{\"show\":{\"email\":\"Электронная почта\",\"github\":\"Github\",\"message\":{\"config\":\"как настроить специальные опции билда\",\"your_repos\":\"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.<br />\\nДля тестирования на нескольких версиях Ruby смотрите\"},\"messages\":{\"notice\":\"Перед началом, пожалуйста, прочтите <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Руководство для быстрого старта</a>. <small>Это займет всего несколько минут.</small>\"},\"token\":\"Токен\",\"update\":\"Обновить\",\"update_locale\":\"Обновить\",\"your_locale\":\"Ваш язык\",\"your_repos\":\"Ваши репозитории\"}},\"queue\":\"Очередь\",\"repositories\":{\"branch\":\"Ветка\",\"commit\":\"Коммит\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"image_url\":\"URL изображения\",\"markdown\":\"Markdown\",\"message\":\"Комментарий\",\"rdoc\":\"RDOC\",\"started_at\":\"Начало\",\"tabs\":{\"branches\":\"Статус веток\",\"build\":\"Билд\",\"build_history\":\"История\",\"current\":\"Текущий\",\"job\":\"Задача\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Длительность\"},\"statistics\":{\"index\":{\"build_count\":\"Количество билдов\",\"count\":\"Количество\",\"last_month\":\"прошлый месяц\",\"repo_growth\":\"Рост числа репозиториев\",\"total_builds\":\"Всего билдов\",\"total_projects\":\"Всего проектов/репозиториев\"}},\"workers\":\"Машины\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}}};\n\n\n})();\n//@ sourceURL=config/locales");minispade.register('ext/ember/bound_helper', "(function() {// https://gist.github.com/2018185\n// For reference: https://github.com/wagenet/ember.js/blob/ac66dcb8a1cbe91d736074441f853e0da474ee6e/packages/ember-handlebars/lib/views/bound_property_view.js\nvar BoundHelperView = Ember.View.extend(Ember._Metamorph, {\n\n  context: null,\n  options: null,\n  property: null,\n  // paths of the property that are also observed\n  propertyPaths: [],\n\n  value: Ember.K,\n\n  valueForRender: function() {\n    var value = this.value(Ember.get(this.context, this.property), this.options);\n    if (this.options.escaped) { value = Handlebars.Utils.escapeExpression(value); }\n    return value;\n  },\n\n  render: function(buffer) {\n    buffer.push(this.valueForRender());\n  },\n\n  valueDidChange: function() {\n    if (this.morph.isRemoved()) { return; }\n    this.morph.html(this.valueForRender());\n  },\n\n  didInsertElement: function() {\n    this.valueDidChange();\n  },\n\n  init: function() {\n    this._super();\n    Ember.addObserver(this.context, this.property, this, 'valueDidChange');\n    this.get('propertyPaths').forEach(function(propName) {\n        Ember.addObserver(this.context, this.property + '.' + propName, this, 'valueDidChange');\n    }, this);\n  },\n\n  destroy: function() {\n    Ember.removeObserver(this.context, this.property, this, 'valueDidChange');\n    this.get('propertyPaths').forEach(function(propName) {\n        this.context.removeObserver(this.property + '.' + propName, this, 'valueDidChange');\n    }, this);\n    this._super();\n  }\n\n});\n\nEmber.registerBoundHelper = function(name, func) {\n  var propertyPaths = Array.prototype.slice.call(arguments, 2);\n  Ember.Handlebars.registerHelper(name, function(property, options) {\n    var data = options.data,\n        view = data.view,\n        ctx  = this;\n\n    var bindView = view.createChildView(BoundHelperView, {\n      property: property,\n      propertyPaths: propertyPaths,\n      context: ctx,\n      options: options.hash,\n      value: func\n    });\n\n    view.appendChild(bindView);\n  });\n};\n\n\n})();\n//@ sourceURL=ext/ember/bound_helper");minispade.register('ext/ember/namespace', "(function() {Em.Namespace.reopen = Em.Namespace.reopenClass\n\n\n\n})();\n//@ sourceURL=ext/ember/namespace");
\ No newline at end of file
diff --git a/public/scripts/app.min.js b/public/scripts/app.min.js
index 86abf3a1..9489c94c 100644
--- a/public/scripts/app.min.js
+++ b/public/scripts/app.min.js
@@ -2224,9 +2224,9 @@ e.readyState=="complete")&&t()})}function t(t,n){var r=document.getElementsByTag
 ("views"),minispade.require("config/locales"),minispade.require("data/sponsors"),Travis.reopen({App:Em.Application.extend({autoinit:!1,currentUserBinding:"auth.user",authStateBinding:"auth.state",init:
 function(){return this._super.apply(this,arguments),this.store=Travis.Store.create(),this.store.loadMany(Travis.Sponsor,Travis.SPONSORS),this.set("auth",Travis.Auth.create({store:this.store,endpoint:Travis
 .config.api_endpoint})),this.slider=new Travis.Slider,this.pusher=new Travis.Pusher(Travis.config.pusher),this.tailing=new Travis.Tailing},signIn:function(){return this.get("auth").signIn()},signOut:function(
-){return this.get("auth").signOut(),this.get("router").send("showAuthenticated")},receive:function(){return this.store.receive.apply(this.store,arguments)},toggleSidebar:function(){var e;return $("body"
-).toggleClass("maximized"),e=$("<span></span>"),$("#top .profile").append(e),Em.run.later(function(){return e.remove()},10),e=$("<span></span>"),$("#repository").append(e),Em.run.later(function(){return e
-.remove()},10)}})})}).call(this)}),minispade.register("auth",function(){(function(){this.Travis.Auth=Ember.Object.extend({iframe:$('<iframe id="auth-frame" />').hide(),timeout:5e3,state:"signed-out",receivingEnd
+){return this.get("auth").signOut(),this.get("router").send("goToRoot")},receive:function(){return this.store.receive.apply(this.store,arguments)},toggleSidebar:function(){var e;return $("body").toggleClass
+("maximized"),e=$("<span></span>"),$("#top .profile").append(e),Em.run.later(function(){return e.remove()},10),e=$("<span></span>"),$("#repository").append(e),Em.run.later(function(){return e.remove()}
+,10)}})})}).call(this)}),minispade.register("auth",function(){(function(){this.Travis.Auth=Ember.Object.extend({iframe:$('<iframe id="auth-frame" />').hide(),timeout:5e3,state:"signed-out",receivingEnd
 :""+location.protocol+"//"+location.host,init:function(){var e=this;return this.iframe.appendTo("body"),window.addEventListener("message",function(t){return e.receiveMessage(t)}),this.loadUser()},accessToken
 :function(){return sessionStorage.getItem("travis.token")}.property(),loadUser:function(){var e;if(e=typeof sessionStorage!="undefined"&&sessionStorage!==null?sessionStorage.getItem("travis.user"):void 0
 )return this.setData({user:JSON.parse(e)});if(typeof localStorage!="undefined"&&localStorage!==null?localStorage.getItem("travis.auto_signin"):void 0)return this.trySignIn()},signIn:function(){return this
@@ -2366,7 +2366,7 @@ e,n){return t.receive(e,n)})},unsubscribe:function(e){var t;t=this.active_channe
 (e,t)})},normalize:function(e,t){switch(e){case"build:started":case"build:finished":return t;case"job:created":case"job:started":case"job:finished":case"job:log":return t.queue&&(t.queue=t.queue.replace
 ("builds.","")),{job:t};case"worker:added":case"worker:updated":case"worker:removed":return{worker:t}}},warn:function(e,t){if(!this.ignoreWarning(t))return console.warn(t)},ignoreWarning:function(e){var t
 ,n;if(t=(n=e.data)!=null?n.message:void 0)return t.indexOf("Existing subscription")===0||t.indexOf("No current subscription")===0}})}).call(this)}),minispade.register("routes",function(){(function(){Travis
-.Router=Ember.Router.extend({location:"history",enableLogging:!1,initialState:"loading",goToRoot:Ember.Route.transitionTo("root.home.show"),goToStats:Ember.Route.transitionTo("root.stats"),showRepository
+.Router=Ember.Router.extend({location:"history",enableLogging:!0,initialState:"loading",goToRoot:Ember.Route.transitionTo("root.home.show"),goToStats:Ember.Route.transitionTo("root.stats"),showRepository
 :Ember.Route.transitionTo("root.home.repository.show"),showBuilds:Ember.Route.transitionTo("root.home.repository.builds.index"),showBuild:Ember.Route.transitionTo("root.home.repository.builds.show"),showPullRequests
 :Ember.Route.transitionTo("root.home.repository.pullRequests"),showBranches:Ember.Route.transitionTo("root.home.repository.branches"),showJob:Ember.Route.transitionTo("root.home.repository.job"),showProfile
 :Ember.Route.transitionTo("root.profile"),showAccount:Ember.Route.transitionTo("root.profile.account"),showUserProfile:Ember.Route.transitionTo("root.profile.account.profile"),signedIn:function(){return!!
diff --git a/public/version b/public/version
index 88d5aa92..495f915b 100644
--- a/public/version
+++ b/public/version
@@ -1 +1 @@
-d2d014c4
\ No newline at end of file
+096c4ea9
\ No newline at end of file