diff --git a/app/commands.py b/app/commands.py
index eec4bc016d1d64f27e58220ed1fa7ed720839fa7..2ff6dd6b294e58f06521ce9ef505db46502f98e8 100644
--- a/app/commands.py
+++ b/app/commands.py
@@ -13,10 +13,9 @@ import ldap3
 import redis
 import rq
 import sqlalchemy as sa
+import sentry_sdk
 from flask import current_app
-from rq.contrib.sentry import register_sentry
-from raven import Client
-from raven.transport.http import HTTPTransport
+from sentry_sdk.integrations.rq import RqIntegration
 from .extensions import db, ldap_manager
 from .defaults import defaults
 from .tasks import TaskWorker
@@ -108,13 +107,11 @@ def register_cli(app):
         with rq.Connection(redis_connection):
             worker = TaskWorker(["high", "normal", "low"])
             if current_app.config["SENTRY_DSN"]:
-                client = Client(
+                sentry_sdk.init(
                     current_app.config["SENTRY_DSN"],
-                    transport=HTTPTransport,
                     environment=current_app.config["CSENTRY_ENVIRONMENT"],
-                    release=current_app.config["CSENTRY_RELEASE"],
+                    integrations=[RqIntegration()],
                 )
-                register_sentry(client, worker)
             worker.work()
 
     @app.cli.command()
diff --git a/app/extensions.py b/app/extensions.py
index 8e18dce656f4a2842a525d6d9bc4ee2664621f76..e8e7bc105401276541a4d68c093961025aee9083 100644
--- a/app/extensions.py
+++ b/app/extensions.py
@@ -21,7 +21,6 @@ from flask_debugtoolbar import DebugToolbarExtension
 from flask_redis import FlaskRedis
 from flask_session import Session
 from flask_caching import Cache
-from raven.contrib.flask import Sentry
 
 
 convention = {
@@ -44,4 +43,3 @@ toolbar = DebugToolbarExtension()
 session_redis_store = FlaskRedis(config_prefix="SESSION_REDIS")
 fsession = Session()
 cache = Cache()
-sentry = Sentry()
diff --git a/app/factory.py b/app/factory.py
index ce07c1c9dd0156eb03ea5bcb988a990ef7e53284..805fb552fa0bb19b2493b8be568c0591c54b0008 100644
--- a/app/factory.py
+++ b/app/factory.py
@@ -12,9 +12,11 @@ Create the WSGI application.
 import logging
 import sqlalchemy as sa
 import rq_dashboard
+import sentry_sdk
 from flask import Flask
 from whitenoise import WhiteNoise
 from elasticsearch import Elasticsearch
+from sentry_sdk.integrations.flask import FlaskIntegration
 from . import settings, models
 from .extensions import (
     db,
@@ -28,7 +30,6 @@ from .extensions import (
     session_redis_store,
     fsession,
     cache,
-    sentry,
 )
 from .admin.views import (
     AdminModelView,
@@ -62,11 +63,11 @@ def create_app(config=None):
     app.jinja_env.filters["toyaml"] = utils.pretty_yaml
 
     if app.config["SENTRY_DSN"]:
-        # CSENTRY_ENVIRONMENT can be overwritten in the local settings
-        # We can't define SENTRY_ENVIRONMENT before loading them
-        app.config["SENTRY_ENVIRONMENT"] = app.config["CSENTRY_ENVIRONMENT"]
-        sentry.init_app(
-            app, dsn=app.config["SENTRY_DSN"], logging=True, level=logging.ERROR
+        sentry_sdk.init(
+            dsn=app.config["SENTRY_DSN"],
+            environment=app.config["CSENTRY_ENVIRONMENT"],
+            send_default_pii=True,
+            integrations=[FlaskIntegration()],
         )
 
     if not app.debug:
diff --git a/app/main/views.py b/app/main/views.py
index ef4ca6a48ec0159178f04f2c459c2cb6685f8267..46d5cda26a2f0a930bb008818dcc5df4e1010e46 100644
--- a/app/main/views.py
+++ b/app/main/views.py
@@ -16,7 +16,7 @@ import rq_dashboard
 from flask import Blueprint, render_template, jsonify, g, current_app, abort, request
 from flask_login import login_required, current_user
 from rq import push_connection, pop_connection
-from ..extensions import sentry
+from sentry_sdk import last_event_id
 from .. import utils
 
 bp = Blueprint("main", __name__)
@@ -50,13 +50,7 @@ def not_found_error(error):
 
 @bp.app_errorhandler(500)
 def internal_error(error):
-    if current_app.config["SENTRY_DSN"]:
-        event_id = g.sentry_event_id
-        public_dsn = sentry.client.get_public_dsn("https")
-    else:
-        event_id = ""
-        public_dsn = ""
-    return render_template("500.html", event_id=event_id, public_dsn=public_dsn), 500
+    return (render_template("500.html", sentry_event_id=last_event_id()), 500)
 
 
 @bp.app_errorhandler(utils.CSEntryError)
diff --git a/app/settings.py b/app/settings.py
index fd7af2898ac5d11089ab2cf843c150e72aece375..b2b1ecc56623c004e42f33faa89da4ed305159f2 100644
--- a/app/settings.py
+++ b/app/settings.py
@@ -11,7 +11,6 @@ This module implements the app default settings.
 """
 import base64
 import os
-import raven
 from pathlib import Path
 from datetime import timedelta
 
@@ -141,11 +140,8 @@ include: 'https://gitlab.esss.lu.se/ics-infrastructure/gitlab-ci-yml/raw/master/
 """
 
 # Sentry integration
-CSENTRY_RELEASE = raven.fetch_git_sha(Path(__file__).parents[1])
 # Leave to empty string to disable sentry integration
 SENTRY_DSN = os.environ.get("SENTRY_DSN", "")
-SENTRY_USER_ATTRS = ["username"]
-SENTRY_CONFIG = {"release": CSENTRY_RELEASE}
 
 # Static local files
 CSENTRY_STATIC_DIR = Path(__file__).parent / "static"
diff --git a/app/static/js/raven.min.js b/app/static/js/raven.min.js
deleted file mode 100644
index 619c432da7d4b5670e6a3a3ab0f53c3067b8b2c6..0000000000000000000000000000000000000000
--- a/app/static/js/raven.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Raven.js 3.27.0 (7ea4d0dd) | github.com/getsentry/raven-js */
-!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.Raven=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){function d(a){this.name="RavenConfigError",this.message=a}d.prototype=new Error,d.prototype.constructor=d,b.exports=d},{}],2:[function(a,b,c){var d=a(5),e=function(a,b,c){var e=a[b],f=a;if(b in a){var g="warn"===b?"warning":b;a[b]=function(){var a=[].slice.call(arguments),h=d.safeJoin(a," "),i={level:g,logger:"console",extra:{arguments:a}};"assert"===b?a[0]===!1&&(h="Assertion failed: "+(d.safeJoin(a.slice(1)," ")||"console.assert"),i.extra.arguments=a.slice(1),c&&c(h,i)):c&&c(h,i),e&&Function.prototype.apply.call(e,f,a)}}};b.exports={wrapMethod:e}},{5:5}],3:[function(a,b,c){(function(c){function d(){return+new Date}function e(a,b){return s(b)?function(c){return b(c,a)}:b}function f(){this.a=!("object"!=typeof JSON||!JSON.stringify),this.b=!r(S),this.c=!r(T),this.d=null,this.e=null,this.f=null,this.g=null,this.h=null,this.i=null,this.j={},this.k={release:R.SENTRY_RELEASE&&R.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this.l={method:"POST",referrerPolicy:K()?"origin":""},this.m=0,this.n=!1,this.o=Error.stackTraceLimit,this.p=R.console||{},this.q={},this.r=[],this.s=d(),this.t=[],this.u=[],this.v=null,this.w=R.location,this.x=this.w&&this.w.href,this.y();for(var a in this.p)this.q[a]=this.p[a]}var g=a(6),h=a(7),i=a(8),j=a(1),k=a(5),l=k.isErrorEvent,m=k.isDOMError,n=k.isDOMException,o=k.isError,p=k.isObject,q=k.isPlainObject,r=k.isUndefined,s=k.isFunction,t=k.isString,u=k.isArray,v=k.isEmptyObject,w=k.each,x=k.objectMerge,y=k.truncate,z=k.objectFrozen,A=k.hasKey,B=k.joinRegExp,C=k.urlencode,D=k.uuid4,E=k.htmlTreeAsString,F=k.isSameException,G=k.isSameStacktrace,H=k.parseUrl,I=k.fill,J=k.supportsFetch,K=k.supportsReferrerPolicy,L=k.serializeKeysForMessage,M=k.serializeException,N=k.sanitize,O=a(2).wrapMethod,P="source protocol user pass host port path".split(" "),Q=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/,R="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},S=R.document,T=R.navigator;f.prototype={VERSION:"3.27.0",debug:!1,TraceKit:g,config:function(a,b){var c=this;if(c.g)return this.z("error","Error: Raven has already been configured"),c;if(!a)return c;var d=c.k;b&&w(b,function(a,b){"tags"===a||"extra"===a||"user"===a?c.j[a]=b:d[a]=b}),c.setDSN(a),d.ignoreErrors.push(/^Script error\.?$/),d.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),d.ignoreErrors=B(d.ignoreErrors),d.ignoreUrls=!!d.ignoreUrls.length&&B(d.ignoreUrls),d.whitelistUrls=!!d.whitelistUrls.length&&B(d.whitelistUrls),d.includePaths=B(d.includePaths),d.maxBreadcrumbs=Math.max(0,Math.min(d.maxBreadcrumbs||100,100));var e={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},f=d.autoBreadcrumbs;"[object Object]"==={}.toString.call(f)?f=x(e,f):f!==!1&&(f=e),d.autoBreadcrumbs=f;var h={tryCatch:!0},i=d.instrument;return"[object Object]"==={}.toString.call(i)?i=x(h,i):i!==!1&&(i=h),d.instrument=i,g.collectWindowErrors=!!d.collectWindowErrors,c},install:function(){var a=this;return a.isSetup()&&!a.n&&(g.report.subscribe(function(){a.A.apply(a,arguments)}),a.k.captureUnhandledRejections&&a.B(),a.C(),a.k.instrument&&a.k.instrument.tryCatch&&a.D(),a.k.autoBreadcrumbs&&a.E(),a.F(),a.n=!0),Error.stackTraceLimit=a.k.stackTraceLimit,this},setDSN:function(a){var b=this,c=b.G(a),d=c.path.lastIndexOf("/"),e=c.path.substr(1,d);b.H=a,b.h=c.user,b.I=c.pass&&c.pass.substr(1),b.i=c.path.substr(d+1),b.g=b.J(c),b.K=b.g+"/"+e+"api/"+b.i+"/store/",this.y()},context:function(a,b,c){return s(a)&&(c=b||[],b=a,a={}),this.wrap(a,b).apply(this,c)},wrap:function(a,b,c){function d(){var d=[],f=arguments.length,g=!a||a&&a.deep!==!1;for(c&&s(c)&&c.apply(this,arguments);f--;)d[f]=g?e.wrap(a,arguments[f]):arguments[f];try{return b.apply(this,d)}catch(h){throw e.L(),e.captureException(h,a),h}}var e=this;if(r(b)&&!s(a))return a;if(s(a)&&(b=a,a=void 0),!s(b))return b;try{if(b.M)return b;if(b.N)return b.N}catch(f){return b}for(var g in b)A(b,g)&&(d[g]=b[g]);return d.prototype=b.prototype,b.N=d,d.M=!0,d.O=b,d},uninstall:function(){return g.report.uninstall(),this.P(),this.Q(),this.R(),this.S(),Error.stackTraceLimit=this.o,this.n=!1,this},T:function(a){this.z("debug","Raven caught unhandled promise rejection:",a),this.captureException(a.reason,{mechanism:{type:"onunhandledrejection",handled:!1}})},B:function(){return this.T=this.T.bind(this),R.addEventListener&&R.addEventListener("unhandledrejection",this.T),this},P:function(){return R.removeEventListener&&R.removeEventListener("unhandledrejection",this.T),this},captureException:function(a,b){if(b=x({trimHeadFrames:0},b?b:{}),l(a)&&a.error)a=a.error;else{if(m(a)||n(a)){var c=a.name||(m(a)?"DOMError":"DOMException"),d=a.message?c+": "+a.message:c;return this.captureMessage(d,x(b,{stacktrace:!0,trimHeadFrames:b.trimHeadFrames+1}))}if(o(a))a=a;else{if(!q(a))return this.captureMessage(a,x(b,{stacktrace:!0,trimHeadFrames:b.trimHeadFrames+1}));b=this.U(b,a),a=new Error(b.message)}}this.d=a;try{var e=g.computeStackTrace(a);this.V(e,b)}catch(f){if(a!==f)throw f}return this},U:function(a,b){var c=Object.keys(b).sort(),d=x(a,{message:"Non-Error exception captured with keys: "+L(c),fingerprint:[i(c)],extra:a.extra||{}});return d.extra.W=M(b),d},captureMessage:function(a,b){if(!this.k.ignoreErrors.test||!this.k.ignoreErrors.test(a)){b=b||{},a+="";var c,d=x({message:a},b);try{throw new Error(a)}catch(e){c=e}c.name=null;var f=g.computeStackTrace(c),h=u(f.stack)&&f.stack[1];h&&"Raven.captureException"===h.func&&(h=f.stack[2]);var i=h&&h.url||"";if((!this.k.ignoreUrls.test||!this.k.ignoreUrls.test(i))&&(!this.k.whitelistUrls.test||this.k.whitelistUrls.test(i))){if(this.k.stacktrace||b.stacktrace||""===d.message){d.fingerprint=null==d.fingerprint?a:d.fingerprint,b=x({trimHeadFrames:0},b),b.trimHeadFrames+=1;var j=this.X(f,b);d.stacktrace={frames:j.reverse()}}return d.fingerprint&&(d.fingerprint=u(d.fingerprint)?d.fingerprint:[d.fingerprint]),this.Y(d),this}}},captureBreadcrumb:function(a){var b=x({timestamp:d()/1e3},a);if(s(this.k.breadcrumbCallback)){var c=this.k.breadcrumbCallback(b);if(p(c)&&!v(c))b=c;else if(c===!1)return this}return this.u.push(b),this.u.length>this.k.maxBreadcrumbs&&this.u.shift(),this},addPlugin:function(a){var b=[].slice.call(arguments,1);return this.r.push([a,b]),this.n&&this.F(),this},setUserContext:function(a){return this.j.user=a,this},setExtraContext:function(a){return this.Z("extra",a),this},setTagsContext:function(a){return this.Z("tags",a),this},clearContext:function(){return this.j={},this},getContext:function(){return JSON.parse(h(this.j))},setEnvironment:function(a){return this.k.environment=a,this},setRelease:function(a){return this.k.release=a,this},setDataCallback:function(a){var b=this.k.dataCallback;return this.k.dataCallback=e(b,a),this},setBreadcrumbCallback:function(a){var b=this.k.breadcrumbCallback;return this.k.breadcrumbCallback=e(b,a),this},setShouldSendCallback:function(a){var b=this.k.shouldSendCallback;return this.k.shouldSendCallback=e(b,a),this},setTransport:function(a){return this.k.transport=a,this},lastException:function(){return this.d},lastEventId:function(){return this.f},isSetup:function(){return!!this.a&&(!!this.g||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this.z("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var a=R.RavenConfig;a&&this.config(a.dsn,a.config).install()},showReportDialog:function(a){if(S){if(a=x({eventId:this.lastEventId(),dsn:this.H,user:this.j.user||{}},a),!a.eventId)throw new j("Missing eventId");if(!a.dsn)throw new j("Missing DSN");var b=encodeURIComponent,c=[];for(var d in a)if("user"===d){var e=a.user;e.name&&c.push("name="+b(e.name)),e.email&&c.push("email="+b(e.email))}else c.push(b(d)+"="+b(a[d]));var f=this.J(this.G(a.dsn)),g=S.createElement("script");g.async=!0,g.src=f+"/api/embed/error-page/?"+c.join("&"),(S.head||S.body).appendChild(g)}},L:function(){var a=this;this.m+=1,setTimeout(function(){a.m-=1})},$:function(a,b){var c,d;if(this.b){b=b||{},a="raven"+a.substr(0,1).toUpperCase()+a.substr(1),S.createEvent?(c=S.createEvent("HTMLEvents"),c.initEvent(a,!0,!0)):(c=S.createEventObject(),c.eventType=a);for(d in b)A(b,d)&&(c[d]=b[d]);if(S.createEvent)S.dispatchEvent(c);else try{S.fireEvent("on"+c.eventType.toLowerCase(),c)}catch(e){}}},_:function(a){var b=this;return function(c){if(b.aa=null,b.v!==c){b.v=c;var d;try{d=E(c.target)}catch(e){d="<unknown>"}b.captureBreadcrumb({category:"ui."+a,message:d})}}},ba:function(){var a=this,b=1e3;return function(c){var d;try{d=c.target}catch(e){return}var f=d&&d.tagName;if(f&&("INPUT"===f||"TEXTAREA"===f||d.isContentEditable)){var g=a.aa;g||a._("input")(c),clearTimeout(g),a.aa=setTimeout(function(){a.aa=null},b)}}},ca:function(a,b){var c=H(this.w.href),d=H(b),e=H(a);this.x=b,c.protocol===d.protocol&&c.host===d.host&&(b=d.relative),c.protocol===e.protocol&&c.host===e.host&&(a=e.relative),this.captureBreadcrumb({category:"navigation",data:{to:b,from:a}})},C:function(){var a=this;a.da=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.M?a.da.apply(this.O,arguments):a.da.apply(this,arguments)}},Q:function(){this.da&&(Function.prototype.toString=this.da)},D:function(){function a(a){return function(b,d){for(var e=new Array(arguments.length),f=0;f<e.length;++f)e[f]=arguments[f];var g=e[0];return s(g)&&(e[0]=c.wrap({mechanism:{type:"instrument",data:{"function":a.name||"<anonymous>"}}},g)),a.apply?a.apply(this,e):a(e[0],e[1])}}function b(a){var b=R[a]&&R[a].prototype;b&&b.hasOwnProperty&&b.hasOwnProperty("addEventListener")&&(I(b,"addEventListener",function(b){return function(d,f,g,h){try{f&&f.handleEvent&&(f.handleEvent=c.wrap({mechanism:{type:"instrument",data:{target:a,"function":"handleEvent",handler:f&&f.name||"<anonymous>"}}},f.handleEvent))}catch(i){}var j,k,l;return e&&e.dom&&("EventTarget"===a||"Node"===a)&&(k=c._("click"),l=c.ba(),j=function(a){if(a){var b;try{b=a.type}catch(c){return}return"click"===b?k(a):"keypress"===b?l(a):void 0}}),b.call(this,d,c.wrap({mechanism:{type:"instrument",data:{target:a,"function":"addEventListener",handler:f&&f.name||"<anonymous>"}}},f,j),g,h)}},d),I(b,"removeEventListener",function(a){return function(b,c,d,e){try{c=c&&(c.N?c.N:c)}catch(f){}return a.call(this,b,c,d,e)}},d))}var c=this,d=c.t,e=this.k.autoBreadcrumbs;I(R,"setTimeout",a,d),I(R,"setInterval",a,d),R.requestAnimationFrame&&I(R,"requestAnimationFrame",function(a){return function(b){return a(c.wrap({mechanism:{type:"instrument",data:{"function":"requestAnimationFrame",handler:a&&a.name||"<anonymous>"}}},b))}},d);for(var f=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],g=0;g<f.length;g++)b(f[g])},E:function(){function a(a,c){a in c&&s(c[a])&&I(c,a,function(c){return b.wrap({mechanism:{type:"instrument",data:{"function":a,handler:c&&c.name||"<anonymous>"}}},c)})}var b=this,c=this.k.autoBreadcrumbs,d=b.t;if(c.xhr&&"XMLHttpRequest"in R){var e=R.XMLHttpRequest&&R.XMLHttpRequest.prototype;I(e,"open",function(a){return function(c,d){return t(d)&&d.indexOf(b.h)===-1&&(this.ea={method:c,url:d,status_code:null}),a.apply(this,arguments)}},d),I(e,"send",function(c){return function(){function d(){if(e.ea&&4===e.readyState){try{e.ea.status_code=e.status}catch(a){}b.captureBreadcrumb({type:"http",category:"xhr",data:e.ea})}}for(var e=this,f=["onload","onerror","onprogress"],g=0;g<f.length;g++)a(f[g],e);return"onreadystatechange"in e&&s(e.onreadystatechange)?I(e,"onreadystatechange",function(a){return b.wrap({mechanism:{type:"instrument",data:{"function":"onreadystatechange",handler:a&&a.name||"<anonymous>"}}},a,d)}):e.onreadystatechange=d,c.apply(this,arguments)}},d)}c.xhr&&J()&&I(R,"fetch",function(a){return function(){for(var c=new Array(arguments.length),d=0;d<c.length;++d)c[d]=arguments[d];var e,f=c[0],g="GET";if("string"==typeof f?e=f:"Request"in R&&f instanceof R.Request?(e=f.url,f.method&&(g=f.method)):e=""+f,e.indexOf(b.h)!==-1)return a.apply(this,c);c[1]&&c[1].method&&(g=c[1].method);var h={method:g,url:e,status_code:null};return a.apply(this,c).then(function(a){return h.status_code=a.status,b.captureBreadcrumb({type:"http",category:"fetch",data:h}),a})["catch"](function(a){throw b.captureBreadcrumb({type:"http",category:"fetch",data:h,level:"error"}),a})}},d),c.dom&&this.b&&(S.addEventListener?(S.addEventListener("click",b._("click"),!1),S.addEventListener("keypress",b.ba(),!1)):S.attachEvent&&(S.attachEvent("onclick",b._("click")),S.attachEvent("onkeypress",b.ba())));var f=R.chrome,g=f&&f.app&&f.app.runtime,h=!g&&R.history&&R.history.pushState&&R.history.replaceState;if(c.location&&h){var i=R.onpopstate;R.onpopstate=function(){var a=b.w.href;if(b.ca(b.x,a),i)return i.apply(this,arguments)};var j=function(a){return function(){var c=arguments.length>2?arguments[2]:void 0;return c&&b.ca(b.x,c+""),a.apply(this,arguments)}};I(R.history,"pushState",j,d),I(R.history,"replaceState",j,d)}if(c.console&&"console"in R&&console.log){var k=function(a,c){b.captureBreadcrumb({message:a,level:c.level,category:"console"})};w(["debug","info","warn","error","log"],function(a,b){O(console,b,k)})}},R:function(){for(var a;this.t.length;){a=this.t.shift();var b=a[0],c=a[1],d=a[2];b[c]=d}},S:function(){for(var a in this.q)this.p[a]=this.q[a]},F:function(){var a=this;w(this.r,function(b,c){var d=c[0],e=c[1];d.apply(a,[a].concat(e))})},G:function(a){var b=Q.exec(a),c={},d=7;try{for(;d--;)c[P[d]]=b[d]||""}catch(e){throw new j("Invalid DSN: "+a)}if(c.pass&&!this.k.allowSecretKey)throw new j("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return c},J:function(a){var b="//"+a.host+(a.port?":"+a.port:"");return a.protocol&&(b=a.protocol+":"+b),b},A:function(a,b){b=b||{},b.mechanism=b.mechanism||{type:"onerror",handled:!1},this.m||this.V(a,b)},V:function(a,b){var c=this.X(a,b);this.$("handle",{stackInfo:a,options:b}),this.fa(a.name,a.message,a.url,a.lineno,c,b)},X:function(a,b){var c=this,d=[];if(a.stack&&a.stack.length&&(w(a.stack,function(b,e){var f=c.ga(e,a.url);f&&d.push(f)}),b&&b.trimHeadFrames))for(var e=0;e<b.trimHeadFrames&&e<d.length;e++)d[e].in_app=!1;return d=d.slice(0,this.k.stackTraceLimit)},ga:function(a,b){var c={filename:a.url,lineno:a.line,colno:a.column,"function":a.func||"?"};return a.url||(c.filename=b),c.in_app=!(this.k.includePaths.test&&!this.k.includePaths.test(c.filename)||/(Raven|TraceKit)\./.test(c["function"])||/raven\.(min\.)?js$/.test(c.filename)),c},fa:function(a,b,c,d,e,f){var g=(a?a+": ":"")+(b||"");if(!this.k.ignoreErrors.test||!this.k.ignoreErrors.test(b)&&!this.k.ignoreErrors.test(g)){var h;if(e&&e.length?(c=e[0].filename||c,e.reverse(),h={frames:e}):c&&(h={frames:[{filename:c,lineno:d,in_app:!0}]}),(!this.k.ignoreUrls.test||!this.k.ignoreUrls.test(c))&&(!this.k.whitelistUrls.test||this.k.whitelistUrls.test(c))){var i=x({exception:{values:[{type:a,value:b,stacktrace:h}]},transaction:c},f),j=i.exception.values[0];null==j.type&&""===j.value&&(j.value="Unrecoverable error caught"),!i.exception.mechanism&&i.mechanism&&(i.exception.mechanism=i.mechanism,delete i.mechanism),i.exception.mechanism=x({type:"generic",handled:!0},i.exception.mechanism||{}),this.Y(i)}}},ha:function(a){var b=this.k.maxMessageLength;if(a.message&&(a.message=y(a.message,b)),a.exception){var c=a.exception.values[0];c.value=y(c.value,b)}var d=a.request;return d&&(d.url&&(d.url=y(d.url,this.k.maxUrlLength)),d.Referer&&(d.Referer=y(d.Referer,this.k.maxUrlLength))),a.breadcrumbs&&a.breadcrumbs.values&&this.ia(a.breadcrumbs),a},ia:function(a){for(var b,c,d,e=["to","from","url"],f=0;f<a.values.length;++f)if(c=a.values[f],c.hasOwnProperty("data")&&p(c.data)&&!z(c.data)){d=x({},c.data);for(var g=0;g<e.length;++g)b=e[g],d.hasOwnProperty(b)&&d[b]&&(d[b]=y(d[b],this.k.maxUrlLength));a.values[f].data=d}},ja:function(){if(this.c||this.b){var a={};return this.c&&T.userAgent&&(a.headers={"User-Agent":T.userAgent}),R.location&&R.location.href&&(a.url=R.location.href),this.b&&S.referrer&&(a.headers||(a.headers={}),a.headers.Referer=S.referrer),a}},y:function(){this.ka=0,this.la=null},ma:function(){return this.ka&&d()-this.la<this.ka},na:function(a){var b=this.e;return!(!b||a.message!==b.message||a.transaction!==b.transaction)&&(a.stacktrace||b.stacktrace?G(a.stacktrace,b.stacktrace):!a.exception&&!b.exception||F(a.exception,b.exception))},oa:function(a){if(!this.ma()){var b=a.status;if(400===b||401===b||429===b){var c;try{c=J()?a.headers.get("Retry-After"):a.getResponseHeader("Retry-After"),c=1e3*parseInt(c,10)}catch(e){}this.ka=c?c:2*this.ka||1e3,this.la=d()}}},Y:function(a){var b=this.k,c={project:this.i,logger:b.logger,platform:"javascript"},e=this.ja();if(e&&(c.request=e),a.trimHeadFrames&&delete a.trimHeadFrames,a=x(c,a),a.tags=x(x({},this.j.tags),a.tags),a.extra=x(x({},this.j.extra),a.extra),a.extra["session:duration"]=d()-this.s,this.u&&this.u.length>0&&(a.breadcrumbs={values:[].slice.call(this.u,0)}),this.j.user&&(a.user=this.j.user),b.environment&&(a.environment=b.environment),b.release&&(a.release=b.release),b.serverName&&(a.server_name=b.serverName),a=this.pa(a),Object.keys(a).forEach(function(b){(null==a[b]||""===a[b]||v(a[b]))&&delete a[b]}),s(b.dataCallback)&&(a=b.dataCallback(a)||a),a&&!v(a)&&(!s(b.shouldSendCallback)||b.shouldSendCallback(a)))return this.ma()?void this.z("warn","Raven dropped error due to backoff: ",a):void("number"==typeof b.sampleRate?Math.random()<b.sampleRate&&this.qa(a):this.qa(a))},pa:function(a){return N(a,this.k.sanitizeKeys)},ra:function(){return D()},qa:function(a,b){var c=this,d=this.k;if(this.isSetup()){if(a=this.ha(a),!this.k.allowDuplicates&&this.na(a))return void this.z("warn","Raven dropped repeat event: ",a);this.f=a.event_id||(a.event_id=this.ra()),this.e=a,this.z("debug","Raven about to send:",a);var e={sentry_version:"7",sentry_client:"raven-js/"+this.VERSION,sentry_key:this.h};this.I&&(e.sentry_secret=this.I);var f=a.exception&&a.exception.values[0];this.k.autoBreadcrumbs&&this.k.autoBreadcrumbs.sentry&&this.captureBreadcrumb({category:"sentry",message:f?(f.type?f.type+": ":"")+f.value:a.message,event_id:a.event_id,level:a.level||"error"});var g=this.K;(d.transport||this._makeRequest).call(this,{url:g,auth:e,data:a,options:d,onSuccess:function(){c.y(),c.$("success",{data:a,src:g}),b&&b()},onError:function(d){c.z("error","Raven transport failed to send: ",d),d.request&&c.oa(d.request),c.$("failure",{data:a,src:g}),d=d||new Error("Raven send failed (no additional details provided)"),b&&b(d)}})}},_makeRequest:function(a){var b=a.url+"?"+C(a.auth),c=null,d={};if(a.options.headers&&(c=this.sa(a.options.headers)),a.options.fetchParameters&&(d=this.sa(a.options.fetchParameters)),J()){d.body=h(a.data);var e=x({},this.l),f=x(e,d);return c&&(f.headers=c),R.fetch(b,f).then(function(b){if(b.ok)a.onSuccess&&a.onSuccess();else{var c=new Error("Sentry error code: "+b.status);c.request=b,a.onError&&a.onError(c)}})["catch"](function(){a.onError&&a.onError(new Error("Sentry error code: network unavailable"))})}var g=R.XMLHttpRequest&&new R.XMLHttpRequest;if(g){var i="withCredentials"in g||"undefined"!=typeof XDomainRequest;i&&("withCredentials"in g?g.onreadystatechange=function(){if(4===g.readyState)if(200===g.status)a.onSuccess&&a.onSuccess();else if(a.onError){var b=new Error("Sentry error code: "+g.status);b.request=g,a.onError(b)}}:(g=new XDomainRequest,b=b.replace(/^https?:/,""),a.onSuccess&&(g.onload=a.onSuccess),a.onError&&(g.onerror=function(){var b=new Error("Sentry error code: XDomainRequest");b.request=g,a.onError(b)})),g.open("POST",b),c&&w(c,function(a,b){g.setRequestHeader(a,b)}),g.send(h(a.data)))}},sa:function(a){var b={};for(var c in a)if(a.hasOwnProperty(c)){var d=a[c];b[c]="function"==typeof d?d():d}return b},z:function(a){this.q[a]&&(this.debug||this.k.debug)&&Function.prototype.apply.call(this.q[a],this.p,[].slice.call(arguments,1))},Z:function(a,b){r(b)?delete this.j[a]:this.j[a]=x(this.j[a]||{},b)}},f.prototype.setUser=f.prototype.setUserContext,f.prototype.setReleaseContext=f.prototype.setRelease,b.exports=f}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{1:1,2:2,5:5,6:6,7:7,8:8}],4:[function(a,b,c){(function(c){var d=a(3),e="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},f=e.Raven,g=new d;g.noConflict=function(){return e.Raven=f,g},g.afterLoad(),b.exports=g,b.exports.Client=d}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{3:3}],5:[function(a,b,c){(function(c){function d(a){return"object"==typeof a&&null!==a}function e(a){switch(Object.prototype.toString.call(a)){case"[object Error]":return!0;case"[object Exception]":return!0;case"[object DOMException]":return!0;default:return a instanceof Error}}function f(a){return"[object ErrorEvent]"===Object.prototype.toString.call(a)}function g(a){return"[object DOMError]"===Object.prototype.toString.call(a)}function h(a){return"[object DOMException]"===Object.prototype.toString.call(a)}function i(a){return void 0===a}function j(a){return"function"==typeof a}function k(a){return"[object Object]"===Object.prototype.toString.call(a)}function l(a){return"[object String]"===Object.prototype.toString.call(a)}function m(a){return"[object Array]"===Object.prototype.toString.call(a)}function n(a){if(!k(a))return!1;for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}function o(){try{return new ErrorEvent(""),!0}catch(a){return!1}}function p(){try{return new DOMError(""),!0}catch(a){return!1}}function q(){try{return new DOMException(""),!0}catch(a){return!1}}function r(){if(!("fetch"in U))return!1;try{return new Headers,new Request(""),new Response,!0}catch(a){return!1}}function s(){if(!r())return!1;try{return new Request("pickleRick",{referrerPolicy:"origin"}),!0}catch(a){return!1}}function t(){return"function"==typeof PromiseRejectionEvent}function u(a){function b(b,c){var d=a(b)||b;return c?c(d)||d:d}return b}function v(a,b){var c,d;if(i(a.length))for(c in a)z(a,c)&&b.call(null,c,a[c]);else if(d=a.length)for(c=0;c<d;c++)b.call(null,c,a[c])}function w(a,b){return b?(v(b,function(b,c){a[b]=c}),a):a}function x(a){return!!Object.isFrozen&&Object.isFrozen(a)}function y(a,b){if("number"!=typeof b)throw new Error("2nd argument to `truncate` function should be a number");return"string"!=typeof a||0===b?a:a.length<=b?a:a.substr(0,b)+"…"}function z(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function A(a){for(var b,c=[],d=0,e=a.length;d<e;d++)b=a[d],l(b)?c.push(b.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")):b&&b.source&&c.push(b.source);return new RegExp(c.join("|"),"i")}function B(a){var b=[];return v(a,function(a,c){b.push(encodeURIComponent(a)+"="+encodeURIComponent(c))}),b.join("&")}function C(a){if("string"!=typeof a)return{};var b=a.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),c=b[6]||"",d=b[8]||"";return{protocol:b[2],host:b[4],path:b[5],relative:b[5]+c+d}}function D(){var a=U.crypto||U.msCrypto;if(!i(a)&&a.getRandomValues){var b=new Uint16Array(8);a.getRandomValues(b),b[3]=4095&b[3]|16384,b[4]=16383&b[4]|32768;var c=function(a){for(var b=a.toString(16);b.length<4;)b="0"+b;return b};return c(b[0])+c(b[1])+c(b[2])+c(b[3])+c(b[4])+c(b[5])+c(b[6])+c(b[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"===a?b:3&b|8;return c.toString(16)})}function E(a){for(var b,c=5,d=80,e=[],f=0,g=0,h=" > ",i=h.length;a&&f++<c&&(b=F(a),!("html"===b||f>1&&g+e.length*i+b.length>=d));)e.push(b),g+=b.length,a=a.parentNode;return e.reverse().join(h)}function F(a){var b,c,d,e,f,g=[];if(!a||!a.tagName)return"";if(g.push(a.tagName.toLowerCase()),a.id&&g.push("#"+a.id),b=a.className,b&&l(b))for(c=b.split(/\s+/),f=0;f<c.length;f++)g.push("."+c[f]);var h=["type","name","title","alt"];for(f=0;f<h.length;f++)d=h[f],e=a.getAttribute(d),e&&g.push("["+d+'="'+e+'"]');return g.join("")}function G(a,b){return!!(!!a^!!b)}function H(a,b){return i(a)&&i(b)}function I(a,b){return!G(a,b)&&(a=a.values[0],b=b.values[0],a.type===b.type&&a.value===b.value&&(!H(a.stacktrace,b.stacktrace)&&J(a.stacktrace,b.stacktrace)))}function J(a,b){if(G(a,b))return!1;var c=a.frames,d=b.frames;if(void 0===c||void 0===d)return!1;if(c.length!==d.length)return!1;for(var e,f,g=0;g<c.length;g++)if(e=c[g],f=d[g],e.filename!==f.filename||e.lineno!==f.lineno||e.colno!==f.colno||e["function"]!==f["function"])return!1;return!0}function K(a,b,c,d){if(null!=a){var e=a[b];a[b]=c(e),a[b].M=!0,a[b].O=e,d&&d.push([a,b,e])}}function L(a,b){if(!m(a))return"";for(var c=[],d=0;d<a.length;d++)try{c.push(String(a[d]))}catch(e){c.push("[value cannot be serialized]")}return c.join(b)}function M(a){return~-encodeURI(a).split(/%..|./).length}function N(a){return M(JSON.stringify(a))}function O(a){if("string"==typeof a){var b=40;return y(a,b)}if("number"==typeof a||"boolean"==typeof a||"undefined"==typeof a)return a;var c=Object.prototype.toString.call(a);return"[object Object]"===c?"[Object]":"[object Array]"===c?"[Array]":"[object Function]"===c?a.name?"[Function: "+a.name+"]":"[Function]":a}function P(a,b){return 0===b?O(a):k(a)?Object.keys(a).reduce(function(c,d){return c[d]=P(a[d],b-1),c},{}):Array.isArray(a)?a.map(function(a){return P(a,b-1)}):O(a)}function Q(a,b,c){if(!k(a))return a;b="number"!=typeof b?V:b,c="number"!=typeof b?W:c;var d=P(a,b);return N(T(d))>c?Q(a,b-1):d}function R(a,b){if("number"==typeof a||"string"==typeof a)return a.toString();if(!Array.isArray(a))return"";if(a=a.filter(function(a){return"string"==typeof a}),0===a.length)return"[object has no keys]";if(b="number"!=typeof b?X:b,a[0].length>=b)return a[0];for(var c=a.length;c>0;c--){var d=a.slice(0,c).join(", ");if(!(d.length>b))return c===a.length?d:d+"…"}return""}function S(a,b){function c(a){return m(a)?a.map(function(a){return c(a)}):k(a)?Object.keys(a).reduce(function(b,d){return b[d]=e.test(d)?f:c(a[d]),b},{}):a}if(!m(b)||m(b)&&0===b.length)return a;var d,e=A(b),f="********";try{d=JSON.parse(T(a))}catch(g){return a}return c(d)}var T=a(7),U="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},V=3,W=51200,X=40;b.exports={isObject:d,isError:e,isErrorEvent:f,isDOMError:g,isDOMException:h,isUndefined:i,isFunction:j,isPlainObject:k,isString:l,isArray:m,isEmptyObject:n,supportsErrorEvent:o,supportsDOMError:p,supportsDOMException:q,supportsFetch:r,supportsReferrerPolicy:s,supportsPromiseRejectionEvent:t,wrappedCallback:u,each:v,objectMerge:w,truncate:y,objectFrozen:x,hasKey:z,joinRegExp:A,urlencode:B,uuid4:D,htmlTreeAsString:E,htmlElementAsString:F,isSameException:I,isSameStacktrace:J,parseUrl:C,fill:K,safeJoin:L,serializeException:Q,serializeKeysForMessage:R,sanitize:S}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{7:7}],6:[function(a,b,c){(function(c){function d(){return"undefined"==typeof document||null==document.location?"":document.location.href}function e(){return"undefined"==typeof document||null==document.location?"":document.location.origin?document.location.origin:document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:"")}var f=a(5),g={collectWindowErrors:!0,debug:!1},h="undefined"!=typeof window?window:"undefined"!=typeof c?c:"undefined"!=typeof self?self:{},i=[].slice,j="?",k=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;g.report=function(){function a(a){m(),s.push(a)}function b(a){for(var b=s.length-1;b>=0;--b)s[b]===a&&s.splice(b,1)}function c(){n(),s=[]}function e(a,b){var c=null;if(!b||g.collectWindowErrors){for(var d in s)if(s.hasOwnProperty(d))try{s[d].apply(null,[a].concat(i.call(arguments,2)))}catch(e){c=e}if(c)throw c}}function l(a,b,c,h,i){var l=null,m=f.isErrorEvent(i)?i.error:i,n=f.isErrorEvent(a)?a.message:a;if(v)g.computeStackTrace.augmentStackTraceWithInitialElement(v,b,c,n),o();else if(m&&f.isError(m))l=g.computeStackTrace(m),e(l,!0);else{var p,r={url:b,line:c,column:h},s=void 0;if("[object String]"==={}.toString.call(n)){var p=n.match(k);p&&(s=p[1],n=p[2])}r.func=j,l={name:s,message:n,url:d(),stack:[r]},e(l,!0)}return!!q&&q.apply(this,arguments)}function m(){r||(q=h.onerror,h.onerror=l,r=!0)}function n(){r&&(h.onerror=q,r=!1,q=void 0)}function o(){var a=v,b=t;t=null,v=null,u=null,e.apply(null,[a,!1].concat(b))}function p(a,b){var c=i.call(arguments,1);if(v){if(u===a)return;o()}var d=g.computeStackTrace(a);if(v=d,u=a,t=c,setTimeout(function(){u===a&&o()},d.incomplete?2e3:0),b!==!1)throw a}var q,r,s=[],t=null,u=null,v=null;return p.subscribe=a,p.unsubscribe=b,p.uninstall=c,p}(),g.computeStackTrace=function(){function a(a){if("undefined"!=typeof a.stack&&a.stack){for(var b,c,f,g=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,h=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,i=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,k=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,l=/\((\S*)(?::(\d+))(?::(\d+))\)/,m=a.stack.split("\n"),n=[],o=(/^(.*) is undefined$/.exec(a.message),0),p=m.length;o<p;++o){if(c=g.exec(m[o])){var q=c[2]&&0===c[2].indexOf("native"),r=c[2]&&0===c[2].indexOf("eval");r&&(b=l.exec(c[2]))&&(c[2]=b[1],c[3]=b[2],c[4]=b[3]),f={url:q?null:c[2],func:c[1]||j,args:q?[c[2]]:[],line:c[3]?+c[3]:null,column:c[4]?+c[4]:null}}else if(c=h.exec(m[o]))f={url:c[2],func:c[1]||j,args:[],line:+c[3],column:c[4]?+c[4]:null};else{if(!(c=i.exec(m[o])))continue;var r=c[3]&&c[3].indexOf(" > eval")>-1;r&&(b=k.exec(c[3]))?(c[3]=b[1],c[4]=b[2],c[5]=null):0!==o||c[5]||"undefined"==typeof a.columnNumber||(n[0].column=a.columnNumber+1),f={url:c[3],func:c[1]||j,args:c[2]?c[2].split(","):[],line:c[4]?+c[4]:null,column:c[5]?+c[5]:null}}if(!f.func&&f.line&&(f.func=j),f.url&&"blob:"===f.url.substr(0,5)){var s=new XMLHttpRequest;if(s.open("GET",f.url,!1),s.send(null),200===s.status){var t=s.responseText||"";t=t.slice(-300);var u=t.match(/\/\/# sourceMappingURL=(.*)$/);if(u){var v=u[1];"~"===v.charAt(0)&&(v=e()+v.slice(1)),f.url=v.slice(0,-4)}}}n.push(f)}return n.length?{name:a.name,message:a.message,url:d(),stack:n}:null}}function b(a,b,c,d){var e={url:b,line:c};if(e.url&&e.line){if(a.incomplete=!1,e.func||(e.func=j),a.stack.length>0&&a.stack[0].url===e.url){if(a.stack[0].line===e.line)return!1;if(!a.stack[0].line&&a.stack[0].func===e.func)return a.stack[0].line=e.line,
-!1}return a.stack.unshift(e),a.partial=!0,!0}return a.incomplete=!0,!1}function c(a,e){for(var h,i,k=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],m={},n=!1,o=c.caller;o&&!n;o=o.caller)if(o!==f&&o!==g.report){if(i={url:null,func:j,line:null,column:null},o.name?i.func=o.name:(h=k.exec(o.toString()))&&(i.func=h[1]),"undefined"==typeof i.func)try{i.func=h.input.substring(0,h.input.indexOf("{"))}catch(p){}m[""+o]?n=!0:m[""+o]=!0,l.push(i)}e&&l.splice(0,e);var q={name:a.name,message:a.message,url:d(),stack:l};return b(q,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),q}function f(b,e){var f=null;e=null==e?0:+e;try{if(f=a(b))return f}catch(h){if(g.debug)throw h}try{if(f=c(b,e+1))return f}catch(h){if(g.debug)throw h}return{name:b.name,message:b.message,url:d()}}return f.augmentStackTraceWithInitialElement=b,f.computeStackTraceFromStackProp=a,f}(),b.exports=g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{5:5}],7:[function(a,b,c){function d(a,b){for(var c=0;c<a.length;++c)if(a[c]===b)return c;return-1}function e(a,b,c,d){return JSON.stringify(a,g(b,d),c)}function f(a){var b={stack:a.stack,message:a.message,name:a.name};for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b}function g(a,b){var c=[],e=[];return null==b&&(b=function(a,b){return c[0]===b?"[Circular ~]":"[Circular ~."+e.slice(0,d(c,b)).join(".")+"]"}),function(g,h){if(c.length>0){var i=d(c,this);~i?c.splice(i+1):c.push(this),~i?e.splice(i,1/0,g):e.push(g),~d(c,h)&&(h=b.call(this,g,h))}else c.push(h);return null==a?h instanceof Error?f(h):h:a.call(this,g,h)}}c=b.exports=e,c.getSerialize=g},{}],8:[function(a,b,c){function d(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function e(a,b){return a<<b|a>>>32-b}function f(a,b,c,f,g,h){return d(e(d(d(b,a),d(f,h)),g),c)}function g(a,b,c,d,e,g,h){return f(b&c|~b&d,a,b,e,g,h)}function h(a,b,c,d,e,g,h){return f(b&d|c&~d,a,b,e,g,h)}function i(a,b,c,d,e,g,h){return f(b^c^d,a,b,e,g,h)}function j(a,b,c,d,e,g,h){return f(c^(b|~d),a,b,e,g,h)}function k(a,b){a[b>>5]|=128<<b%32,a[(b+64>>>9<<4)+14]=b;var c,e,f,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(c=0;c<a.length;c+=16)e=m,f=n,k=o,l=p,m=g(m,n,o,p,a[c],7,-680876936),p=g(p,m,n,o,a[c+1],12,-389564586),o=g(o,p,m,n,a[c+2],17,606105819),n=g(n,o,p,m,a[c+3],22,-1044525330),m=g(m,n,o,p,a[c+4],7,-176418897),p=g(p,m,n,o,a[c+5],12,1200080426),o=g(o,p,m,n,a[c+6],17,-1473231341),n=g(n,o,p,m,a[c+7],22,-45705983),m=g(m,n,o,p,a[c+8],7,1770035416),p=g(p,m,n,o,a[c+9],12,-1958414417),o=g(o,p,m,n,a[c+10],17,-42063),n=g(n,o,p,m,a[c+11],22,-1990404162),m=g(m,n,o,p,a[c+12],7,1804603682),p=g(p,m,n,o,a[c+13],12,-40341101),o=g(o,p,m,n,a[c+14],17,-1502002290),n=g(n,o,p,m,a[c+15],22,1236535329),m=h(m,n,o,p,a[c+1],5,-165796510),p=h(p,m,n,o,a[c+6],9,-1069501632),o=h(o,p,m,n,a[c+11],14,643717713),n=h(n,o,p,m,a[c],20,-373897302),m=h(m,n,o,p,a[c+5],5,-701558691),p=h(p,m,n,o,a[c+10],9,38016083),o=h(o,p,m,n,a[c+15],14,-660478335),n=h(n,o,p,m,a[c+4],20,-405537848),m=h(m,n,o,p,a[c+9],5,568446438),p=h(p,m,n,o,a[c+14],9,-1019803690),o=h(o,p,m,n,a[c+3],14,-187363961),n=h(n,o,p,m,a[c+8],20,1163531501),m=h(m,n,o,p,a[c+13],5,-1444681467),p=h(p,m,n,o,a[c+2],9,-51403784),o=h(o,p,m,n,a[c+7],14,1735328473),n=h(n,o,p,m,a[c+12],20,-1926607734),m=i(m,n,o,p,a[c+5],4,-378558),p=i(p,m,n,o,a[c+8],11,-2022574463),o=i(o,p,m,n,a[c+11],16,1839030562),n=i(n,o,p,m,a[c+14],23,-35309556),m=i(m,n,o,p,a[c+1],4,-1530992060),p=i(p,m,n,o,a[c+4],11,1272893353),o=i(o,p,m,n,a[c+7],16,-155497632),n=i(n,o,p,m,a[c+10],23,-1094730640),m=i(m,n,o,p,a[c+13],4,681279174),p=i(p,m,n,o,a[c],11,-358537222),o=i(o,p,m,n,a[c+3],16,-722521979),n=i(n,o,p,m,a[c+6],23,76029189),m=i(m,n,o,p,a[c+9],4,-640364487),p=i(p,m,n,o,a[c+12],11,-421815835),o=i(o,p,m,n,a[c+15],16,530742520),n=i(n,o,p,m,a[c+2],23,-995338651),m=j(m,n,o,p,a[c],6,-198630844),p=j(p,m,n,o,a[c+7],10,1126891415),o=j(o,p,m,n,a[c+14],15,-1416354905),n=j(n,o,p,m,a[c+5],21,-57434055),m=j(m,n,o,p,a[c+12],6,1700485571),p=j(p,m,n,o,a[c+3],10,-1894986606),o=j(o,p,m,n,a[c+10],15,-1051523),n=j(n,o,p,m,a[c+1],21,-2054922799),m=j(m,n,o,p,a[c+8],6,1873313359),p=j(p,m,n,o,a[c+15],10,-30611744),o=j(o,p,m,n,a[c+6],15,-1560198380),n=j(n,o,p,m,a[c+13],21,1309151649),m=j(m,n,o,p,a[c+4],6,-145523070),p=j(p,m,n,o,a[c+11],10,-1120210379),o=j(o,p,m,n,a[c+2],15,718787259),n=j(n,o,p,m,a[c+9],21,-343485551),m=d(m,e),n=d(n,f),o=d(o,k),p=d(p,l);return[m,n,o,p]}function l(a){var b,c="",d=32*a.length;for(b=0;b<d;b+=8)c+=String.fromCharCode(a[b>>5]>>>b%32&255);return c}function m(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b<c.length;b+=1)c[b]=0;var d=8*a.length;for(b=0;b<d;b+=8)c[b>>5]|=(255&a.charCodeAt(b/8))<<b%32;return c}function n(a){return l(k(m(a),8*a.length))}function o(a,b){var c,d,e=m(a),f=[],g=[];for(f[15]=g[15]=void 0,e.length>16&&(e=k(e,8*a.length)),c=0;c<16;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=k(f.concat(m(b)),512+8*b.length),l(k(g.concat(d),640))}function p(a){var b,c,d="0123456789abcdef",e="";for(c=0;c<a.length;c+=1)b=a.charCodeAt(c),e+=d.charAt(b>>>4&15)+d.charAt(15&b);return e}function q(a){return unescape(encodeURIComponent(a))}function r(a){return n(q(a))}function s(a){return p(r(a))}function t(a,b){return o(q(a),q(b))}function u(a,b){return p(t(a,b))}function v(a,b,c){return b?c?t(b,a):u(b,a):c?r(a):s(a)}b.exports=v},{}]},{},[4])(4)});
-//# sourceMappingURL=raven.min.js.map
\ No newline at end of file
diff --git a/app/static/js/sentry-bundle.min.js b/app/static/js/sentry-bundle.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..40c2dee86da6900157046d8d05cafe0bb7532018
--- /dev/null
+++ b/app/static/js/sentry-bundle.min.js
@@ -0,0 +1,3 @@
+/*! @sentry/browser 5.1.0 (01c6fc78) | https://github.com/getsentry/sentry-javascript */
+var Sentry=function(n){"use strict";var t=function(n,r){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var r in t)t.hasOwnProperty(r)&&(n[r]=t[r])})(n,r)};function r(n,r){function e(){this.constructor=n}t(n,r),n.prototype=null===r?Object.create(r):(e.prototype=r.prototype,new e)}var e,i,o,u=function(){return(u=Object.assign||function(n){for(var t,r=1,e=arguments.length;r<e;r++)for(var i in t=arguments[r])Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=t[i]);return n}).apply(this,arguments)};function c(n,t,r,e){return new(r||(r=Promise))(function(i,o){function u(n){try{s(e.next(n))}catch(n){o(n)}}function c(n){try{s(e.throw(n))}catch(n){o(n)}}function s(n){n.done?i(n.value):new r(function(t){t(n.value)}).then(u,c)}s((e=e.apply(n,t||[])).next())})}function s(n,t){var r,e,i,o,u={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function c(o){return function(c){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;u;)try{if(r=1,e&&(i=2&o[0]?e.return:o[0]?e.throw||((i=e.return)&&i.call(e),0):e.next)&&!(i=i.call(e,o[1])).done)return i;switch(e=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return u.label++,{value:o[1],done:!1};case 5:u.label++,e=o[1],o=[0];continue;case 7:o=u.ops.pop(),u.trys.pop();continue;default:if(!(i=(i=u.trys).length>0&&i[i.length-1])&&(6===o[0]||2===o[0])){u=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){u.label=o[1];break}if(6===o[0]&&u.label<i[1]){u.label=i[1],i=o;break}if(i&&u.label<i[2]){u.label=i[2],u.ops.push(o);break}i[2]&&u.ops.pop(),u.trys.pop();continue}o=t.call(n,u)}catch(n){o=[6,n],e=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,c])}}}function a(n,t){var r="function"==typeof Symbol&&n[Symbol.iterator];if(!r)return n;var e,i,o=r.call(n),u=[];try{for(;(void 0===t||t-- >0)&&!(e=o.next()).done;)u.push(e.value)}catch(n){i={error:n}}finally{try{e&&!e.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return u}function f(){for(var n=[],t=0;t<arguments.length;t++)n=n.concat(a(arguments[t]));return n}!function(n){n[n.None=0]="None",n[n.Error=1]="Error",n[n.Debug=2]="Debug",n[n.Verbose=3]="Verbose"}(e||(e={})),(i=n.Severity||(n.Severity={})).Fatal="fatal",i.Error="error",i.Warning="warning",i.Log="log",i.Info="info",i.Debug="debug",i.Critical="critical",function(n){n.fromString=function(t){switch(t){case"debug":return n.Debug;case"info":return n.Info;case"warn":case"warning":return n.Warning;case"error":return n.Error;case"fatal":return n.Fatal;case"critical":return n.Critical;case"log":default:return n.Log}}}(n.Severity||(n.Severity={})),(o=n.Status||(n.Status={})).Unknown="unknown",o.Skipped="skipped",o.Success="success",o.RateLimit="rate_limit",o.Invalid="invalid",o.Failed="failed",function(n){n.fromHttpCode=function(t){return t>=200&&t<300?n.Success:429===t?n.RateLimit:t>=400&&t<500?n.Invalid:t>=500?n.Failed:n.Unknown}}(n.Status||(n.Status={}));var h=function(n){function t(t){var r=this.constructor,e=n.call(this,t)||this;return e.message=t,e.name=r.prototype.constructor.name,Object.setPrototypeOf(e,r.prototype),e}return r(t,n),t}(Error);function v(n){switch(Object.prototype.toString.call(n)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return n instanceof Error}}function l(n){return"[object ErrorEvent]"===Object.prototype.toString.call(n)}function d(n){return"[object DOMError]"===Object.prototype.toString.call(n)}function p(n){return"[object String]"===Object.prototype.toString.call(n)}function m(n){return null===n||"object"!=typeof n&&"function"!=typeof n}function y(n){return"[object Object]"===Object.prototype.toString.call(n)}function b(n){return Boolean(n&&n.then&&"function"==typeof n.then)}var w={};function g(){return"[object process]"===Object.prototype.toString.call("undefined"!=typeof process?process:0)?global:"undefined"!=typeof window?window:"undefined"!=typeof self?self:w}function E(){var n=g(),t=n.crypto||n.msCrypto;if(void 0!==t&&t.getRandomValues){var r=new Uint16Array(8);t.getRandomValues(r),r[3]=4095&r[3]|16384,r[4]=16383&r[4]|32768;var e=function(n){for(var t=n.toString(16);t.length<4;)t="0"+t;return t};return e(r[0])+e(r[1])+e(r[2])+e(r[3])+e(r[4])+e(r[5])+e(r[6])+e(r[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(n){var t=16*Math.random()|0;return("x"===n?t:3&t|8).toString(16)})}function j(n){if(!n)return{};var t=n.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!t)return{};var r=t[6]||"",e=t[8]||"";return{host:t[4],path:t[5],protocol:t[2],relative:t[5]+r+e}}function x(n){if(n.message)return n.message;if(n.exception&&n.exception.values&&n.exception.values[0]){var t=n.exception.values[0];return t.type&&t.value?t.type+": "+t.value:t.type||t.value||n.event_id||"<unknown>"}return n.event_id||"<unknown>"}function S(n){var t=g();if(!("console"in t))return n();var r=t.console,e={};["debug","info","warn","error","log","assert"].forEach(function(n){n in t.console&&r[n].__sentry__&&(e[n]=r[n].__sentry_wrapped__,r[n]=r[n].__sentry_original__)});var i=n();return Object.keys(e).forEach(function(n){r[n]=e[n]}),i}function O(n,t,r,e){void 0===e&&(e={handled:!0,type:"generic"}),n.exception=n.exception||{},n.exception.values=n.exception.values||[],n.exception.values[0]=n.exception.values[0]||{},n.exception.values[0].value=n.exception.values[0].value||t||"",n.exception.values[0].type=n.exception.values[0].type||r||"Error",n.exception.values[0].mechanism=n.exception.values[0].mechanism||e}var _=g(),k="Sentry Logger ",T=function(){function n(){this.t=!1}return n.prototype.disable=function(){this.t=!1},n.prototype.enable=function(){this.t=!0},n.prototype.log=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];this.t&&S(function(){_.console.log(k+"[Log]: "+n.join(" "))})},n.prototype.warn=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];this.t&&S(function(){_.console.warn(k+"[Warn]: "+n.join(" "))})},n.prototype.error=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];this.t&&S(function(){_.console.error(k+"[Error]: "+n.join(" "))})},n}();_.__SENTRY__=_.__SENTRY__||{};var R=_.__SENTRY__.logger||(_.__SENTRY__.logger=new T),D=function(){function n(){this.i="function"==typeof WeakSet,this.o=this.i?new WeakSet:[]}return n.prototype.memoize=function(n){if(this.i)return!!this.o.has(n)||(this.o.add(n),!1);for(var t=0;t<this.o.length;t++){if(this.o[t]===n)return!0}return this.o.push(n),!1},n.prototype.unmemoize=function(n){if(this.i)this.o.delete(n);else for(var t=0;t<this.o.length;t++)if(this.o[t]===n){this.o.splice(t,1);break}},n}();function I(n,t,r){if(t in n){var e=n[t],i=r(e);"function"==typeof i&&(i.prototype=i.prototype||{},Object.defineProperties(i,{__sentry__:{enumerable:!1,value:!0},__sentry_original__:{enumerable:!1,value:e},__sentry_wrapped__:{enumerable:!1,value:i}})),n[t]=i}}function A(n){return function(n){return~-encodeURI(n).split(/%..|./).length}(JSON.stringify(n))}function C(n,t,r){void 0===t&&(t=3),void 0===r&&(r=102400);var e=N(n,t);return A(e)>r?C(n,t-1,r):e}function L(n,t){return"domain"===t&&"object"==typeof n&&n.u?"[Domain]":"domainEmitter"===t?"[DomainEmitter]":"undefined"!=typeof global&&n===global?"[Global]":"undefined"!=typeof window&&n===window?"[Window]":"undefined"!=typeof document&&n===document?"[Document]":"undefined"!=typeof Event&&n instanceof Event?Object.getPrototypeOf(n)?n.constructor.name:"Event":y(r=n)&&"nativeEvent"in r&&"preventDefault"in r&&"stopPropagation"in r?"[SyntheticEvent]":Number.isNaN(n)?"[NaN]":void 0===n?"[undefined]":"function"==typeof n?"[Function: "+(n.name||"<unknown-function-name>")+"]":n;var r}function M(n,t,r,e){if(void 0===r&&(r=1/0),void 0===e&&(e=new D),0===r)return function(n){var t=Object.prototype.toString.call(n);if("string"==typeof n)return n;if("[object Object]"===t)return"[Object]";if("[object Array]"===t)return"[Array]";var r=L(n);return m(r)?r:t}(t);if(null!=t&&"function"==typeof t.toJSON)return t.toJSON();var i=L(t,n);if(m(i))return i;var o=v(t)?function(n){var t={message:n.message,name:n.name,stack:n.stack};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r]);return t}(t):t,u=Array.isArray(t)?[]:{};if(e.memoize(t))return"[Circular ~]";for(var c in o)Object.prototype.hasOwnProperty.call(o,c)&&(u[c]=M(c,o[c],r-1,e));return e.unmemoize(t),u}function N(n,t){try{return JSON.parse(JSON.stringify(n,function(n,r){return M(n,r,t)}))}catch(n){return"**non-serializable**"}}var F,U=function(){function n(n){this.s=n,this.h=[]}return n.prototype.isReady=function(){return void 0===this.s||this.length()<this.s},n.prototype.add=function(n){return c(this,void 0,void 0,function(){var t=this;return s(this,function(r){return this.isReady()?(-1===this.h.indexOf(n)&&this.h.push(n),n.then(function(){return c(t,void 0,void 0,function(){return s(this,function(t){return[2,this.remove(n)]})})}).catch(function(){return c(t,void 0,void 0,function(){return s(this,function(t){return[2,this.remove(n).catch(function(){})]})})}),[2,n]):[2,Promise.reject(new h("Not adding Promise due to buffer limit reached."))]})})},n.prototype.remove=function(n){return c(this,void 0,void 0,function(){return s(this,function(t){return[2,this.h.splice(this.h.indexOf(n),1)[0]]})})},n.prototype.length=function(){return this.h.length},n.prototype.drain=function(n){return c(this,void 0,void 0,function(){var t=this;return s(this,function(r){return[2,new Promise(function(r){var e=setTimeout(function(){n&&n>0&&r(!1)},n);Promise.all(t.h).then(function(){clearTimeout(e),r(!0)}).catch(function(){r(!0)})})]})})},n}();function P(n,t){return void 0===t&&(t=0),0===t?n:n.length<=t?n:n.substr(0,t)+"..."}function $(n,t){if(!Array.isArray(n))return"";for(var r=[],e=0;e<n.length;e++){var i=n[e];try{r.push(String(i))}catch(n){r.push("[value cannot be serialized]")}}return r.join(t)}function q(n,t){if(void 0===t&&(t=40),!n.length)return"[object has no keys]";if(n[0].length>=t)return P(n[0],t);for(var r=n.length;r>0;r--){var e=n.slice(0,r).join(", ");if(!(e.length>t))return r===n.length?e:P(e,t)}return""}function H(){if(!("fetch"in g()))return!1;try{return new Headers,new Request(""),new Response,!0}catch(n){return!1}}function W(){if(!H())return!1;try{return new Request("_",{referrerPolicy:"origin"}),!0}catch(n){return!1}}!function(n){n.PENDING="PENDING",n.RESOLVED="RESOLVED",n.REJECTED="REJECTED"}(F||(F={}));var B=function(){function n(n){var t=this;this.v=F.PENDING,this.l=[],this.p=function(n){t.m(n,F.RESOLVED)},this.g=function(n){t.m(n,F.REJECTED)},this.m=function(n,r){t.v===F.PENDING&&(b(n)?n.then(t.p,t.g):(t.j=n,t.v=r,t.S()))},this.S=function(){t.v!==F.PENDING&&(t.v===F.REJECTED?t.l.forEach(function(n){return n.onFail&&n.onFail(t.j)}):t.l.forEach(function(n){return n.onSuccess&&n.onSuccess(t.j)}),t.l=[])},this.O=function(n){t.l=t.l.concat(n),t.S()};try{n(this.p,this.g)}catch(n){this.g(n)}}return n.prototype.then=function(t,r){var e=this;return new n(function(n,i){e.O({onFail:function(t){if(r)try{return void n(r(t))}catch(n){return void i(n)}else i(t)},onSuccess:function(r){if(t)try{return void n(t(r))}catch(n){return void i(n)}else n(r)}})})},n.prototype.catch=function(n){return this.then(function(n){return n},n)},n.prototype.toString=function(){return"[object SyncPromise]"},n.resolve=function(t){return new n(function(n){n(t)})},n.reject=function(t){return new n(function(n,r){r(t)})},n}(),G=function(){function n(){this._=!1,this.k=[],this.T=[],this.R=[],this.D={},this.I={},this.A={},this.C={}}return n.prototype.addScopeListener=function(n){this.k.push(n)},n.prototype.addEventProcessor=function(n){return this.T.push(n),this},n.prototype.L=function(){var n=this;this._||(this._=!0,setTimeout(function(){n.k.forEach(function(t){t(n)}),n._=!1}))},n.prototype.M=function(n,t,r,e){var i=this;return void 0===e&&(e=0),new B(function(o,c){var s=n[e];if(null===t||"function"!=typeof s)o(t);else{var a=s(u({},t),r);b(a)?a.then(function(t){return i.M(n,t,r,e+1).then(o)}).catch(c):i.M(n,a,r,e+1).then(o).catch(c)}})},n.prototype.setUser=function(n){return this.D=N(n),this.L(),this},n.prototype.setTags=function(n){return this.I=u({},this.I,N(n)),this.L(),this},n.prototype.setTag=function(n,t){var r;return this.I=u({},this.I,((r={})[n]=N(t),r)),this.L(),this},n.prototype.setExtras=function(n){return this.A=u({},this.A,N(n)),this.L(),this},n.prototype.setExtra=function(n,t){var r;return this.A=u({},this.A,((r={})[n]=N(t),r)),this.L(),this},n.prototype.setFingerprint=function(n){return this.N=N(n),this.L(),this},n.prototype.setLevel=function(n){return this.F=N(n),this.L(),this},n.prototype.setContext=function(n,t){return this.C[n]=t?N(t):void 0,this.L(),this},n.clone=function(t){var r=new n;return Object.assign(r,t,{k:[]}),t&&(r.R=f(t.R),r.I=u({},t.I),r.A=u({},t.A),r.C=u({},t.C),r.D=t.D,r.F=t.F,r.N=t.N,r.T=f(t.T)),r},n.prototype.clear=function(){return this.R=[],this.I={},this.A={},this.D={},this.C={},this.F=void 0,this.N=void 0,this.L(),this},n.prototype.addBreadcrumb=function(n,t){var r=(new Date).getTime()/1e3,e=u({timestamp:r},n);return this.R=void 0!==t&&t>=0?f(this.R,[N(e)]).slice(-t):f(this.R,[N(e)]),this.L(),this},n.prototype.clearBreadcrumbs=function(){return this.R=[],this.L(),this},n.prototype.U=function(n){n.fingerprint=n.fingerprint?Array.isArray(n.fingerprint)?n.fingerprint:[n.fingerprint]:[],this.N&&(n.fingerprint=n.fingerprint.concat(this.N)),n.fingerprint&&!n.fingerprint.length&&delete n.fingerprint},n.prototype.applyToEvent=function(n,t){return this.A&&Object.keys(this.A).length&&(n.extra=u({},this.A,n.extra)),this.I&&Object.keys(this.I).length&&(n.tags=u({},this.I,n.tags)),this.D&&Object.keys(this.D).length&&(n.user=u({},this.D,n.user)),this.C&&Object.keys(this.C).length&&(n.contexts=u({},this.C,n.contexts)),this.F&&(n.level=this.F),this.U(n),n.breadcrumbs=f(n.breadcrumbs||[],this.R),n.breadcrumbs=n.breadcrumbs.length>0?n.breadcrumbs:void 0,this.M(f(J(),this.T),n,t)},n}();function J(){var n=g();return n.__SENTRY__=n.__SENTRY__||{},n.__SENTRY__.globalEventProcessors=n.__SENTRY__.globalEventProcessors||[],n.__SENTRY__.globalEventProcessors}function X(n){J().push(n)}var z=3,V=function(){function n(n,t,r){void 0===t&&(t=new G),void 0===r&&(r=z),this.P=r,this.$=[],this.$.push({client:n,scope:t})}return n.prototype.q=function(n){for(var t,r=[],e=1;e<arguments.length;e++)r[e-1]=arguments[e];var i=this.getStackTop();i&&i.client&&i.client[n]&&(t=i.client)[n].apply(t,f(r,[i.scope]))},n.prototype.isOlderThan=function(n){return this.P<n},n.prototype.bindClient=function(n){this.getStackTop().client=n},n.prototype.pushScope=function(){var n=this.getStack(),t=n.length>0?n[n.length-1].scope:void 0,r=G.clone(t);return this.getStack().push({client:this.getClient(),scope:r}),r},n.prototype.popScope=function(){return void 0!==this.getStack().pop()},n.prototype.withScope=function(n){var t=this.pushScope();try{n(t)}finally{this.popScope()}},n.prototype.getClient=function(){return this.getStackTop().client},n.prototype.getScope=function(){return this.getStackTop().scope},n.prototype.getStack=function(){return this.$},n.prototype.getStackTop=function(){return this.$[this.$.length-1]},n.prototype.captureException=function(n,t){var r=this.H=E();return this.q("captureException",n,u({},t,{event_id:r})),r},n.prototype.captureMessage=function(n,t,r){var e=this.H=E();return this.q("captureMessage",n,t,u({},r,{event_id:e})),e},n.prototype.captureEvent=function(n,t){var r=this.H=E();return this.q("captureEvent",n,u({},t,{event_id:r})),r},n.prototype.lastEventId=function(){return this.H},n.prototype.addBreadcrumb=function(n,t){var r=this.getStackTop();if(r.scope&&r.client){var e=r.client.getOptions&&r.client.getOptions()||{},i=e.beforeBreadcrumb,o=void 0===i?null:i,c=e.maxBreadcrumbs,s=void 0===c?30:c;if(!(s<=0)){var a=(new Date).getTime()/1e3,f=u({timestamp:a},n),h=o?S(function(){return o(f,t)}):f;null!==h&&r.scope.addBreadcrumb(h,Math.min(s,100))}}},n.prototype.configureScope=function(n){var t=this.getStackTop();t.scope&&t.client&&n(t.scope)},n.prototype.run=function(n){var t=Z(this);try{n(this)}finally{Z(t)}},n.prototype.getIntegration=function(n){var t=this.getClient();if(!t)return null;try{return t.getIntegration(n)}catch(t){return R.warn("Cannot retrieve integration "+n.id+" from the current Hub"),null}},n}();function K(){var n=g();return n.__SENTRY__=n.__SENTRY__||{hub:void 0},n}function Z(n){var t=K(),r=nn(t);return tn(t,n),r}function Q(){var n,t,r=K();Y(r)&&!nn(r).isOlderThan(z)||tn(r,new V);try{var e=(n=module,t="domain",n.require(t)).active;if(!e)return nn(r);if(!Y(e)||nn(e).isOlderThan(z)){var i=nn(r).getStackTop();tn(e,new V(i.client,G.clone(i.scope)))}return nn(e)}catch(n){return nn(r)}}function Y(n){return!!(n&&n.__SENTRY__&&n.__SENTRY__.hub)}function nn(n){return n&&n.__SENTRY__&&n.__SENTRY__.hub?n.__SENTRY__.hub:(n.__SENTRY__=n.__SENTRY__||{},n.__SENTRY__.hub=new V,n.__SENTRY__.hub)}function tn(n,t){return!!n&&(n.__SENTRY__=n.__SENTRY__||{},n.__SENTRY__.hub=t,!0)}function rn(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];var e=Q();if(e&&e[n])return e[n].apply(e,f(t));throw new Error("No hub defined or "+n+" was not found on the hub, please open a bug report.")}function captureException(n){var t;try{throw new Error("Sentry syntheticException")}catch(n){t=n}return rn("captureException",n,{originalException:n,syntheticException:t})}function en(n){rn("withScope",n)}var on=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+))?@)([\w\.-]+)(?::(\d+))?\/(.+)/,un=function(){function n(n){"string"==typeof n?this.W(n):this.B(n),this.G()}return n.prototype.toString=function(n){void 0===n&&(n=!1);var t=this,r=t.host,e=t.path,i=t.pass,o=t.port,u=t.projectId;return t.protocol+"://"+t.user+(n&&i?":"+i:"")+"@"+r+(o?":"+o:"")+"/"+(e?e+"/":e)+u},n.prototype.W=function(n){var t=on.exec(n);if(!t)throw new h("Invalid Dsn");var r=a(t.slice(1),6),e=r[0],i=r[1],o=r[2],u=void 0===o?"":o,c=r[3],s=r[4],f=void 0===s?"":s,v="",l=r[5],d=l.split("/");d.length>1&&(v=d.slice(0,-1).join("/"),l=d.pop()),Object.assign(this,{host:c,pass:u,path:v,projectId:l,port:f,protocol:e,user:i})},n.prototype.B=function(n){this.protocol=n.protocol,this.user=n.user,this.pass=n.pass||"",this.host=n.host,this.port=n.port||"",this.path=n.path||"",this.projectId=n.projectId},n.prototype.G=function(){var n=this;if(["protocol","user","host","projectId"].forEach(function(t){if(!n[t])throw new h("Invalid Dsn")}),"http"!==this.protocol&&"https"!==this.protocol)throw new h("Invalid Dsn");if(this.port&&Number.isNaN(parseInt(this.port,10)))throw new h("Invalid Dsn")},n}(),cn=function(){function n(n){this.dsn=n,this.J=new un(n)}return n.prototype.getDsn=function(){return this.J},n.prototype.getStoreEndpoint=function(){return""+this.X()+this.getStoreEndpointPath()},n.prototype.getStoreEndpointWithUrlEncodedAuth=function(){var n,t={sentry_key:this.J.user,sentry_version:"7"};return this.getStoreEndpoint()+"?"+(n=t,Object.keys(n).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(n[t])}).join("&"))},n.prototype.X=function(){var n=this.J,t=n.protocol?n.protocol+":":"",r=n.port?":"+n.port:"";return t+"//"+n.host+r},n.prototype.getStoreEndpointPath=function(){var n=this.J;return(n.path?"/"+n.path:"")+"/api/"+n.projectId+"/store/"},n.prototype.getRequestHeaders=function(n,t){var r=this.J,e=["Sentry sentry_version=7"];return e.push("sentry_timestamp="+(new Date).getTime()),e.push("sentry_client="+n+"/"+t),e.push("sentry_key="+r.user),r.pass&&e.push("sentry_secret="+r.pass),{"Content-Type":"application/json","X-Sentry-Auth":e.join(", ")}},n.prototype.getReportDialogEndpoint=function(n){void 0===n&&(n={});var t=this.J,r=this.X()+(t.path?"/"+t.path:"")+"/api/embed/error-page/",e=[];for(var i in e.push("dsn="+t.toString()),n)if("user"===i){if(!n.user)continue;n.user.name&&e.push("name="+encodeURIComponent(n.user.name)),n.user.email&&e.push("email="+encodeURIComponent(n.user.email))}else e.push(encodeURIComponent(i)+"="+encodeURIComponent(n[i]));return e.length?r+"?"+e.join("&"):r},n}(),sn=[];function an(n){var t={};return function(n){var t=n.defaultIntegrations&&f(n.defaultIntegrations)||[],r=n.integrations,e=[];if(Array.isArray(r)){var i=r.map(function(n){return n.name}),o=[];t.forEach(function(n){-1===i.indexOf(n.name)&&-1===o.indexOf(n.name)&&(e.push(n),o.push(n.name))}),r.forEach(function(n){-1===o.indexOf(n.name)&&(e.push(n),o.push(n.name))})}else{if("function"!=typeof r)return f(t);e=r(t),e=Array.isArray(e)?e:[e]}return e}(n).forEach(function(n){t[n.name]=n,function(n){-1===sn.indexOf(n.name)&&(n.setupOnce(X,Q),sn.push(n.name),R.log("Integration installed: "+n.name))}(n)}),t}var fn,hn=function(){function n(n,t){this.V=!1,this.K=new n(t),this.Z=t,t.dsn&&(this.Y=new un(t.dsn)),this.nn=an(this.Z)}return n.prototype.captureException=function(n,t,r){var e=this,i=t&&t.event_id;return this.V=!0,this.tn().eventFromException(n,t).then(function(n){return e.rn(n,t,r)}).then(function(n){i=n&&n.event_id,e.V=!1}).catch(function(n){R.error(n),e.V=!1}),i},n.prototype.captureMessage=function(n,t,r,e){var i=this,o=r&&r.event_id;return this.V=!0,(m(n)?this.tn().eventFromMessage(""+n,t,r):this.tn().eventFromException(n,r)).then(function(n){return i.rn(n,r,e)}).then(function(n){o=n&&n.event_id,i.V=!1}).catch(function(n){R.error(n),i.V=!1}),o},n.prototype.captureEvent=function(n,t,r){var e=this,i=t&&t.event_id;return this.V=!0,this.rn(n,t,r).then(function(n){i=n&&n.event_id,e.V=!1}).catch(function(n){R.error(n),e.V=!1}),i},n.prototype.getDsn=function(){return this.Y},n.prototype.getOptions=function(){return this.Z},n.prototype.flush=function(n){return c(this,void 0,void 0,function(){var t,r;return s(this,function(e){switch(e.label){case 0:return[4,this.en(n)];case 1:return t=e.sent(),this.in&&clearInterval(this.in),[4,this.tn().getTransport().close(n)];case 2:return r=e.sent(),[2,t&&r]}})})},n.prototype.close=function(n){return c(this,void 0,void 0,function(){var t;return s(this,function(r){switch(r.label){case 0:return[4,this.flush(n)];case 1:return t=r.sent(),this.getOptions().enabled=!1,[2,t]}})})},n.prototype.getIntegrations=function(){return this.nn||{}},n.prototype.getIntegration=function(n){try{return this.nn[n.id]||null}catch(t){return R.warn("Cannot retrieve integration "+n.id+" from the current Client"),null}},n.prototype.en=function(n){return c(this,void 0,void 0,function(){var t=this;return s(this,function(r){return[2,new Promise(function(r){var e=0;t.in&&clearInterval(t.in),t.in=setInterval(function(){t.V?(e+=1,n&&e>=n&&r(!1)):r(!0)},1)})]})})},n.prototype.tn=function(){return this.K},n.prototype.on=function(){return!1!==this.getOptions().enabled&&void 0!==this.Y},n.prototype.un=function(n,t,r){var e=this.getOptions(),i=e.environment,o=e.release,c=e.dist,s=e.maxValueLength,a=void 0===s?250:s,f=u({},n);void 0===f.environment&&void 0!==i&&(f.environment=i),void 0===f.release&&void 0!==o&&(f.release=o),void 0===f.dist&&void 0!==c&&(f.dist=c),f.message&&(f.message=P(f.message,a));var h=f.exception&&f.exception.values&&f.exception.values[0];h&&h.value&&(h.value=P(h.value,a));var v=f.request;v&&v.url&&(v.url=P(v.url,a)),void 0===f.event_id&&(f.event_id=E()),this.cn(f.sdk);var l=B.resolve(f);return t&&(l=t.applyToEvent(f,r)),l},n.prototype.cn=function(n){var t=Object.keys(this.nn);n&&t.length>0&&(n.integrations=t)},n.prototype.rn=function(n,t,r){var e=this,i=this.getOptions(),o=i.beforeSend,u=i.sampleRate;return this.on()?"number"==typeof u&&Math.random()>u?B.reject("This event has been sampled, will not send event."):new B(function(i,u){e.un(n,r,t).then(function(n){if(null!==n){var r=n;try{if(t&&t.data&&!0===t.data.__sentry__||!o)return e.tn().sendEvent(r),void i(r);var c=o(n,t);if(void 0===c)R.error("`beforeSend` method has to return `null` or a valid event.");else if(b(c))e.sn(c,i,u);else{if(null===(r=c))return R.log("`beforeSend` returned `null`, will not send event."),void i(null);e.tn().sendEvent(r),i(r)}}catch(n){e.captureException(n,{data:{__sentry__:!0},originalException:n}),u("`beforeSend` throw an error, will not send event.")}}else u("An event processor returned null, will not send event.")})}):B.reject("SDK not enabled, will not send event.")},n.prototype.sn=function(n,t,r){var e=this;n.then(function(n){null!==n?(e.tn().sendEvent(n),t(n)):r("`beforeSend` returned `null`, will not send event.")}).catch(function(n){r("beforeSend rejected with "+n)})},n}(),vn=function(){function t(){}return t.prototype.sendEvent=function(t){return c(this,void 0,void 0,function(){return s(this,function(t){return[2,Promise.resolve({reason:"NoopTransport: Event has been skipped because no Dsn is configured.",status:n.Status.Skipped})]})})},t.prototype.close=function(n){return c(this,void 0,void 0,function(){return s(this,function(n){return[2,Promise.resolve(!0)]})})},t}(),ln=function(){function n(n){this.Z=n,this.Z.dsn||R.warn("No DSN provided, backend will not do anything."),this.an=this.fn()}return n.prototype.fn=function(){return new vn},n.prototype.eventFromException=function(n,t){throw new h("Backend has to implement `eventFromException` method")},n.prototype.eventFromMessage=function(n,t,r){throw new h("Backend has to implement `eventFromMessage` method")},n.prototype.sendEvent=function(n){this.an.sendEvent(n).catch(function(n){R.error("Error while sending event: "+n)})},n.prototype.getTransport=function(){return this.an},n}();var dn=function(){function n(){this.name=n.id}return n.prototype.setupOnce=function(){fn=Function.prototype.toString,Function.prototype.toString=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var r=this.__sentry__?this.__sentry_original__:this;return fn.apply(r,n)}},n.id="FunctionToString",n}(),pn=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/],mn=function(){function n(t){void 0===t&&(t={}),this.Z=t,this.name=n.id}return n.prototype.setupOnce=function(){X(function(t){var r=Q();if(!r)return t;var e=r.getIntegration(n);if(e){var i=r.getClient(),o=i?i.getOptions():{},u=e.hn(o);if(e.vn(t,u))return null}return t})},n.prototype.vn=function(n,t){return this.ln(n,t)?(R.warn("Event dropped due to being internal Sentry Error.\nEvent: "+x(n)),!0):this.dn(n,t)?(R.warn("Event dropped due to being matched by `ignoreErrors` option.\nEvent: "+x(n)),!0):this.pn(n,t)?(R.warn("Event dropped due to being matched by `blacklistUrls` option.\nEvent: "+x(n)+".\nUrl: "+this.mn(n)),!0):!this.yn(n,t)&&(R.warn("Event dropped due to not being matched by `whitelistUrls` option.\nEvent: "+x(n)+".\nUrl: "+this.mn(n)),!0)},n.prototype.ln=function(n,t){if(void 0===t&&(t={}),!t.ignoreInternal)return!1;try{return"SentryError"===n.exception.values[0].type}catch(n){return!1}},n.prototype.dn=function(n,t){var r=this;return void 0===t&&(t={}),!(!t.ignoreErrors||!t.ignoreErrors.length)&&this.bn(n).some(function(n){return t.ignoreErrors.some(function(t){return r.wn(n,t)})})},n.prototype.pn=function(n,t){var r=this;if(void 0===t&&(t={}),!t.blacklistUrls||!t.blacklistUrls.length)return!1;var e=this.mn(n);return!!e&&t.blacklistUrls.some(function(n){return r.wn(e,n)})},n.prototype.yn=function(n,t){var r=this;if(void 0===t&&(t={}),!t.whitelistUrls||!t.whitelistUrls.length)return!0;var e=this.mn(n);return!e||t.whitelistUrls.some(function(n){return r.wn(e,n)})},n.prototype.hn=function(n){return void 0===n&&(n={}),{blacklistUrls:f(this.Z.blacklistUrls||[],n.blacklistUrls||[]),ignoreErrors:f(this.Z.ignoreErrors||[],n.ignoreErrors||[],pn),ignoreInternal:void 0===this.Z.ignoreInternal||this.Z.ignoreInternal,whitelistUrls:f(this.Z.whitelistUrls||[],n.whitelistUrls||[])}},n.prototype.wn=function(n,t){return r=t,"[object RegExp]"===Object.prototype.toString.call(r)?t.test(n):"string"==typeof t&&n.includes(t);var r},n.prototype.bn=function(n){if(n.message)return[n.message];if(n.exception)try{var t=n.exception.values[0],r=t.type,e=t.value;return[""+e,r+": "+e]}catch(t){return R.error("Cannot extract message for event "+x(n)),[]}return[]},n.prototype.mn=function(n){try{if(n.stacktrace){var t=n.stacktrace.frames;return t[t.length-1].filename}if(n.exception){var r=n.exception.values[0].stacktrace.frames;return r[r.length-1].filename}return null}catch(t){return R.error("Cannot extract url for event "+x(n)),null}},n.id="InboundFilters",n}(),yn=Object.freeze({FunctionToString:dn,InboundFilters:mn}),bn=g(),wn={report:!1,collectWindowErrors:!1,computeStackTrace:!1,linesOfContext:!1},gn="?",En=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function jn(n,t){return Object.prototype.hasOwnProperty.call(n,t)}function xn(){return"undefined"==typeof document||null==document.location?"":document.location.href}wn.report=function(){var n,t,r=[],e=null,i=null;function o(n,t,e){var i=null;if(!t||wn.collectWindowErrors){for(var o in r)if(jn(r,o))try{r[o](n,t,e)}catch(n){i=n}if(i)throw i}}function c(t,r,e,c,s){var f=null;if(s=l(s)?s.error:s,t=l(t)?t.message:t,i)wn.computeStackTrace.augmentStackTraceWithInitialElement(i,r,e,t),a();else if(s&&v(s))(f=wn.computeStackTrace(s)).mechanism="onerror",o(f,!0,s);else{var h,d={url:r,line:e,column:c},p=t;if("[object String]"==={}.toString.call(t)){var m=t.match(En);m&&(h=m[1],p=m[2])}d.func=gn,d.context=null,o(f={name:h,message:p,mode:"onerror",mechanism:"onerror",stack:[u({},d,{url:d.url||xn()})]},!0,null)}return!!n&&n.apply(this,arguments)}function s(n){var t=n&&(n.detail?n.detail.reason:n.reason)||n,r=wn.computeStackTrace(t);r.mechanism="onunhandledrejection",o(r,!0,t)}function a(){var n=i,t=e;i=null,e=null,o(n,!1,t)}function f(n){if(i){if(e===n)return;a()}var t=wn.computeStackTrace(n);throw i=t,e=n,setTimeout(function(){e===n&&a()},t.incomplete?2e3:0),n}return f.subscribe=function(n){r.push(n)},f.installGlobalHandler=function(){!0!==t&&(n=bn.onerror,bn.onerror=c,t=!0)},f.installGlobalUnhandledRejectionHandler=function(){bn.onunhandledrejection=s},f}(),wn.computeStackTrace=function(){function n(n){if(!n.stack)return null;for(var t,r,e,i=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,o=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,u=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,c=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,s=/\((\S*)(?::(\d+))(?::(\d+))\)/,a=n.stack.split("\n"),f=[],h=/^(.*) is undefined$/.exec(n.message),v=0,l=a.length;v<l;++v){if(r=i.exec(a[v])){var d=r[2]&&0===r[2].indexOf("native");r[2]&&0===r[2].indexOf("eval")&&(t=s.exec(r[2]))&&(r[2]=t[1]),e={url:d?null:r[2],func:r[1]||gn,args:d?[r[2]]:[],line:r[3]?+r[3]:null,column:r[4]?+r[4]:null}}else if(r=u.exec(a[v]))e={url:r[2],func:r[1]||gn,args:[],line:+r[3],column:r[4]?+r[4]:null};else{if(!(r=o.exec(a[v])))continue;r[3]&&r[3].indexOf(" > eval")>-1&&(t=c.exec(r[3]))?r[3]=t[1]:0!==v||r[5]||void 0===n.columnNumber||(f[0].column=n.columnNumber+1),e={url:r[3],func:r[1]||gn,args:r[2]?r[2].split(","):[],line:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}!e.func&&e.line&&(e.func=gn),e.context=null,f.push(e)}return f.length?(f[0]&&f[0].line&&!f[0].column&&h&&(f[0].column=null),{mode:"stack",name:n.name,message:n.message,stack:f}):null}function t(n,t,r,e){var i={url:t,line:r};if(i.url&&i.line){if(n.incomplete=!1,i.func||(i.func=gn),i.context||(i.context=null),/ '([^']+)' /.exec(e)&&(i.column=null),n.stack.length>0&&n.stack[0].url===i.url){if(n.stack[0].line===i.line)return!1;if(!n.stack[0].line&&n.stack[0].func===i.func)return n.stack[0].line=i.line,n.stack[0].context=i.context,!1}return n.stack.unshift(i),n.partial=!0,!0}return n.incomplete=!0,!1}function r(n,i){for(var o,u,c=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,s=[],a={},f=!1,h=r.caller;h&&!f;h=h.caller)if(h!==e&&h!==wn.report){if(u={url:null,func:gn,args:[],line:null,column:null},h.name?u.func=h.name:(o=c.exec(h.toString()))&&(u.func=o[1]),void 0===u.func)try{u.func=o.input.substring(0,o.input.indexOf("{"))}catch(n){}a[""+h]?f=!0:a[""+h]=!0,s.push(u)}i&&s.splice(0,i);var v={mode:"callers",name:n.name,message:n.message,stack:s};return t(v,n.sourceURL||n.fileName,n.line||n.lineNumber,n.message||n.description),v}function e(t,e){var i=null;e=null==e?0:+e;try{if(i=function(n){var t=n.stacktrace;if(t){for(var r,e=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,i=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i,o=t.split("\n"),u=[],c=0;c<o.length;c+=2){var s=null;(r=e.exec(o[c]))?s={url:r[2],line:+r[1],column:null,func:r[3],args:[]}:(r=i.exec(o[c]))&&(s={url:r[6],line:+r[1],column:+r[2],func:r[3]||r[4],args:r[5]?r[5].split(","):[]}),s&&(!s.func&&s.line&&(s.func=gn),s.line&&(s.context=null),s.context||(s.context=[o[c+1]]),u.push(s))}return u.length?{mode:"stacktrace",name:n.name,message:n.message,stack:u}:null}}(t))return i}catch(n){}try{if(i=n(t))return i}catch(n){}try{if(i=function(n){var t=n.message.split("\n");if(t.length<4)return null;var r,e=/^\s*Line (\d+) of linked script ((?:file|https?|blob)\S+)(?:: in function (\S+))?\s*$/i,i=/^\s*Line (\d+) of inline#(\d+) script in ((?:file|https?|blob)\S+)(?:: in function (\S+))?\s*$/i,o=/^\s*Line (\d+) of function script\s*$/i,u=[],c=bn&&bn.document&&bn.document.getElementsByTagName("script"),s=[];for(var a in c)jn(c,a)&&!c[a].src&&s.push(c[a]);for(var f=2;f<t.length;f+=2){var h=null;(r=e.exec(t[f]))?h={url:r[2],func:r[3],args:[],line:+r[1],column:null}:(r=i.exec(t[f]))?h={url:r[3],func:r[4],args:[],line:+r[1],column:null}:(r=o.exec(t[f]))&&(h={url:xn().replace(/#.*$/,""),func:"",args:[],line:r[1],column:null}),h&&(h.func||(h.func=gn),h.context=[t[f+1]],u.push(h))}return u.length?{mode:"multiline",name:n.name,message:t[0],stack:u}:null}(t))return i}catch(n){}try{if(i=r(t,e+1))return i}catch(n){}return{original:t,name:t.name,message:t.message,mode:"failed"}}return e.augmentStackTraceWithInitialElement=t,e.computeStackTraceFromStackProp=n,e}(),wn.collectWindowErrors=!0,wn.linesOfContext=11;var Sn=wn.report.subscribe,On=wn.report.installGlobalHandler,_n=wn.report.installGlobalUnhandledRejectionHandler,kn=wn.computeStackTrace,Tn=50;function Rn(n){var t=In(n.stack),r={type:n.name,value:n.message};return t&&t.length&&(r.stacktrace={frames:t}),void 0===r.type&&""===r.value&&(r.value="Unrecoverable error caught"),r}function Dn(n){return{exception:{values:[Rn(n)]}}}function In(n){if(!n||!n.length)return[];var t=n,r=t[0].func||"",e=t[t.length-1].func||"";return(r.includes("captureMessage")||r.includes("captureException"))&&(t=t.slice(1)),e.includes("sentryWrapped")&&(t=t.slice(0,-1)),t.map(function(n){return{colno:n.column,filename:n.url||t[0].url,function:n.func||"?",in_app:!0,lineno:n.line}}).slice(0,Tn).reverse()}var An,Cn,Ln=function(){function n(n){this.options=n,this.h=new U(30),this.url=new cn(this.options.dsn).getStoreEndpointWithUrlEncodedAuth()}return n.prototype.sendEvent=function(n){return c(this,void 0,void 0,function(){return s(this,function(n){throw new h("Transport Class has to implement `sendEvent` method")})})},n.prototype.close=function(n){return c(this,void 0,void 0,function(){return s(this,function(t){return[2,this.h.drain(n)]})})},n}(),Mn=g(),Nn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.sendEvent=function(t){return c(this,void 0,void 0,function(){var r;return s(this,function(e){return r={body:JSON.stringify(t),method:"POST",referrerPolicy:W()?"origin":""},[2,this.h.add(Mn.fetch(this.url,r).then(function(t){return{status:n.Status.fromHttpCode(t.status)}}))]})})},e}(Ln),Fn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.sendEvent=function(t){return c(this,void 0,void 0,function(){var r=this;return s(this,function(e){return[2,this.h.add(new Promise(function(e,i){var o=new XMLHttpRequest;o.onreadystatechange=function(){4===o.readyState&&(200===o.status&&e({status:n.Status.fromHttpCode(o.status)}),i(o))},o.open("POST",r.url),o.send(JSON.stringify(t))}))]})})},e}(Ln),Un=Object.freeze({BaseTransport:Ln,FetchTransport:Nn,XHRTransport:Fn}),Pn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.fn=function(){if(!this.Z.dsn)return t.prototype.fn.call(this);var n=this.Z.transportOptions?this.Z.transportOptions:{dsn:this.Z.dsn};return this.Z.transport?new this.Z.transport(n):H()?new Nn(n):new Fn(n)},e.prototype.eventFromException=function(t,r){var e,i,o=this;if(l(t)&&t.error)return t=t.error,e=Dn(kn(t)),B.resolve(this.gn(e,r));if(d(t)||(i=t,"[object DOMException]"===Object.prototype.toString.call(i))){var u=t,c=u.name||(d(u)?"DOMError":"DOMException"),s=u.message?c+": "+u.message:c;return this.eventFromMessage(s,n.Severity.Error,r).then(function(n){return O(n,s),B.resolve(o.gn(n,r))})}if(v(t))return e=Dn(kn(t)),B.resolve(this.gn(e,r));if(y(t)&&r&&r.syntheticException)return O(e=function(n,t){var r=Object.keys(n).sort(),e={extra:{__serialized__:C(n)},message:"Non-Error exception captured with keys: "+q(r)};if(t){var i=In(kn(t).stack);e.stacktrace={frames:i}}return e}(t,r.syntheticException),"Custom Object",void 0,{handled:!0,synthetic:!0,type:"generic"}),e.level=n.Severity.Error,B.resolve(this.gn(e,r));var a=t;return this.eventFromMessage(a,void 0,r).then(function(t){return O(t,""+a,void 0,{handled:!0,synthetic:!0,type:"generic"}),t.level=n.Severity.Error,B.resolve(o.gn(t,r))})},e.prototype.gn=function(n,t){return u({},n,{event_id:t&&t.event_id})},e.prototype.eventFromMessage=function(t,r,e){void 0===r&&(r=n.Severity.Info);var i={event_id:e&&e.event_id,level:r,message:t};if(this.Z.attachStacktrace&&e&&e.syntheticException){var o=In(kn(e.syntheticException).stack);i.stacktrace={frames:o}}return B.resolve(i)},e}(ln),$n="sentry.javascript.browser",qn=function(n){function t(t){return void 0===t&&(t={}),n.call(this,Pn,t)||this}return r(t,n),t.prototype.un=function(t,r,e){return t.platform=t.platform||"javascript",t.sdk=u({},t.sdk,{name:$n,packages:f(t.sdk&&t.sdk.packages||[],[{name:"npm:@sentry/browser",version:"5.1.0"}]),version:"5.1.0"}),n.prototype.un.call(this,t,r,e)},t.prototype.showReportDialog=function(n){void 0===n&&(n={});var t=g().document;if(t)if(this.on()){var r=n.dsn||this.getDsn();if(n.eventId)if(r){var e=t.createElement("script");e.async=!0,e.src=new cn(r).getReportDialogEndpoint(n),(t.head||t.body).appendChild(e)}else R.error("Missing `Dsn` option in showReportDialog call");else R.error("Missing `eventId` option in showReportDialog call")}else R.error("Trying to call showReportDialog with Sentry Client is disabled")},t}(hn),Hn=1e3,Wn=0;function Bn(n,t,r){if(void 0===t&&(t={}),"function"!=typeof n)return n;try{if(n.__sentry__)return n;if(n.__sentry_wrapped__)return n.__sentry_wrapped__}catch(t){return n}var sentryWrapped=function(){r&&"function"==typeof r&&r.apply(this,arguments);var e=Array.prototype.slice.call(arguments);try{var i=e.map(function(n){return Bn(n,t)});return n.handleEvent?n.handleEvent.apply(this,i):n.apply(this,i)}catch(n){throw Wn+=1,setTimeout(function(){Wn-=1}),en(function(r){r.addEventProcessor(function(n){var r=u({},n);return t.mechanism&&O(r,void 0,void 0,t.mechanism),r.extra=u({},r.extra,{arguments:N(e,3)}),r}),captureException(n)}),n}};try{for(var e in n)Object.prototype.hasOwnProperty.call(n,e)&&(sentryWrapped[e]=n[e])}catch(n){}n.prototype=n.prototype||{},sentryWrapped.prototype=n.prototype,Object.defineProperty(n,"__sentry_wrapped__",{enumerable:!1,value:sentryWrapped}),Object.defineProperties(sentryWrapped,{__sentry__:{enumerable:!1,value:!0},__sentry_original__:{enumerable:!1,value:n}});try{Object.defineProperty(sentryWrapped,"name",{get:function(){return n.name}})}catch(n){}return sentryWrapped}var Gn=0;function Jn(n,t){return void 0===t&&(t=!1),function(r){if(An=void 0,r&&Cn!==r){Cn=r;var e=function(){var t;try{t=r.target?zn(r.target):zn(r)}catch(n){t="<unknown>"}0!==t.length&&Q().addBreadcrumb({category:"ui."+n,message:t},{event:r,name:n})};Gn&&clearTimeout(Gn),t?Gn=setTimeout(e):e()}}}function Xn(){return function(n){var t;try{t=n.target}catch(n){return}var r=t&&t.tagName;r&&("INPUT"===r||"TEXTAREA"===r||t.isContentEditable)&&(An||Jn("input")(n),clearTimeout(An),An=setTimeout(function(){An=void 0},Hn))}}function zn(n){for(var t,r=n,e=[],i=0,o=0,u=" > ".length;r&&i++<5&&!("html"===(t=Vn(r))||i>1&&o+e.length*u+t.length>=80);)e.push(t),o+=t.length,r=r.parentNode;return e.reverse().join(" > ")}function Vn(n){var t,r,e,i,o,u=[];if(!n||!n.tagName)return"";if(u.push(n.tagName.toLowerCase()),n.id&&u.push("#"+n.id),(t=n.className)&&p(t))for(r=t.split(/\s+/),o=0;o<r.length;o++)u.push("."+r[o]);var c=["type","name","title","alt"];for(o=0;o<c.length;o++)e=c[o],(i=n.getAttribute(e))&&u.push("["+e+'="'+i+'"]');return u.join("")}var Kn=function(){function n(t){this.name=n.id,this.Z=u({onerror:!0,onunhandledrejection:!0},t)}return n.prototype.setupOnce=function(){Error.stackTraceLimit=50,Sn(function(t,r,e){if(!(Wn>0)){var i=Q().getIntegration(n);i&&Q().captureEvent(i.En(t),{data:{stack:t},originalException:e})}}),this.Z.onerror&&(R.log("Global Handler attached: onerror"),On()),this.Z.onunhandledrejection&&(R.log("Global Handler attached: onunhandledrejection"),_n())},n.prototype.En=function(n){var t=Dn(n),r={mode:n.mode};n.message&&(r.message=n.message),n.name&&(r.name=n.name);var e=Q().getClient(),i=e&&e.getOptions().maxValueLength||250;return O(t,n.original?P(JSON.stringify(N(n.original)),i):"","onunhandledrejection"===n.mechanism?"UnhandledRejection":"Error",{data:r,handled:!1,type:n.mechanism}),t},n.id="GlobalHandlers",n}(),Zn=function(){function n(){this.jn=0,this.name=n.id}return n.prototype.xn=function(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var e=t[0];return t[0]=Bn(e,{mechanism:{data:{function:Qn(n)},handled:!0,type:"instrument"}}),n.apply(this,t)}},n.prototype.Sn=function(n){return function(t){return n(Bn(t,{mechanism:{data:{function:"requestAnimationFrame",handler:Qn(n)},handled:!0,type:"instrument"}}))}},n.prototype.On=function(n){var t=g(),r=t[n]&&t[n].prototype;r&&r.hasOwnProperty&&r.hasOwnProperty("addEventListener")&&(I(r,"addEventListener",function(t){return function(r,e,i){try{e.handleEvent=Bn(e.handleEvent.bind(e),{mechanism:{data:{function:"handleEvent",handler:Qn(e),target:n},handled:!0,type:"instrument"}})}catch(n){}return t.call(this,r,Bn(e,{mechanism:{data:{function:"addEventListener",handler:Qn(e),target:n},handled:!0,type:"instrument"}}),i)}}),I(r,"removeEventListener",function(n){return function(t,r,e){var i=r;try{i=i&&(i.__sentry_wrapped__||i)}catch(n){}return n.call(this,t,i,e)}}))},n.prototype.setupOnce=function(){this.jn=this.jn;var n=g();I(n,"setTimeout",this.xn.bind(this)),I(n,"setInterval",this.xn.bind(this)),I(n,"requestAnimationFrame",this.Sn.bind(this)),["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"].forEach(this.On.bind(this))},n.id="TryCatch",n}();function Qn(n){try{return n&&n.name||"<anonymous>"}catch(n){return"<anonymous>"}}var Yn,nt=g(),tt=function(){function t(n){this.name=t.id,this.Z=u({console:!0,dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0},n)}return t.prototype._n=function(){"console"in nt&&["debug","info","warn","error","log","assert"].forEach(function(r){r in nt.console&&I(nt.console,r,function(e){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];var u={category:"console",data:{extra:{arguments:N(i,3)},logger:"console"},level:n.Severity.fromString(r),message:$(i," ")};"assert"===r&&!1===i[0]&&(u.message="Assertion failed: "+($(i.slice(1)," ")||"console.assert"),u.data.extra.arguments=N(i.slice(1),3)),t.addBreadcrumb(u,{input:i,level:r}),e&&Function.prototype.apply.call(e,nt.console,i)}})})},t.prototype.kn=function(){"document"in nt&&(nt.document.addEventListener("click",Jn("click"),!1),nt.document.addEventListener("keypress",Xn(),!1),["EventTarget","Node"].forEach(function(n){var t=nt[n]&&nt[n].prototype;t&&t.hasOwnProperty&&t.hasOwnProperty("addEventListener")&&(I(t,"addEventListener",function(n){return function(t,r,e){return r.handleEvent?("click"===t&&I(r,"handleEvent",function(n){return function(t){return Jn("click")(t),n.call(this,t)}}),"keypress"===t&&I(r,"handleEvent",Xn())):("click"===t&&Jn("click",!0)(this),"keypress"===t&&Xn()(this)),n.call(this,t,r,e)}}),I(t,"removeEventListener",function(n){return function(t,r,e){var i=r;try{i=i&&(i.__sentry_wrapped__||i)}catch(n){}return n.call(this,t,i,e)}}))}))},t.prototype.Tn=function(){H()&&-1!==g().fetch.toString().indexOf("native")&&I(nt,"fetch",function(r){return function(){for(var e=[],i=0;i<arguments.length;i++)e[i]=arguments[i];var o,u=e[0],c="GET";"string"==typeof u?o=u:"Request"in nt&&u instanceof Request?(o=u.url,u.method&&(c=u.method)):o=String(u),e[1]&&e[1].method&&(c=e[1].method);var s=Q().getClient(),a=s&&s.getDsn();if(a){var f=new cn(a).getStoreEndpoint();if(f&&o.includes(f))return"POST"===c&&e[1]&&e[1].body&&rt(e[1].body),r.apply(nt,e)}var h={method:c,url:o};return r.apply(nt,e).then(function(n){return h.status_code=n.status,t.addBreadcrumb({category:"fetch",data:h,type:"http"},{input:e,response:n}),n}).catch(function(r){throw t.addBreadcrumb({category:"fetch",data:h,level:n.Severity.Error,type:"http"},{error:r,input:e}),r})}})},t.prototype.Rn=function(){var n=this;if(r=g(),e=r.chrome,i=e&&e.app&&e.app.runtime,o="history"in r&&!!r.history.pushState&&!!r.history.replaceState,!i&&o){var r,e,i,o,u=function(n,r){var e=j(nt.location.href),i=j(r),o=j(n);o.path||(o=e),Yn=r,e.protocol===i.protocol&&e.host===i.host&&(r=i.relative),e.protocol===o.protocol&&e.host===o.host&&(n=o.relative),t.addBreadcrumb({category:"navigation",data:{from:n,to:r}})},c=nt.onpopstate;nt.onpopstate=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var e=nt.location.href;if(u(Yn,e),c)return c.apply(n,t)},I(nt.history,"pushState",s),I(nt.history,"replaceState",s)}function s(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var e=t.length>2?t[2]:void 0;return e&&u(Yn,String(e)),n.apply(this,t)}}},t.prototype.Dn=function(){if("XMLHttpRequest"in nt){var n=XMLHttpRequest.prototype;I(n,"open",function(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var e=t[1];this.__sentry_xhr__={method:t[0],url:t[1]};var i=Q().getClient(),o=i&&i.getDsn();if(o){var u=new cn(o).getStoreEndpoint();p(e)&&u&&e.includes(u)&&(this.__sentry_own_request__=!0)}return n.apply(this,t)}}),I(n,"send",function(n){return function(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];var i=this;function o(){if(4===i.readyState){if(i.__sentry_own_request__)return;try{i.__sentry_xhr__&&(i.__sentry_xhr__.status_code=i.status)}catch(n){}t.addBreadcrumb({category:"xhr",data:i.__sentry_xhr__,type:"http"},{xhr:i})}}return i.__sentry_own_request__&&rt(r[0]),["onload","onerror","onprogress"].forEach(function(n){!function(n,t){n in t&&"function"==typeof t[n]&&I(t,n,function(t){return Bn(t,{mechanism:{data:{function:n,handler:t&&t.name||"<anonymous>"},handled:!0,type:"instrument"}})})}(n,i)}),"onreadystatechange"in i&&"function"==typeof i.onreadystatechange?I(i,"onreadystatechange",function(n){return Bn(n,{mechanism:{data:{function:"onreadystatechange",handler:n&&n.name||"<anonymous>"},handled:!0,type:"instrument"}},o)}):i.onreadystatechange=o,n.apply(this,r)}})}},t.addBreadcrumb=function(n,r){Q().getIntegration(t)&&Q().addBreadcrumb(n,r)},t.prototype.setupOnce=function(){this.Z.console&&this._n(),this.Z.dom&&this.kn(),this.Z.xhr&&this.Dn(),this.Z.fetch&&this.Tn(),this.Z.history&&this.Rn()},t.id="Breadcrumbs",t}();function rt(t){try{var r=JSON.parse(t);tt.addBreadcrumb({category:"sentry",event_id:r.event_id,level:r.level||n.Severity.fromString("error"),message:x(r)},{event:r})}catch(n){R.error("Error while adding sentry type breadcrumb")}}var et="cause",it=5,ot=function(){function n(t){void 0===t&&(t={}),this.name=n.id,this.In=t.key||et,this.s=t.limit||it}return n.prototype.setupOnce=function(){X(function(t,r){var e=Q().getIntegration(n);return e?e.handler(t,r):t})},n.prototype.handler=function(n,t){if(!(n.exception&&n.exception.values&&t&&t.originalException instanceof Error))return n;var r=this.walkErrorTree(t.originalException,this.In);return n.exception.values=f(r,n.exception.values),n},n.prototype.walkErrorTree=function(n,t,r){if(void 0===r&&(r=[]),!(n[t]instanceof Error)||r.length+1>=this.s)return r;var e=Rn(kn(n[t]));return this.walkErrorTree(n[t],t,f([e],r))},n.id="LinkedErrors",n}(),ut=g(),ct=function(){function n(){this.name=n.id}return n.prototype.setupOnce=function(){X(function(t){if(Q().getIntegration(n)){if(!ut.navigator||!ut.location)return t;var r=t.request||{};return r.url=r.url||ut.location.href,r.headers=r.headers||{},r.headers["User-Agent"]=ut.navigator.userAgent,u({},t,{request:r})}return t})},n.id="UserAgent",n}(),st=Object.freeze({GlobalHandlers:Kn,TryCatch:Zn,Breadcrumbs:tt,LinkedErrors:ot,UserAgent:ct}),at=[new mn,new dn,new Zn,new tt,new Kn,new ot,new ct];var ft={},ht=g();ht.Sentry&&ht.Sentry.Integrations&&(ft=ht.Sentry.Integrations);var vt=u({},ft,yn,st);return n.Integrations=vt,n.Transports=Un,n.addGlobalEventProcessor=X,n.addBreadcrumb=function(n){rn("addBreadcrumb",n)},n.captureException=captureException,n.captureEvent=function(n){return rn("captureEvent",n)},n.captureMessage=function(n,t){var r;try{throw new Error(n)}catch(n){r=n}return rn("captureMessage",n,t,{originalException:n,syntheticException:r})},n.configureScope=function(n){rn("configureScope",n)},n.withScope=en,n.getHubFromCarrier=nn,n.getCurrentHub=Q,n.Hub=V,n.Scope=G,n.BrowserClient=qn,n.defaultIntegrations=at,n.forceLoad=function(){},n.init=function(n){void 0===n&&(n={}),void 0===n.defaultIntegrations&&(n.defaultIntegrations=at),function(n,t){!0===t.debug&&R.enable(),Q().bindClient(new n(t))}(qn,n)},n.lastEventId=function(){return Q().lastEventId()},n.onLoad=function(n){n()},n.showReportDialog=function(n){void 0===n&&(n={}),n.eventId||(n.eventId=Q().lastEventId());var t=Q().getClient();t&&t.showReportDialog(n)},n.flush=function(n){return c(this,void 0,void 0,function(){var t;return s(this,function(r){return(t=Q().getClient())?[2,t.flush(n)]:[2,Promise.reject(!1)]})})},n.close=function(n){return c(this,void 0,void 0,function(){var t;return s(this,function(r){return(t=Q().getClient())?[2,t.close(n)]:[2,Promise.reject(!1)]})})},n.SDK_NAME=$n,n.SDK_VERSION="5.1.0",n}({});
+//# sourceMappingURL=bundle.min.js.map
diff --git a/app/templates/500.html b/app/templates/500.html
index 99fb3a685d7f310646574ebac8028bd8d812162d..3129c10bf3147b025f294ee5b4c7974a10ff804f 100644
--- a/app/templates/500.html
+++ b/app/templates/500.html
@@ -7,13 +7,11 @@
 {%- endblock %}
 
 {% block csentry_scripts %}
-  <script src="{{ url_for('static', filename='js/raven.min.js') }}"></script>
-  {% if event_id %}
+  <script src="{{ url_for('static', filename='js/sentry-bundle.min.js') }}"></script>
+  {% if config["SENTRY_DSN"] %}
   <script>
-    Raven.showReportDialog({
-      eventId: '{{ event_id }}',
-      dsn: '{{ public_dsn }}'
-    });
+    Sentry.init({ dsn: '{{ config["SENTRY_DSN"] }}' });
+    Sentry.showReportDialog({ eventId: '{{ sentry_event_id }}' });
   </script>
   {% endif %}
 {% endblock %}
diff --git a/requirements-to-freeze.txt b/requirements-to-freeze.txt
index ab3c21d7ea15d2ec72bd47dce5a47a6d8b3643b4..316750d3abb71f608446491f543d4cffa8346eb9 100644
--- a/requirements-to-freeze.txt
+++ b/requirements-to-freeze.txt
@@ -20,9 +20,9 @@ pyyaml
 qrcode
 whitenoise
 ansible-tower-cli
-raven
 rq
 rq-dashboard
+sentry-sdk
 sqlalchemy-citext
 sqlalchemy-continuum
 openpyxl
diff --git a/requirements.txt b/requirements.txt
index f8dc7b6d480b68f6869e5b6b3fcafbfaa389d505..14e395ebd384bb3a9e7fd9e26edb6c72e6eb0e4f 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -37,11 +37,11 @@ python-dateutil==2.7.5
 python-editor==1.0.3
 PyYAML==3.13
 qrcode==6.0
-raven==6.9.0
 redis==2.10.6
 requests==2.20.1
 rq==0.12.0
 rq-dashboard==0.3.12
+sentry-sdk==0.7.10
 six==1.11.0
 SQLAlchemy==1.2.14
 sqlalchemy-citext==1.3.post0