From 1826246856456212131a6ed3bdaecd327724f728 Mon Sep 17 00:00:00 2001 From: Lav Radis Date: Tue, 13 Mar 2018 20:25:32 +0100 Subject: [PATCH 01/16] Create what-is-speech.md Just a start of spee.ch FAQ --- FAQ/what-is-speech.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 FAQ/what-is-speech.md diff --git a/FAQ/what-is-speech.md b/FAQ/what-is-speech.md new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/FAQ/what-is-speech.md @@ -0,0 +1 @@ + From ce706afbbd0a09e4fa44d1af04539d1d809f906e Mon Sep 17 00:00:00 2001 From: bill bittner Date: Mon, 19 Mar 2018 13:58:45 -0700 Subject: [PATCH 02/16] merged speech package branch and updated configs --- .gitignore | 13 +++++--- .../{lbryConfig.js => lbryConfig.js.example} | 0 config/loggerConfig.js.example | 5 +++ config/mysqlConfig.js | 9 ------ config/mysqlConfig.js.example | 7 +++++ config/siteConfig.js | 11 ------- config/siteConfig.js.example | 31 +++++++++++++++++++ config/slackConfig.js | 9 ------ config/slackConfig.js.example | 7 +++++ ...ample.js => sequelizeCliConfig.js.example} | 0 ...ig.example.js => testingConfig.js.example} | 0 11 files changed, 59 insertions(+), 33 deletions(-) rename config/{lbryConfig.js => lbryConfig.js.example} (100%) create mode 100644 config/loggerConfig.js.example create mode 100644 config/mysqlConfig.js.example create mode 100644 config/siteConfig.js.example create mode 100644 config/slackConfig.js.example rename devConfig/{sequelizeCliConfig.example.js => sequelizeCliConfig.js.example} (100%) rename devConfig/{testingConfig.example.js => testingConfig.js.example} (100%) diff --git a/.gitignore b/.gitignore index 6f577b24..21a6d8fe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,9 @@ -node_modules -.idea -/devConfig/sequelizeCliConfig.js -/devConfig/testingConfig.js +node_modules/ +.idea/ +config/lbryConfig.js +config/loggerConfig.js +config/mysqlConfig.js +config/siteConfig.js +config/slackConfig.js +devConfig/sequelizeCliConfig.js +devConfig/testingConfig.js diff --git a/config/lbryConfig.js b/config/lbryConfig.js.example similarity index 100% rename from config/lbryConfig.js rename to config/lbryConfig.js.example diff --git a/config/loggerConfig.js.example b/config/loggerConfig.js.example new file mode 100644 index 00000000..18c53a95 --- /dev/null +++ b/config/loggerConfig.js.example @@ -0,0 +1,5 @@ +const loggerConfig = { + logLevel: 'debug', // options: silly, debug, verbose, info +}; + +module.exports = loggerConfig; diff --git a/config/mysqlConfig.js b/config/mysqlConfig.js index ee29c68f..155c038f 100644 --- a/config/mysqlConfig.js +++ b/config/mysqlConfig.js @@ -2,15 +2,6 @@ function MysqlConfig () { this.database = 'default'; this.username = 'default'; this.password = 'default'; - this.configure = (config) => { - if (!config) { - return console.log('No MySQL config received.'); - } - const {database, username, password} = config; - this.database = database; - this.username = username; - this.password = password; - }; }; module.exports = new MysqlConfig(); diff --git a/config/mysqlConfig.js.example b/config/mysqlConfig.js.example new file mode 100644 index 00000000..155c038f --- /dev/null +++ b/config/mysqlConfig.js.example @@ -0,0 +1,7 @@ +function MysqlConfig () { + this.database = 'default'; + this.username = 'default'; + this.password = 'default'; +}; + +module.exports = new MysqlConfig(); diff --git a/config/siteConfig.js b/config/siteConfig.js index 22732547..a0e91b59 100644 --- a/config/siteConfig.js +++ b/config/siteConfig.js @@ -26,17 +26,6 @@ function SiteConfig () { thumbnailChannelId : 'default', uploadDirectory : '/home/lbry/Uploads', }; - this.configure = (config) => { - if (!config) { - return console.log('No site config received.'); - } - const { analytics, assetDefaults, auth, details, publishing } = config; - this.analytics = analytics; - this.assetDefaults = assetDefaults; - this.auth = auth; - this.details = details; - this.publishing = publishing; - }; }; module.exports = new SiteConfig(); diff --git a/config/siteConfig.js.example b/config/siteConfig.js.example new file mode 100644 index 00000000..a0e91b59 --- /dev/null +++ b/config/siteConfig.js.example @@ -0,0 +1,31 @@ +function SiteConfig () { + this.analytics = { + googleId: 'default', + }; + this.assetDefaults = { + description: 'An asset published on Spee.ch', + thumbnail : 'https://spee.ch/assets/img/video_thumb_default.png', + title : 'Spee.ch', + }; + this.auth = { + sessionKey: 'default', + }; + this.details = { + description: 'Open-source, decentralized image and video sharing.', + host : 'default', + port : 3000, + title : 'Spee.ch', + twitter : '@spee_ch', + }; + this.publishing = { + additionalClaimAddresses: [], + disabled : false, + disabledMessage : 'Please check back soon.', + primaryClaimAddress : 'default', + thumbnailChannel : 'default', + thumbnailChannelId : 'default', + uploadDirectory : '/home/lbry/Uploads', + }; +}; + +module.exports = new SiteConfig(); diff --git a/config/slackConfig.js b/config/slackConfig.js index cceadab6..8cb66f8b 100644 --- a/config/slackConfig.js +++ b/config/slackConfig.js @@ -2,15 +2,6 @@ function SlackConfig () { this.slackWebHook = 'default'; this.slackErrorChannel = 'default'; this.slackInfoChannel = 'default'; - this.configure = (config) => { - if (!config) { - return console.log('No slack config received.'); - } - const {slackWebHook, slackErrorChannel, slackInfoChannel} = config; - this.slackWebHook = slackWebHook; - this.slackErrorChannel = slackErrorChannel; - this.slackInfoChannel = slackInfoChannel; - }; }; module.exports = new SlackConfig(); diff --git a/config/slackConfig.js.example b/config/slackConfig.js.example new file mode 100644 index 00000000..8cb66f8b --- /dev/null +++ b/config/slackConfig.js.example @@ -0,0 +1,7 @@ +function SlackConfig () { + this.slackWebHook = 'default'; + this.slackErrorChannel = 'default'; + this.slackInfoChannel = 'default'; +}; + +module.exports = new SlackConfig(); diff --git a/devConfig/sequelizeCliConfig.example.js b/devConfig/sequelizeCliConfig.js.example similarity index 100% rename from devConfig/sequelizeCliConfig.example.js rename to devConfig/sequelizeCliConfig.js.example diff --git a/devConfig/testingConfig.example.js b/devConfig/testingConfig.js.example similarity index 100% rename from devConfig/testingConfig.example.js rename to devConfig/testingConfig.js.example From e533eaf44bc46f6875fcf740c9ce5b6a01b7d195 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Mon, 19 Mar 2018 14:11:05 -0700 Subject: [PATCH 03/16] updated server file and webpacks --- client/{app.js => app.jsx} | 0 package.json | 4 +- server.js | 98 -------------------------------------- server/server.js | 81 +++++++++++++++++++++++++++++++ webpack.client.common.js | 4 +- webpack.dev.client.js | 11 +++++ webpack.dev.server.js | 11 +++++ webpack.server.common.js | 10 ++-- 8 files changed, 113 insertions(+), 106 deletions(-) rename client/{app.js => app.jsx} (100%) delete mode 100644 server.js create mode 100644 server/server.js create mode 100644 webpack.dev.client.js create mode 100644 webpack.dev.server.js diff --git a/client/app.js b/client/app.jsx similarity index 100% rename from client/app.js rename to client/app.jsx diff --git a/package.json b/package.json index df04c7fc..8e3bd71b 100644 --- a/package.json +++ b/package.json @@ -7,12 +7,14 @@ "test": "mocha --recursive", "test-all": "mocha --recursive", "start": "node index.js", - "start-dev": "nodemon index.js", + "start-dev": "nodemon server/index.js", "lint": "eslint .", "fix": "eslint . --fix", "precommit": "eslint .", "babel": "babel", "build-dev": "webpack --config webpack.dev.js", + "build-dev-client": "webpack --config webpack.dev.client.js", + "build-dev-server": "webpack --config webpack.dev.server.js", "build": "webpack --config webpack.prod.js" }, "repository": { diff --git a/server.js b/server.js deleted file mode 100644 index d5f772b4..00000000 --- a/server.js +++ /dev/null @@ -1,98 +0,0 @@ -// app dependencies -const express = require('express'); -const bodyParser = require('body-parser'); -const expressHandlebars = require('express-handlebars'); -const Handlebars = require('handlebars'); -const helmet = require('helmet'); -const passport = require('passport'); -const { serializeSpeechUser, deserializeSpeechUser } = require('./server/helpers/authHelpers.js'); -const cookieSession = require('cookie-session'); -const http = require('http'); -// logging dependencies -const logger = require('winston'); - -function SpeechServer () { - this.configureMysql = (mysqlConfig) => { - require('./config/mysqlConfig.js').configure(mysqlConfig); - }; - this.configureSite = (siteConfig) => { - require('./config/siteConfig.js').configure(siteConfig); - this.sessionKey = siteConfig.auth.sessionKey; - this.PORT = siteConfig.details.port; - }; - this.configureSlack = (slackConfig) => { - require('./config/slackConfig.js').configure(slackConfig); - }; - this.createApp = () => { - // create an Express application - const app = express(); - - // trust the proxy to get ip address for us - app.enable('trust proxy'); - - // add middleware - app.use(helmet()); // set HTTP headers to protect against well-known web vulnerabilties - app.use(express.static(`${__dirname}/public`)); // 'express.static' to serve static files from public directory - app.use(bodyParser.json()); // 'body parser' for parsing application/json - app.use(bodyParser.urlencoded({ extended: true })); // 'body parser' for parsing application/x-www-form-urlencoded - app.use((req, res, next) => { // custom logging middleware to log all incoming http requests - logger.verbose(`Request on ${req.originalUrl} from ${req.ip}`); - next(); - }); - - // configure passport - passport.serializeUser(serializeSpeechUser); - passport.deserializeUser(deserializeSpeechUser); - const localSignupStrategy = require('./server/passport/local-signup.js'); - const localLoginStrategy = require('./server/passport/local-login.js'); - passport.use('local-signup', localSignupStrategy); - passport.use('local-login', localLoginStrategy); - // initialize passport - app.use(cookieSession({ - name : 'session', - keys : [this.sessionKey], - maxAge: 24 * 60 * 60 * 1000, // i.e. 24 hours - })); - app.use(passport.initialize()); - app.use(passport.session()); - - // configure handlebars & register it with express app - const hbs = expressHandlebars.create({ - defaultLayout: 'embed', - handlebars : Handlebars, - }); - app.engine('handlebars', hbs.engine); - app.set('view engine', 'handlebars'); - - // set the routes on the app - require('./server/routes/auth-routes.js')(app); - require('./server/routes/api-routes.js')(app); - require('./server/routes/page-routes.js')(app); - require('./server/routes/asset-routes.js')(app); - require('./server/routes/fallback-routes.js')(app); - - this.app = app; - }; - this.initialize = () => { - require('./server/helpers/configureLogger.js')(logger); - require('./server/helpers/configureSlack.js')(logger); - this.createApp(); - this.server = http.Server(this.app); - }; - this.start = () => { - const db = require('./server/models/index'); - // sync sequelize - db.sequelize.sync() - // start the server - .then(() => { - this.server.listen(this.PORT, () => { - logger.info(`Server is listening on PORT ${this.PORT}`); - }); - }) - .catch((error) => { - logger.error(`Startup Error:`, error); - }); - }; -}; - -module.exports = SpeechServer; diff --git a/server/server.js b/server/server.js new file mode 100644 index 00000000..cd3da657 --- /dev/null +++ b/server/server.js @@ -0,0 +1,81 @@ +// app dependencies +const express = require('express'); +const bodyParser = require('body-parser'); +const expressHandlebars = require('express-handlebars'); +const Handlebars = require('handlebars'); +const helmet = require('helmet'); +const passport = require('passport'); +const { serializeSpeechUser, deserializeSpeechUser } = require('./helpers/authHelpers.js'); +const cookieSession = require('cookie-session'); +const http = require('http'); +// logging dependencies +const logger = require('winston'); + +const {auth: { sessionKey }, details: { port: PORT }} = require('../config/siteConfig.js'); + +// create an Express application +const app = express(); + +// trust the proxy to get ip address for us +app.enable('trust proxy'); + +// add middleware +app.use(helmet()); // set HTTP headers to protect against well-known web vulnerabilties +app.use(express.static(`${__dirname}/public`)); // 'express.static' to serve static files from public directory +app.use(bodyParser.json()); // 'body parser' for parsing application/json +app.use(bodyParser.urlencoded({ extended: true })); // 'body parser' for parsing application/x-www-form-urlencoded +app.use((req, res, next) => { // custom logging middleware to log all incoming http requests + logger.verbose(`Request on ${req.originalUrl} from ${req.ip}`); + next(); +}); + +// configure passport +passport.serializeUser(serializeSpeechUser); +passport.deserializeUser(deserializeSpeechUser); +const localSignupStrategy = require('./passport/local-signup.js'); +const localLoginStrategy = require('./passport/local-login.js'); +passport.use('local-signup', localSignupStrategy); +passport.use('local-login', localLoginStrategy); +// initialize passport +app.use(cookieSession({ + name : 'session', + keys : [sessionKey], + maxAge: 24 * 60 * 60 * 1000, // i.e. 24 hours +})); +app.use(passport.initialize()); +app.use(passport.session()); + +// configure handlebars & register it with express app +const hbs = expressHandlebars.create({ + defaultLayout: 'embed', + handlebars : Handlebars, +}); +app.engine('handlebars', hbs.engine); +app.set('view engine', 'handlebars'); + +// set the routes on the app +require('./routes/auth-routes.js')(app); +require('./routes/api-routes.js')(app); +require('./routes/page-routes.js')(app); +require('./routes/asset-routes.js')(app); +require('./routes/fallback-routes.js')(app); + +// create server +const server = http.Server(app); + +// configure logger +require('./helpers/configureLogger.js')(logger); +require('./helpers/configureSlack.js')(logger); + +// sync sequelize +const db = require('./models/index'); +db.sequelize.sync() + // start the server + .then(() => { + server.listen(PORT, () => { + logger.info(`Server is listening on PORT ${PORT}`); + }); + }) + .catch((error) => { + logger.error(`Startup Error:`, error); + }); diff --git a/webpack.client.common.js b/webpack.client.common.js index a8447be0..8370a688 100644 --- a/webpack.client.common.js +++ b/webpack.client.common.js @@ -1,5 +1,5 @@ const Path = require('path'); -const REACT_ROOT = Path.resolve(__dirname, 'client/'); +const CLIENT_ROOT = Path.resolve(__dirname, 'client/'); module.exports = { target: 'web', @@ -23,7 +23,7 @@ module.exports = { }, resolve: { modules: [ - REACT_ROOT, + CLIENT_ROOT, 'node_modules', __dirname, ], diff --git a/webpack.dev.client.js b/webpack.dev.client.js new file mode 100644 index 00000000..ad9be8bc --- /dev/null +++ b/webpack.dev.client.js @@ -0,0 +1,11 @@ +const clientBaseConfig = require('./webpack.client.common.js'); +const merge = require('webpack-merge'); + +const devBuildConfig = { + watch : true, + devtool: 'inline-source-map', +}; + +module.exports = [ + merge(clientBaseConfig, devBuildConfig), +]; diff --git a/webpack.dev.server.js b/webpack.dev.server.js new file mode 100644 index 00000000..b8c812e3 --- /dev/null +++ b/webpack.dev.server.js @@ -0,0 +1,11 @@ +const serverBaseConfig = require('./webpack.server.common.js'); +const merge = require('webpack-merge'); + +const devBuildConfig = { + watch : true, + devtool: 'inline-source-map', +}; + +module.exports = [ + merge(serverBaseConfig, devBuildConfig), +]; diff --git a/webpack.server.common.js b/webpack.server.common.js index 1c73080d..c631af87 100644 --- a/webpack.server.common.js +++ b/webpack.server.common.js @@ -1,6 +1,6 @@ const Path = require('path'); const nodeExternals = require('webpack-node-externals'); -const REACT_ROOT = Path.resolve(__dirname, 'client/'); +const CLIENT_ROOT = Path.resolve(__dirname, 'client/'); module.exports = { target: 'node', @@ -8,10 +8,10 @@ module.exports = { __dirname: false, }, externals: [nodeExternals()], - entry : ['babel-polyfill', 'whatwg-fetch', './server.js'], + entry : ['babel-polyfill', 'whatwg-fetch', './server/server.js'], output : { - path : Path.join(__dirname, '/'), - publicPath : '/', + path : Path.join(__dirname, 'server/'), + publicPath : 'server/', filename : 'index.js', library : '', libraryTarget: 'commonjs-module', @@ -34,7 +34,7 @@ module.exports = { }, resolve: { modules: [ - REACT_ROOT, + CLIENT_ROOT, 'node_modules', __dirname, ], From 179a397fb2dad5bbfda7d9de009f9cd569a48cc5 Mon Sep 17 00:00:00 2001 From: Bill Bittner Date: Mon, 19 Mar 2018 14:28:08 -0700 Subject: [PATCH 04/16] Delete bundle.js --- public/bundle/bundle.js | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 public/bundle/bundle.js diff --git a/public/bundle/bundle.js b/public/bundle/bundle.js deleted file mode 100644 index 23f165f4..00000000 --- a/public/bundle/bundle.js +++ /dev/null @@ -1,28 +0,0 @@ -!function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="public/bundle/",t(t.s=199)}([function(e,t,n){var r=n(3),o=n(28),a=n(16),i=n(17),u=n(25),c=function(e,t,n){var l,s,f,p,d=e&c.F,h=e&c.G,m=e&c.S,v=e&c.P,y=e&c.B,b=h?r:m?r[t]||(r[t]={}):(r[t]||{}).prototype,g=h?o:o[t]||(o[t]={}),w=g.prototype||(g.prototype={});h&&(n=t);for(l in n)s=!d&&b&&void 0!==b[l],f=(s?b:n)[l],p=y&&s?u(f,r):v&&"function"==typeof f?u(Function.call,f):f,b&&i(b,l,f,e&c.U),g[l]!=f&&a(g,l,p),v&&w[l]!=f&&(w[l]=f)};r.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,t,n){"use strict";e.exports=n(404)},function(e,t,n){var r=n(5);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(415),o=n(167),a=n(420);n.d(t,"Provider",function(){return r.b}),n.d(t,"createProvider",function(){return r.a}),n.d(t,"connectAdvanced",function(){return o.a}),n.d(t,"connect",function(){return a.a})},function(e,t,n){var r=n(69)("wks"),o=n(40),a=n(3).Symbol,i="function"==typeof a;(e.exports=function(e){return r[e]||(r[e]=i&&a[e]||(i?a:o)("Symbol."+e))}).store=r},function(e,t,n){e.exports=n(416)()},function(e,t,n){e.exports=!n(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t,n){var r=n(2),o=n(131),a=n(29),i=Object.defineProperty;t.f=n(9)?Object.defineProperty:function(e,t,n){if(r(e),t=a(t,!0),r(n),o)try{return i(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(31),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},function(e,t,n){var r=n(30);e.exports=function(e){return Object(r(e))}},function(e,t,n){"use strict";var r=function(){};e.exports=r},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){var r=n(10),o=n(39);e.exports=n(9)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var r=n(3),o=n(16),a=n(15),i=n(40)("src"),u=Function.toString,c=(""+u).split("toString");n(28).inspectSource=function(e){return u.call(e)},(e.exports=function(e,t,n,u){var l="function"==typeof n;l&&(a(n,"name")||o(n,"name",t)),e[t]!==n&&(l&&(a(n,i)||o(n,i,e[t]?""+e[t]:c.join(String(t)))),e===r?e[t]=n:u?e[t]?e[t]=n:o(e,t,n):(delete e[t],o(e,t,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[i]||u.call(this)})},function(e,t,n){var r=n(0),o=n(4),a=n(30),i=/"/g,u=function(e,t,n,r){var o=String(a(e)),u="<"+t;return""!==n&&(u+=" "+n+'="'+String(r).replace(i,""")+'"'),u+">"+o+""};e.exports=function(e,t){var n={};n[e]=t(u),r(r.P+r.F*o(function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}),"String",n)}},function(e,t,n){var r=n(63),o=n(30);e.exports=function(e){return r(o(e))}},function(e,t,n){var r=n(64),o=n(39),a=n(19),i=n(29),u=n(15),c=n(131),l=Object.getOwnPropertyDescriptor;t.f=n(9)?l:function(e,t){if(e=a(e),t=i(t,!0),c)try{return l(e,t)}catch(e){}if(u(e,t))return o(!r.f.call(e,t),e[t])}},function(e,t,n){var r=n(15),o=n(12),a=n(89)("IE_PROTO"),i=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=o(e),r(e,a)?e[a]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?i:null}},function(e,t,n){"use strict";var r=function(e,t,n,r,o,a,i,u){if(!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,r,o,a,i,u],s=0;c=new Error(t.replace(/%s/g,function(){return l[s++]})),c.name="Invariant Violation"}throw c.framesToPop=1,c}};e.exports=r},function(e,t,n){"use strict";function r(e,t,n){if(!t(e))throw f("error","uncaught at check",n),new Error(n)}function o(e,t){return P.notUndef(e)&&C.call(e,t)}function a(e,t){var n=e.indexOf(t);n>=0&&e.splice(n,1)}function i(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=d({},e),n=new Promise(function(e,n){t.resolve=e,t.reject=n});return t.promise=n,t}function u(e){for(var t=[],n=0;n1&&void 0!==arguments[1])||arguments[1],n=void 0,r=new Promise(function(r){n=setTimeout(function(){return r(t)},e)});return r[g]=function(){return clearTimeout(n)},r}function l(){var e,t=!0,n=void 0,r=void 0;return e={},e[v]=!0,e.isRunning=function(){return t},e.result=function(){return n},e.error=function(){return r},e.setRunning=function(e){return t=e},e.setResult=function(e){return n=e},e.setError=function(e){return r=e},e}function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:j,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=arguments[3],o={name:n,next:e,throw:t,return:N};return r&&(o[y]=!0),"undefined"!=typeof Symbol&&(o[Symbol.iterator]=function(){return o}),o}function f(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";"undefined"==typeof window?console.log("redux-saga "+e+": "+t+"\n"+(n&&n.stack||n)):console[e](t,n)}function p(e,t){return function(){return e.apply(void 0,arguments)}}n.d(t,"x",function(){return m}),n.d(t,"e",function(){return v}),n.d(t,"b",function(){return b}),n.d(t,"a",function(){return g}),n.d(t,"c",function(){return w}),n.d(t,"d",function(){return E}),n.d(t,"r",function(){return O}),n.d(t,"u",function(){return S}),n.d(t,"o",function(){return T}),t.h=r,n.d(t,"q",function(){return P}),n.d(t,"v",function(){return x}),t.w=a,n.d(t,"f",function(){return k}),t.l=i,t.g=u,t.m=c,t.j=l,n.d(t,"y",function(){return A}),t.t=s,t.s=f,t.n=p,n.d(t,"z",function(){return R}),n.d(t,"p",function(){return I}),n.d(t,"k",function(){return M}),n.d(t,"A",function(){return L}),n.d(t,"i",function(){return D});var d=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:0;return function(){return++e}}(),j=function(e){throw e},N=function(e){return{value:e,done:!0}},R=function(e,t){return e+" has been deprecated in favor of "+t+", please update your code"},I=function(e){return new Error("\n redux-saga: Error checking hooks detected an inconsistent state. This is likely a bug\n in redux-saga code and not yours. Thanks for reporting this in the project's github repo.\n Error: "+e+"\n")},M=function(e,t){return(e?e+".":"")+"setContext(props): argument "+t+" is not a plain object"},L=function(e){return function(t){return e(Object.defineProperty(t,w,{value:!0}))}},D=function e(t){return function(){for(var n=arguments.length,r=Array(n),o=0;o0?r:n)(e)}},function(e,t,n){var r=n(0),o=n(28),a=n(4);e.exports=function(e,t){var n=(o.Object||{})[e]||Object[e],i={};i[e]=t(n),r(r.S+r.F*a(function(){n(1)}),"Object",i)}},function(e,t,n){var r=n(25),o=n(63),a=n(12),i=n(11),u=n(106);e.exports=function(e,t){var n=1==e,c=2==e,l=3==e,s=4==e,f=6==e,p=5==e||f,d=t||u;return function(t,u,h){for(var m,v,y=a(t),b=o(y),g=r(u,h,3),w=i(b.length),E=0,_=n?d(t,w):c?d(t,0):void 0;w>E;E++)if((p||E in b)&&(m=b[E],v=g(m,E,y),e))if(n)_[E]=v;else if(v)switch(e){case 3:return!0;case 5:return m;case 6:return E;case 2:_.push(m)}else if(s)return!1;return f?-1:l||s?s:_}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(441);n.d(t,"BrowserRouter",function(){return r.a});var o=n(443);n.d(t,"HashRouter",function(){return o.a});var a=n(178);n.d(t,"Link",function(){return a.a});var i=n(445);n.d(t,"MemoryRouter",function(){return i.a});var u=n(448);n.d(t,"NavLink",function(){return u.a});var c=n(451);n.d(t,"Prompt",function(){return c.a});var l=n(453);n.d(t,"Redirect",function(){return l.a});var s=n(179);n.d(t,"Route",function(){return s.a});var f=n(120);n.d(t,"Router",function(){return f.a});var p=n(459);n.d(t,"StaticRouter",function(){return p.a});var d=n(461);n.d(t,"Switch",function(){return d.a});var h=n(463);n.d(t,"matchPath",function(){return h.a});var m=n(464);n.d(t,"withRouter",function(){return m.a})},function(e,t,n){"use strict";if(n(9)){var r=n(41),o=n(3),a=n(4),i=n(0),u=n(79),c=n(112),l=n(25),s=n(47),f=n(39),p=n(16),d=n(49),h=n(31),m=n(11),v=n(157),y=n(43),b=n(29),g=n(15),w=n(65),E=n(5),_=n(12),O=n(103),S=n(44),T=n(21),C=n(45).f,P=n(105),x=n(40),k=n(7),A=n(33),j=n(70),N=n(77),R=n(108),I=n(57),M=n(74),L=n(46),D=n(107),U=n(147),F=n(10),H=n(20),q=F.f,B=H.f,G=o.RangeError,V=o.TypeError,W=o.Uint8Array,z=Array.prototype,Y=c.ArrayBuffer,K=c.DataView,Q=A(0),$=A(2),X=A(3),J=A(4),Z=A(5),ee=A(6),te=j(!0),ne=j(!1),re=R.values,oe=R.keys,ae=R.entries,ie=z.lastIndexOf,ue=z.reduce,ce=z.reduceRight,le=z.join,se=z.sort,fe=z.slice,pe=z.toString,de=z.toLocaleString,he=k("iterator"),me=k("toStringTag"),ve=x("typed_constructor"),ye=x("def_constructor"),be=u.CONSTR,ge=u.TYPED,we=u.VIEW,Ee=A(1,function(e,t){return Ce(N(e,e[ye]),t)}),_e=a(function(){return 1===new W(new Uint16Array([1]).buffer)[0]}),Oe=!!W&&!!W.prototype.set&&a(function(){new W(1).set({})}),Se=function(e,t){var n=h(e);if(n<0||n%t)throw G("Wrong offset!");return n},Te=function(e){if(E(e)&&ge in e)return e;throw V(e+" is not a typed array!")},Ce=function(e,t){if(!(E(e)&&ve in e))throw V("It is not a typed array constructor!");return new e(t)},Pe=function(e,t){return xe(N(e,e[ye]),t)},xe=function(e,t){for(var n=0,r=t.length,o=Ce(e,r);r>n;)o[n]=t[n++];return o},ke=function(e,t,n){q(e,t,{get:function(){return this._d[n]}})},Ae=function(e){var t,n,r,o,a,i,u=_(e),c=arguments.length,s=c>1?arguments[1]:void 0,f=void 0!==s,p=P(u);if(void 0!=p&&!O(p)){for(i=p.call(u),r=[],t=0;!(a=i.next()).done;t++)r.push(a.value);u=r}for(f&&c>2&&(s=l(s,arguments[2],2)),t=0,n=m(u.length),o=Ce(this,n);n>t;t++)o[t]=f?s(u[t],t):u[t];return o},je=function(){for(var e=0,t=arguments.length,n=Ce(this,t);t>e;)n[e]=arguments[e++];return n},Ne=!!W&&a(function(){de.call(new W(1))}),Re=function(){return de.apply(Ne?fe.call(Te(this)):Te(this),arguments)},Ie={copyWithin:function(e,t){return U.call(Te(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return J(Te(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return D.apply(Te(this),arguments)},filter:function(e){return Pe(this,$(Te(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Z(Te(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return ee(Te(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){Q(Te(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return ne(Te(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return te(Te(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return le.apply(Te(this),arguments)},lastIndexOf:function(e){return ie.apply(Te(this),arguments)},map:function(e){return Ee(Te(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return ue.apply(Te(this),arguments)},reduceRight:function(e){return ce.apply(Te(this),arguments)},reverse:function(){for(var e,t=this,n=Te(t).length,r=Math.floor(n/2),o=0;o1?arguments[1]:void 0)},sort:function(e){return se.call(Te(this),e)},subarray:function(e,t){var n=Te(this),r=n.length,o=y(e,r);return new(N(n,n[ye]))(n.buffer,n.byteOffset+o*n.BYTES_PER_ELEMENT,m((void 0===t?r:y(t,r))-o))}},Me=function(e,t){return Pe(this,fe.call(Te(this),e,t))},Le=function(e){Te(this);var t=Se(arguments[1],1),n=this.length,r=_(e),o=m(r.length),a=0;if(o+t>n)throw G("Wrong length!");for(;a255?255:255&r),o.v[d](n*t+o.o,r,_e)},k=function(e,t){q(e,t,{get:function(){return P(this,t)},set:function(e){return x(this,t,e)},enumerable:!0})};g?(h=n(function(e,n,r,o){s(e,h,l,"_d");var a,i,u,c,f=0,d=0;if(E(n)){if(!(n instanceof Y||"ArrayBuffer"==(c=w(n))||"SharedArrayBuffer"==c))return ge in n?xe(h,n):Ae.call(h,n);a=n,d=Se(r,t);var y=n.byteLength;if(void 0===o){if(y%t)throw G("Wrong length!");if((i=y-d)<0)throw G("Wrong length!")}else if((i=m(o)*t)+d>y)throw G("Wrong length!");u=i/t}else u=v(n),i=u*t,a=new Y(i);for(p(e,"_d",{b:a,o:d,l:i,e:u,v:new K(a)});fdocument.F=Object<\/script>"),e.close(),c=e.F;r--;)delete c.prototype[a[r]];return c()};e.exports=Object.create||function(e,t){var n;return null!==e?(u.prototype=r(e),n=new u,u.prototype=null,n[i]=e):n=c(),void 0===t?n:o(n,t)}},function(e,t,n){var r=n(133),o=n(90).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},function(e,t,n){"use strict";var r=n(3),o=n(10),a=n(9),i=n(7)("species");e.exports=function(e){var t=r[e];a&&t&&!t[i]&&o.f(t,i,{configurable:!0,get:function(){return this}})}},function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},function(e,t,n){var r=n(25),o=n(145),a=n(103),i=n(2),u=n(11),c=n(105),l={},s={},t=e.exports=function(e,t,n,f,p){var d,h,m,v,y=p?function(){return e}:c(e),b=r(n,f,t?2:1),g=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(a(y)){for(d=u(e.length);d>g;g++)if((v=t?b(i(h=e[g])[0],h[1]):b(e[g]))===l||v===s)return v}else for(m=y.call(e);!(h=m.next()).done;)if((v=o(m,b,h.value,t))===l||v===s)return v};t.BREAK=l,t.RETURN=s},function(e,t,n){var r=n(17);e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},function(e,t,n){"use strict";function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"*";if(arguments.length&&Object(S.h)(arguments[0],S.q.notUndef,"take(patternOrChannel): patternOrChannel is undefined"),S.q.pattern(e))return G(P,{pattern:e});if(S.q.channel(e))return G(P,{channel:e});throw new Error("take(patternOrChannel): argument "+String(e)+" is not valid channel or a valid pattern")}function o(e,t){return arguments.length>1?(Object(S.h)(e,S.q.notUndef,"put(channel, action): argument channel is undefined"),Object(S.h)(e,S.q.channel,"put(channel, action): argument "+e+" is not a valid channel"),Object(S.h)(t,S.q.notUndef,"put(channel, action): argument action is undefined")):(Object(S.h)(e,S.q.notUndef,"put(action): argument action is undefined"),t=e,e=null),G(x,{channel:e,action:t})}function a(e){return G(k,e)}function i(e){return G(A,e)}function u(e,t,n){Object(S.h)(t,S.q.notUndef,e+": argument fn is undefined");var r=null;if(S.q.array(t)){var o=t;r=o[0],t=o[1]}else if(t.fn){var a=t;r=a.context,t=a.fn}return r&&S.q.string(t)&&S.q.func(r[t])&&(t=r[t]),Object(S.h)(t,S.q.func,e+": argument "+t+" is not a function"),{context:r,fn:t,args:n}}function c(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r2&&void 0!==arguments[2]?arguments[2]:[];return G(j,u("apply",{context:e,fn:t},n))}function s(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r1?t-1:0),r=1;r1?t-1:0),r=1;r1)return a(t.map(function(e){return d(e)}));var r=t[0];return Object(S.h)(r,S.q.notUndef,"join(task): argument task is undefined"),Object(S.h)(r,S.q.task,"join(task): argument "+r+" is not a valid Task object "+B),G(I,r)}function h(){for(var e=arguments.length,t=Array(e),n=0;n1)return a(t.map(function(e){return h(e)}));var r=t[0];return 1===t.length&&(Object(S.h)(r,S.q.notUndef,"cancel(task): argument task is undefined"),Object(S.h)(r,S.q.task,"cancel(task): argument "+r+" is not a valid Task object "+B)),G(M,r||S.d)}function m(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r1&&(Object(S.h)(t,S.q.notUndef,"actionChannel(pattern, buffer): argument buffer is undefined"),Object(S.h)(t,S.q.buffer,"actionChannel(pattern, buffer): argument "+t+" is not a valid buffer")),G(D,{pattern:e,buffer:t})}function y(){return G(U,{})}function b(e){return Object(S.h)(e,S.q.channel,"flush(channel): argument "+e+" is not valid channel"),G(F,e)}function g(e){return Object(S.h)(e,S.q.string,"getContext(prop): argument "+e+" is not a string"),G(H,e)}function w(e){return Object(S.h)(e,S.q.object,Object(S.k)(null,e)),G(q,e)}function E(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o2?n-2:0),o=2;o3?r-3:0),a=3;a=200&&e.status<300)return t;var n=new Error(t.message);throw n.response=e,n}function a(e,t){return fetch(e,t).then(function(e){return Promise.all([e,r(e)])}).then(function(e){var t=i(e,2);return o(t[0],t[1])})}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){var n=[],r=!0,o=!1,a=void 0;try{for(var i,u=e[Symbol.iterator]();!(r=(i=u.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(e){o=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(o)throw a}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();t.default=a,n(479)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(6),o=n(128),a=n(24),i=n(505),u=function(e){return e&&e.__esModule?e:{default:e}}(i),c=function(e){var t=e.channel,n=e.site;return{channelName:t.loggedInChannel.name,channelShortId:t.loggedInChannel.shortId,channelLongId:t.loggedInChannel.longId,siteDescription:n.description}},l=function(e){return{onChannelLogin:function(t,n,r){e((0,o.updateLoggedInChannel)(t,n,r)),e((0,a.updateSelectedChannel)(t))},onChannelLogout:function(){e((0,o.updateLoggedInChannel)(null,null,null))}}};t.default=(0,r.connect)(c,l)(u.default)},function(e,t,n){var r=n(10).f,o=n(15),a=n(7)("toStringTag");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,a)&&r(e,a,{configurable:!0,value:t})}},function(e,t,n){var r=n(0),o=n(30),a=n(4),i=n(93),u="["+i+"]",c="​…",l=RegExp("^"+u+u+"*"),s=RegExp(u+u+"*$"),f=function(e,t,n){var o={},u=a(function(){return!!i[e]()||c[e]()!=c}),l=o[e]=u?t(p):i[e];n&&(o[n]=l),r(r.P+r.F*u,"String",o)},p=f.trim=function(e,t){return e=String(o(e)),1&t&&(e=e.replace(l,"")),2&t&&(e=e.replace(s,"")),e};e.exports=f},function(e,t){e.exports={}},function(e,t,n){var r=n(5);e.exports=function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.HANDLE_SHOW_URI="HANDLE_SHOW_URI",t.REQUEST_ERROR="REQUEST_ERROR",t.REQUEST_UPDATE="REQUEST_UPDATE",t.ASSET_REQUEST_NEW="ASSET_REQUEST_NEW",t.CHANNEL_REQUEST_NEW="CHANNEL_REQUEST_NEW",t.REQUEST_LIST_ADD="REQUEST_LIST_ADD",t.ASSET_ADD="ASSET_ADD",t.CHANNEL_ADD="CHANNEL_ADD",t.CHANNEL_CLAIMS_UPDATE_ASYNC="CHANNEL_CLAIMS_UPDATE_ASYNC",t.CHANNEL_CLAIMS_UPDATE_SUCCESS="CHANNEL_CLAIMS_UPDATE_SUCCESS",t.FILE_REQUESTED="FILE_REQUESTED",t.FILE_AVAILABILITY_UPDATE="FILE_AVAILABILITY_UPDATE",t.DISPLAY_ASSET_ERROR="DISPLAY_ASSET_ERROR"},function(e,t,n){"use strict";function r(){function e(e){return n.push(e),function(){return Object(u.w)(n,e)}}function t(e){for(var t=n.slice(),r=0,o=t.length;r0&&void 0!==arguments[0]?arguments[0]:c.a.fixed(),i=!1,l=[];return Object(u.h)(a,u.q.buffer,d),{take:n,put:t,flush:r,close:o,get __takers__(){return l},get __closed__(){return i}}}function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.a.none(),n=arguments[2];arguments.length>2&&Object(u.h)(n,u.q.func,"Invalid match function passed to eventChannel");var r=o(t),a=function(){r.__closed__||(i&&i(),r.close())},i=e(function(e){if(p(e))return void a();n&&!n(e)||r.put(e)});if(r.__closed__&&i(),!u.q.func(i))throw new Error("in eventChannel: subscribe should return a function to unsubscribe");return{take:r.take,flush:r.flush,close:a}}function i(e){var t=a(function(t){return e(function(e){if(e[u.c])return void t(e);Object(l.a)(function(){return t(e)})})});return s({},t,{take:function(e,n){arguments.length>1&&(Object(u.h)(n,u.q.func,"channel.take's matcher argument must be a function"),e[u.b]=n),t.take(e)}})}n.d(t,"a",function(){return f}),n.d(t,"e",function(){return p}),t.c=r,t.b=o,t.d=a,t.f=i;var u=n(23),c=n(85),l=n(185),s=Object.assign||function(e){for(var t=1;ts;)if((u=c[s++])!=u)return!0}else for(;l>s;s++)if((e||s in c)&&c[s]===n)return e||s||0;return!e&&-1}}},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t,n){var r=n(26);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){var r=n(5),o=n(26),a=n(7)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[a])?!!t:"RegExp"==o(e))}},function(e,t,n){var r=n(7)("iterator"),o=!1;try{var a=[7][r]();a.return=function(){o=!0},Array.from(a,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var a=[7],i=a[r]();i.next=function(){return{done:n=!0}},a[r]=function(){return i},e(a)}catch(e){}return n}},function(e,t,n){"use strict";var r=n(2);e.exports=function(){var e=r(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}},function(e,t,n){"use strict";var r=n(16),o=n(17),a=n(4),i=n(30),u=n(7);e.exports=function(e,t,n){var c=u(e),l=n(i,c,""[e]),s=l[0],f=l[1];a(function(){var t={};return t[c]=function(){return 7},7!=""[e](t)})&&(o(String.prototype,e,s),r(RegExp.prototype,c,2==t?function(e,t){return f.call(e,this,t)}:function(e){return f.call(e,this)}))}},function(e,t,n){var r=n(2),o=n(14),a=n(7)("species");e.exports=function(e,t){var n,i=r(e).constructor;return void 0===i||void 0==(n=r(i)[a])?t:o(n)}},function(e,t,n){"use strict";var r=n(3),o=n(0),a=n(17),i=n(49),u=n(37),c=n(48),l=n(47),s=n(5),f=n(4),p=n(74),d=n(55),h=n(94);e.exports=function(e,t,n,m,v,y){var b=r[e],g=b,w=v?"set":"add",E=g&&g.prototype,_={},O=function(e){var t=E[e];a(E,e,"delete"==e?function(e){return!(y&&!s(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(y&&!s(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return y&&!s(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof g&&(y||E.forEach&&!f(function(){(new g).entries().next()}))){var S=new g,T=S[w](y?{}:-0,1)!=S,C=f(function(){S.has(1)}),P=p(function(e){new g(e)}),x=!y&&f(function(){for(var e=new g,t=5;t--;)e[w](t,t);return!e.has(-0)});P||(g=t(function(t,n){l(t,g,e);var r=h(new b,t,g);return void 0!=n&&c(n,v,r[w],r),r}),g.prototype=E,E.constructor=g),(C||x)&&(O("delete"),O("has"),v&&O("get")),(x||T)&&O(w),y&&E.clear&&delete E.clear}else g=m.getConstructor(t,e,v,w),i(g.prototype,n),u.NEED=!0;return d(g,e),_[e]=g,o(o.G+o.W+o.F*(g!=b),_),y||m.setStrong(g,e,v),g}},function(e,t,n){for(var r,o=n(3),a=n(16),i=n(40),u=i("typed_array"),c=i("view"),l=!(!o.ArrayBuffer||!o.DataView),s=l,f=0,p="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");f<9;)(r=o[p[f++]])?(a(r.prototype,u,!0),a(r.prototype,c,!0)):s=!1;e.exports={ABV:l,CONSTR:s,TYPED:u,VIEW:c}},function(e,t,n){"use strict";e.exports=n(41)||!n(4)(function(){var e=Math.random();__defineSetter__.call(null,e,function(){}),delete n(3)[e]})},function(e,t,n){"use strict";var r=n(0);e.exports=function(e){r(r.S,e,{of:function(){for(var e=arguments.length,t=new Array(e);e--;)t[e]=arguments[e];return new this(t)}})}},function(e,t,n){"use strict";var r=n(0),o=n(14),a=n(25),i=n(48);e.exports=function(e){r(r.S,e,{from:function(e){var t,n,r,u,c=arguments[1];return o(this),t=void 0!==c,t&&o(c),void 0==e?new this:(n=[],t?(r=0,u=a(c,arguments[2],2),i(e,!1,function(e){n.push(u(e,r++))})):i(e,!1,n.push,n),new this(n))}})}},function(e,t,n){"use strict";function r(e){return function(){return e}}var o=function(){};o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},function(e,t,n){"use strict";n.d(t,"a",function(){return u}),n.d(t,"b",function(){return c});var r=n(175),o=n(176),a=n(67),i=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:10,t=arguments[1],n=new Array(e),r=0,o=0,l=0,s=function(t){n[o]=t,o=(o+1)%e,r++},f=function(){if(0!=r){var t=n[l];return n[l]=null,r--,l=(l+1)%e,t}},p=function(){for(var e=[];r;)e.push(f());return e};return{isEmpty:function(){return 0==r},put:function(f){if(r0;(a>>>=1)&&(t+=t))1&a&&(n+=t);return n}},function(e,t){e.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},function(e,t){var n=Math.expm1;e.exports=!n||n(10)>22025.465794806718||n(10)<22025.465794806718||-2e-17!=n(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:n},function(e,t,n){var r=n(31),o=n(30);e.exports=function(e){return function(t,n){var a,i,u=String(o(t)),c=r(n),l=u.length;return c<0||c>=l?e?"":void 0:(a=u.charCodeAt(c),a<55296||a>56319||c+1===l||(i=u.charCodeAt(c+1))<56320||i>57343?e?u.charAt(c):a:e?u.slice(c,c+2):i-56320+(a-55296<<10)+65536)}}},function(e,t,n){"use strict";var r=n(41),o=n(0),a=n(17),i=n(16),u=n(15),c=n(57),l=n(100),s=n(55),f=n(21),p=n(7)("iterator"),d=!([].keys&&"next"in[].keys()),h=function(){return this};e.exports=function(e,t,n,m,v,y,b){l(n,t,m);var g,w,E,_=function(e){if(!d&&e in C)return C[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},O=t+" Iterator",S="values"==v,T=!1,C=e.prototype,P=C[p]||C["@@iterator"]||v&&C[v],x=!d&&P||_(v),k=v?S?_("entries"):x:void 0,A="Array"==t?C.entries||P:P;if(A&&(E=f(A.call(new e)))!==Object.prototype&&E.next&&(s(E,O,!0),r||u(E,p)||i(E,p,h)),S&&P&&"values"!==P.name&&(T=!0,x=function(){return P.call(this)}),r&&!b||!d&&!T&&C[p]||i(C,p,x),c[t]=x,c[O]=h,v)if(g={values:S?x:_("values"),keys:y?x:_("keys"),entries:k},b)for(w in g)w in C||a(C,w,g[w]);else o(o.P+o.F*(d||T),t,g);return g}},function(e,t,n){"use strict";var r=n(44),o=n(39),a=n(55),i={};n(16)(i,n(7)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(i,{next:o(1,n)}),a(e,t+" Iterator")}},function(e,t,n){var r=n(73),o=n(30);e.exports=function(e,t,n){if(r(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(o(e))}},function(e,t,n){var r=n(7)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,!"/./"[e](t)}catch(e){}}return!0}},function(e,t,n){var r=n(57),o=n(7)("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||a[o]===e)}},function(e,t,n){"use strict";var r=n(10),o=n(39);e.exports=function(e,t,n){t in e?r.f(e,t,o(0,n)):e[t]=n}},function(e,t,n){var r=n(65),o=n(7)("iterator"),a=n(57);e.exports=n(28).getIteratorMethod=function(e){if(void 0!=e)return e[o]||e["@@iterator"]||a[r(e)]}},function(e,t,n){var r=n(292);e.exports=function(e,t){return new(r(e))(t)}},function(e,t,n){"use strict";var r=n(12),o=n(43),a=n(11);e.exports=function(e){for(var t=r(this),n=a(t.length),i=arguments.length,u=o(i>1?arguments[1]:void 0,n),c=i>2?arguments[2]:void 0,l=void 0===c?n:o(c,n);l>u;)t[u++]=e;return t}},function(e,t,n){"use strict";var r=n(38),o=n(148),a=n(57),i=n(19);e.exports=n(99)(Array,"Array",function(e,t){this._t=i(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,o(1)):"keys"==t?o(0,n):"values"==t?o(0,e[n]):o(0,[n,e[n]])},"values"),a.Arguments=a.Array,r("keys"),r("values"),r("entries")},function(e,t,n){var r,o,a,i=n(25),u=n(138),c=n(91),l=n(87),s=n(3),f=s.process,p=s.setImmediate,d=s.clearImmediate,h=s.MessageChannel,m=s.Dispatch,v=0,y={},b=function(){var e=+this;if(y.hasOwnProperty(e)){var t=y[e];delete y[e],t()}},g=function(e){b.call(e.data)};p&&d||(p=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return y[++v]=function(){u("function"==typeof e?e:Function(e),t)},r(v),v},d=function(e){delete y[e]},"process"==n(26)(f)?r=function(e){f.nextTick(i(b,e,1))}:m&&m.now?r=function(e){m.now(i(b,e,1))}:h?(o=new h,a=o.port2,o.port1.onmessage=g,r=i(a.postMessage,a,1)):s.addEventListener&&"function"==typeof postMessage&&!s.importScripts?(r=function(e){s.postMessage(e+"","*")},s.addEventListener("message",g,!1)):r="onreadystatechange"in l("script")?function(e){c.appendChild(l("script")).onreadystatechange=function(){c.removeChild(this),b.call(e)}}:function(e){setTimeout(i(b,e,1),0)}),e.exports={set:p,clear:d}},function(e,t,n){var r=n(3),o=n(109).set,a=r.MutationObserver||r.WebKitMutationObserver,i=r.process,u=r.Promise,c="process"==n(26)(i);e.exports=function(){var e,t,n,l=function(){var r,o;for(c&&(r=i.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(c)n=function(){i.nextTick(l)};else if(!a||r.navigator&&r.navigator.standalone)if(u&&u.resolve){var s=u.resolve();n=function(){s.then(l)}}else n=function(){o.call(r,l)};else{var f=!0,p=document.createTextNode("");new a(l).observe(p,{characterData:!0}),n=function(){p.data=f=!f}}return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}}},function(e,t,n){"use strict";function r(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=r}),this.resolve=o(t),this.reject=o(n)}var o=n(14);e.exports.f=function(e){return new r(e)}},function(e,t,n){"use strict";function r(e,t,n){var r,o,a,i=new Array(n),u=8*n-t-1,c=(1<>1,s=23===t?U(2,-24)-U(2,-77):0,f=0,p=e<0||0===e&&1/e<0?1:0;for(e=D(e),e!=e||e===M?(o=e!=e?1:0,r=c):(r=F(H(e)/q),e*(a=U(2,-r))<1&&(r--,a*=2),e+=r+l>=1?s/a:s*U(2,1-l),e*a>=2&&(r++,a/=2),r+l>=c?(o=0,r=c):r+l>=1?(o=(e*a-1)*U(2,t),r+=l):(o=e*U(2,l-1)*U(2,t),r=0));t>=8;i[f++]=255&o,o/=256,t-=8);for(r=r<0;i[f++]=255&r,r/=256,u-=8);return i[--f]|=128*p,i}function o(e,t,n){var r,o=8*n-t-1,a=(1<>1,u=o-7,c=n-1,l=e[c--],s=127&l;for(l>>=7;u>0;s=256*s+e[c],c--,u-=8);for(r=s&(1<<-u)-1,s>>=-u,u+=t;u>0;r=256*r+e[c],c--,u-=8);if(0===s)s=1-i;else{if(s===a)return r?NaN:l?-M:M;r+=U(2,t),s-=i}return(l?-1:1)*r*U(2,s-t)}function a(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function i(e){return[255&e]}function u(e){return[255&e,e>>8&255]}function c(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function l(e){return r(e,52,8)}function s(e){return r(e,23,4)}function f(e,t,n){C(e[k],t,{get:function(){return this[n]}})}function p(e,t,n,r){var o=+n,a=S(o);if(a+t>e[G])throw I(A);var i=e[B]._b,u=a+e[V],c=i.slice(u,u+t);return r?c:c.reverse()}function d(e,t,n,r,o,a){var i=+n,u=S(i);if(u+t>e[G])throw I(A);for(var c=e[B]._b,l=u+e[V],s=r(+o),f=0;fK;)(W=Y[K++])in j||b(j,W,L[W]);v||(z.constructor=j)}var Q=new N(new j(2)),$=N[k].setInt8;Q.setInt8(0,2147483648),Q.setInt8(1,2147483649),!Q.getInt8(0)&&Q.getInt8(1)||g(N[k],{setInt8:function(e,t){$.call(this,e,t<<24>>24)},setUint8:function(e,t){$.call(this,e,t<<24>>24)}},!0)}else j=function(e){E(this,j,"ArrayBuffer");var t=S(e);this._b=P.call(new Array(t),0),this[G]=t},N=function(e,t,n){E(this,N,"DataView"),E(e,j,"DataView");var r=e[G],o=_(t);if(o<0||o>r)throw I("Wrong offset!");if(n=void 0===n?r-o:O(n),o+n>r)throw I("Wrong length!");this[B]=e,this[V]=o,this[G]=n},m&&(f(j,"byteLength","_l"),f(N,"buffer","_b"),f(N,"byteLength","_l"),f(N,"byteOffset","_o")),g(N[k],{getInt8:function(e){return p(this,1,e)[0]<<24>>24},getUint8:function(e){return p(this,1,e)[0]},getInt16:function(e){var t=p(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=p(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return a(p(this,4,e,arguments[1]))},getUint32:function(e){return a(p(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return o(p(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return o(p(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){d(this,1,e,i,t)},setUint8:function(e,t){d(this,1,e,i,t)},setInt16:function(e,t){d(this,2,e,u,t,arguments[2])},setUint16:function(e,t){d(this,2,e,u,t,arguments[2])},setInt32:function(e,t){d(this,4,e,c,t,arguments[2])},setUint32:function(e,t){d(this,4,e,c,t,arguments[2])},setFloat32:function(e,t){d(this,4,e,s,t,arguments[2])},setFloat64:function(e,t){d(this,8,e,l,t,arguments[2])}});x(j,"ArrayBuffer"),x(N,"DataView"),b(N[k],y.VIEW,!0),t.ArrayBuffer=j,t.DataView=N},function(e,t,n){var r=n(3),o=r.navigator;e.exports=o&&o.userAgent||""},function(e,t,n){"use strict";function r(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ -var o=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,u,c=r(e),l=1;l may have only one child element"),this.unlisten=r.listen(function(){e.setState({match:e.computeMatch(r.location.pathname)})})},t.prototype.componentWillReceiveProps=function(e){u()(this.props.history===e.history,"You cannot change ")},t.prototype.componentWillUnmount=function(){this.unlisten()},t.prototype.render=function(){var e=this.props.children;return e?f.a.Children.only(e):null},t}(f.a.Component);m.propTypes={history:d.a.object.isRequired,children:d.a.node},m.contextTypes={router:d.a.object},m.childContextTypes={router:d.a.object.isRequired},t.a=m},function(e,t,n){"use strict";var r=n(449),o=n.n(r),a={},i=0,u=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=a[n]||(a[n]={});if(r[e])return r[e];var u=[],c=o()(e,u,t),l={re:c,keys:u};return i<1e4&&(r[e]=l,i++),l},c=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};"string"==typeof t&&(t={path:t});var n=t,r=n.path,o=void 0===r?"/":r,a=n.exact,i=void 0!==a&&a,c=n.strict,l=void 0!==c&&c,s=n.sensitive,f=void 0!==s&&s,p=u(o,{end:i,strict:l,sensitive:f}),d=p.re,h=p.keys,m=d.exec(e);if(!m)return null;var v=m[0],y=m.slice(1),b=e===v;return i&&!b?null:{path:o,url:"/"===o&&""===v?"/":v,isExact:b,params:h.reduce(function(e,t,n){return e[t.name]=y[n],e},{})}};t.a=c},function(e,t,n){"use strict";var r=n(13),o=n.n(r),a=function(){var e=null,t=function(t){return o()(null==e,"A history supports only one prompt at a time"),e=t,function(){e===t&&(e=null)}},n=function(t,n,r,a){if(null!=e){var i="function"==typeof e?e(t,n):e;"string"==typeof i?"function"==typeof r?r(i,a):(o()(!1,"A history needs a getUserConfirmation function in order to use a prompt message"),a(!0)):a(!1!==i)}else a(!0)},r=[];return{setPrompt:t,confirmTransitionTo:n,appendListener:function(e){var t=!0,n=function(){t&&e.apply(void 0,arguments)};return r.push(n),function(){t=!1,r=r.filter(function(e){return e!==n})}},notifyListeners:function(){for(var e=arguments.length,t=Array(e),n=0;n2&&void 0!==arguments[2]?arguments[2]:"iterator",o=void 0,c=t;return Object(a.t)(n,function(e){return n(null,e)},r,!0)}n.d(t,"b",function(){return u}),t.c=r,t.a=o;var a=n(23),i={done:!0,value:void 0},u={}},function(e,t,n){"use strict";function r(e,t,n){return{type:a.CHANNEL_UPDATE,data:{name:e,shortId:t,longId:n}}}Object.defineProperty(t,"__esModule",{value:!0}),t.updateLoggedInChannel=r;var o=n(183),a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(o)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;nthis.props.size)&&(t*=-1,e+=t),n[e].isActive=t>0,e+=t,this.setState({bars:n,incrementer:t,index:e})}},{key:"stopProgressBar",value:function(){clearInterval(this.updateInterval)}},{key:"render",value:function(){return l.default.createElement("div",null,this.state.bars.map(function(e,t){return e.isActive?l.default.createElement(d.default,{key:t}):l.default.createElement(m.default,{key:t})}))}}]),t}(l.default.Component);v.propTypes={size:f.default.number.isRequired},t.default=v},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;nc;)r(u,n=t[c++])&&(~a(l,n)||l.push(n));return l}},function(e,t,n){var r=n(10),o=n(2),a=n(42);e.exports=n(9)?Object.defineProperties:function(e,t){o(e);for(var n,i=a(t),u=i.length,c=0;u>c;)r.f(e,n=i[c++],t[n]);return e}},function(e,t,n){var r=n(19),o=n(45).f,a={}.toString,i="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],u=function(e){try{return o(e)}catch(e){return i.slice()}};e.exports.f=function(e){return i&&"[object Window]"==a.call(e)?u(e):o(r(e))}},function(e,t,n){"use strict";var r=n(42),o=n(71),a=n(64),i=n(12),u=n(63),c=Object.assign;e.exports=!c||n(4)(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=c({},e)[n]||Object.keys(c({},t)).join("")!=r})?function(e,t){for(var n=i(e),c=arguments.length,l=1,s=o.f,f=a.f;c>l;)for(var p,d=u(arguments[l++]),h=s?r(d).concat(s(d)):r(d),m=h.length,v=0;m>v;)f.call(d,p=h[v++])&&(n[p]=d[p]);return n}:c},function(e,t,n){"use strict";var r=n(14),o=n(5),a=n(138),i=[].slice,u={},c=function(e,t,n){if(!(t in u)){for(var r=[],o=0;o>>0||(i.test(n)?16:10))}:r},function(e,t,n){var r=n(3).parseFloat,o=n(56).trim;e.exports=1/r(n(93)+"-0")!=-1/0?function(e){var t=o(String(e),3),n=r(t);return 0===n&&"-"==t.charAt(0)?-0:n}:r},function(e,t,n){var r=n(26);e.exports=function(e,t){if("number"!=typeof e&&"Number"!=r(e))throw TypeError(t);return+e}},function(e,t,n){var r=n(5),o=Math.floor;e.exports=function(e){return!r(e)&&isFinite(e)&&o(e)===e}},function(e,t){e.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)}},function(e,t,n){var r=n(96),o=Math.pow,a=o(2,-52),i=o(2,-23),u=o(2,127)*(2-i),c=o(2,-126),l=function(e){return e+1/a-1/a};e.exports=Math.fround||function(e){var t,n,o=Math.abs(e),s=r(e);return ou||n!=n?s*(1/0):s*n)}},function(e,t,n){var r=n(2);e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(t){var a=e.return;throw void 0!==a&&r(a.call(e)),t}}},function(e,t,n){var r=n(14),o=n(12),a=n(63),i=n(11);e.exports=function(e,t,n,u,c){r(t);var l=o(e),s=a(l),f=i(l.length),p=c?f-1:0,d=c?-1:1;if(n<2)for(;;){if(p in s){u=s[p],p+=d;break}if(p+=d,c?p<0:f<=p)throw TypeError("Reduce of empty array with no initial value")}for(;c?p>=0:f>p;p+=d)p in s&&(u=t(u,s[p],p,l));return u}},function(e,t,n){"use strict";var r=n(12),o=n(43),a=n(11);e.exports=[].copyWithin||function(e,t){var n=r(this),i=a(n.length),u=o(e,i),c=o(t,i),l=arguments.length>2?arguments[2]:void 0,s=Math.min((void 0===l?i:o(l,i))-c,i-u),f=1;for(c0;)c in n?n[u]=n[c]:delete n[u],u+=f,c+=f;return n}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){n(9)&&"g"!=/./g.flags&&n(10).f(RegExp.prototype,"flags",{configurable:!0,get:n(75)})},function(e,t){e.exports=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}}},function(e,t,n){var r=n(2),o=n(5),a=n(111);e.exports=function(e,t){if(r(e),o(t)&&t.constructor===e)return t;var n=a.f(e);return(0,n.resolve)(t),n.promise}},function(e,t,n){"use strict";var r=n(153),o=n(58);e.exports=n(78)("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=r.getEntry(o(this,"Map"),e);return t&&t.v},set:function(e,t){return r.def(o(this,"Map"),0===e?0:e,t)}},r,!0)},function(e,t,n){"use strict";var r=n(10).f,o=n(44),a=n(49),i=n(25),u=n(47),c=n(48),l=n(99),s=n(148),f=n(46),p=n(9),d=n(37).fastKey,h=n(58),m=p?"_s":"size",v=function(e,t){var n,r=d(t);if("F"!==r)return e._i[r];for(n=e._f;n;n=n.n)if(n.k==t)return n};e.exports={getConstructor:function(e,t,n,l){var s=e(function(e,r){u(e,s,t,"_i"),e._t=t,e._i=o(null),e._f=void 0,e._l=void 0,e[m]=0,void 0!=r&&c(r,n,e[l],e)});return a(s.prototype,{clear:function(){for(var e=h(this,t),n=e._i,r=e._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];e._f=e._l=void 0,e[m]=0},delete:function(e){var n=h(this,t),r=v(n,e);if(r){var o=r.n,a=r.p;delete n._i[r.i],r.r=!0,a&&(a.n=o),o&&(o.p=a),n._f==r&&(n._f=o),n._l==r&&(n._l=a),n[m]--}return!!r},forEach:function(e){h(this,t);for(var n,r=i(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!v(h(this,t),e)}}),p&&r(s.prototype,"size",{get:function(){return h(this,t)[m]}}),s},def:function(e,t,n){var r,o,a=v(e,t);return a?a.v=n:(e._l=a={i:o=d(t,!0),k:t,v:n,p:r=e._l,n:void 0,r:!1},e._f||(e._f=a),r&&(r.n=a),e[m]++,"F"!==o&&(e._i[o]=a)),e},getEntry:v,setStrong:function(e,t,n){l(e,t,function(e,n){this._t=h(e,t),this._k=n,this._l=void 0},function(){for(var e=this,t=e._k,n=e._l;n&&n.r;)n=n.p;return e._t&&(e._l=n=n?n.n:e._t._f)?"keys"==t?s(0,n.k):"values"==t?s(0,n.v):s(0,[n.k,n.v]):(e._t=void 0,s(1))},n?"entries":"values",!n,!0),f(t)}}},function(e,t,n){"use strict";var r=n(153),o=n(58);e.exports=n(78)("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return r.def(o(this,"Set"),e=0===e?0:e,e)}},r)},function(e,t,n){"use strict";var r,o=n(33)(0),a=n(17),i=n(37),u=n(136),c=n(156),l=n(5),s=n(4),f=n(58),p=i.getWeak,d=Object.isExtensible,h=c.ufstore,m={},v=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},y={get:function(e){if(l(e)){var t=p(e);return!0===t?h(f(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return c.def(f(this,"WeakMap"),e,t)}},b=e.exports=n(78)("WeakMap",v,y,c,!0,!0);s(function(){return 7!=(new b).set((Object.freeze||Object)(m),7).get(m)})&&(r=c.getConstructor(v,"WeakMap"),u(r.prototype,y),i.NEED=!0,o(["delete","has","get","set"],function(e){var t=b.prototype,n=t[e];a(t,e,function(t,o){if(l(t)&&!d(t)){this._f||(this._f=new r);var a=this._f[e](t,o);return"set"==e?this:a}return n.call(this,t,o)})}))},function(e,t,n){"use strict";var r=n(49),o=n(37).getWeak,a=n(2),i=n(5),u=n(47),c=n(48),l=n(33),s=n(15),f=n(58),p=l(5),d=l(6),h=0,m=function(e){return e._l||(e._l=new v)},v=function(){this.a=[]},y=function(e,t){return p(e.a,function(e){return e[0]===t})};v.prototype={get:function(e){var t=y(this,e);if(t)return t[1]},has:function(e){return!!y(this,e)},set:function(e,t){var n=y(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=d(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,a){var l=e(function(e,r){u(e,l,t,"_i"),e._t=t,e._i=h++,e._l=void 0,void 0!=r&&c(r,n,e[a],e)});return r(l.prototype,{delete:function(e){if(!i(e))return!1;var n=o(e);return!0===n?m(f(this,t)).delete(e):n&&s(n,this._i)&&delete n[this._i]},has:function(e){if(!i(e))return!1;var n=o(e);return!0===n?m(f(this,t)).has(e):n&&s(n,this._i)}}),l},def:function(e,t,n){var r=o(a(t),!0);return!0===r?m(e).set(t,n):r[e._i]=n,e},ufstore:m}},function(e,t,n){var r=n(31),o=n(11);e.exports=function(e){if(void 0===e)return 0;var t=r(e),n=o(t);if(t!==n)throw RangeError("Wrong length!");return n}},function(e,t,n){var r=n(45),o=n(71),a=n(2),i=n(3).Reflect;e.exports=i&&i.ownKeys||function(e){var t=r.f(a(e)),n=o.f;return n?t.concat(n(e)):t}},function(e,t,n){"use strict";function r(e,t,n,l,s,f,p,d){for(var h,m,v=s,y=0,b=!!p&&u(p,d,3);y0)v=r(e,t,h,i(h.length),v,f-1)-1;else{if(v>=9007199254740991)throw TypeError();e[v]=h}v++}y++}return v}var o=n(72),a=n(5),i=n(11),u=n(25),c=n(7)("isConcatSpreadable");e.exports=r},function(e,t,n){var r=n(11),o=n(95),a=n(30);e.exports=function(e,t,n,i){var u=String(a(e)),c=u.length,l=void 0===n?" ":String(n),s=r(t);if(s<=c||""==l)return u;var f=s-c,p=o.call(l,Math.ceil(f/l.length));return p.length>f&&(p=p.slice(0,f)),i?p+u:u+p}},function(e,t,n){var r=n(42),o=n(19),a=n(64).f;e.exports=function(e){return function(t){for(var n,i=o(t),u=r(i),c=u.length,l=0,s=[];c>l;)a.call(i,n=u[l++])&&s.push(e?[n,i[n]]:i[n]);return s}}},function(e,t,n){var r=n(65),o=n(163);e.exports=function(e){return function(){if(r(this)!=e)throw TypeError(e+"#toJSON isn't generic");return o(this)}}},function(e,t,n){var r=n(48);e.exports=function(e,t){var n=[];return r(e,!1,n.push,n,t),n}},function(e,t){e.exports=Math.scale||function(e,t,n,r,o){return 0===arguments.length||e!=e||t!=t||n!=n||r!=r||o!=o?NaN:e===1/0||e===-1/0?e:(e-t)*(o-r)/(n-t)+r}},function(e,t,n){"use strict";var r={};e.exports=r},function(e,t,n){"use strict";n.d(t,"b",function(){return a}),n.d(t,"a",function(){return i});var r=n(8),o=n.n(r),a=o.a.shape({trySubscribe:o.a.func.isRequired,tryUnsubscribe:o.a.func.isRequired,notifyNestedSubs:o.a.func.isRequired,isSubscribed:o.a.func.isRequired}),i=o.a.shape({subscribe:o.a.func.isRequired,dispatch:o.a.func.isRequired,getState:o.a.func.isRequired})},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function u(){}function c(e,t){var n={run:function(r){try{var o=e(t.getState(),r);(o!==n.props||n.error)&&(n.shouldComponentUpdate=!0,n.props=o,n.error=null)}catch(e){n.shouldComponentUpdate=!0,n.error=e}}};return n}function l(e){var t,n,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=l.getDisplayName,p=void 0===s?function(e){return"ConnectAdvanced("+e+")"}:s,w=l.methodName,E=void 0===w?"connectAdvanced":w,_=l.renderCountProp,O=void 0===_?void 0:_,S=l.shouldHandleStateChanges,T=void 0===S||S,C=l.storeKey,P=void 0===C?"store":C,x=l.withRef,k=void 0!==x&&x,A=i(l,["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef"]),j=P+"Subscription",N=b++,R=(t={},t[P]=v.a,t[j]=v.b,t),I=(n={},n[j]=v.b,n);return function(t){d()("function"==typeof t,"You must pass a component to the function returned by "+E+". Instead received "+JSON.stringify(t));var n=t.displayName||t.name||"Component",i=p(n),l=y({},A,{getDisplayName:p,methodName:E,renderCountProp:O,shouldHandleStateChanges:T,storeKey:P,withRef:k,displayName:i,wrappedComponentName:n,WrappedComponent:t}),s=function(n){function s(e,t){r(this,s);var a=o(this,n.call(this,e,t));return a.version=N,a.state={},a.renderCount=0,a.store=e[P]||t[P],a.propsMode=Boolean(e[P]),a.setWrappedInstance=a.setWrappedInstance.bind(a),d()(a.store,'Could not find "'+P+'" in either the context or props of "'+i+'". Either wrap the root component in a , or explicitly pass "'+P+'" as a prop to "'+i+'".'),a.initSelector(),a.initSubscription(),a}return a(s,n),s.prototype.getChildContext=function(){var e,t=this.propsMode?null:this.subscription;return e={},e[j]=t||this.context[j],e},s.prototype.componentDidMount=function(){T&&(this.subscription.trySubscribe(),this.selector.run(this.props),this.selector.shouldComponentUpdate&&this.forceUpdate())},s.prototype.componentWillReceiveProps=function(e){this.selector.run(e)},s.prototype.shouldComponentUpdate=function(){return this.selector.shouldComponentUpdate},s.prototype.componentWillUnmount=function(){this.subscription&&this.subscription.tryUnsubscribe(),this.subscription=null,this.notifyNestedSubs=u,this.store=null,this.selector.run=u,this.selector.shouldComponentUpdate=!1},s.prototype.getWrappedInstance=function(){return d()(k,"To access the wrapped instance, you need to specify { withRef: true } in the options argument of the "+E+"() call."),this.wrappedInstance},s.prototype.setWrappedInstance=function(e){this.wrappedInstance=e},s.prototype.initSelector=function(){var t=e(this.store.dispatch,l);this.selector=c(t,this.store),this.selector.run(this.props)},s.prototype.initSubscription=function(){if(T){var e=(this.propsMode?this.props:this.context)[j];this.subscription=new m.a(this.store,e,this.onStateChange.bind(this)),this.notifyNestedSubs=this.subscription.notifyNestedSubs.bind(this.subscription)}},s.prototype.onStateChange=function(){this.selector.run(this.props),this.selector.shouldComponentUpdate?(this.componentDidUpdate=this.notifyNestedSubsOnComponentDidUpdate,this.setState(g)):this.notifyNestedSubs()},s.prototype.notifyNestedSubsOnComponentDidUpdate=function(){this.componentDidUpdate=void 0,this.notifyNestedSubs()},s.prototype.isSubscribed=function(){return Boolean(this.subscription)&&this.subscription.isSubscribed()},s.prototype.addExtraProps=function(e){if(!(k||O||this.propsMode&&this.subscription))return e;var t=y({},e);return k&&(t.ref=this.setWrappedInstance),O&&(t[O]=this.renderCount++),this.propsMode&&this.subscription&&(t[j]=this.subscription),t},s.prototype.render=function(){var e=this.selector;if(e.shouldComponentUpdate=!1,e.error)throw e.error;return Object(h.createElement)(t,this.addExtraProps(e.props))},s}(h.Component);return s.WrappedComponent=t,s.displayName=i,s.childContextTypes=I,s.contextTypes=R,s.propTypes=R,f()(s,t)}}t.a=l;var s=n(168),f=n.n(s),p=n(22),d=n.n(p),h=n(1),m=(n.n(h),n(419)),v=n(166),y=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:"",n=e&&e.split("/")||[],a=t&&t.split("/")||[],i=e&&r(e),u=t&&r(t),c=i||u;if(e&&r(e)?a=n:n.length&&(a.pop(),a=a.concat(n)),!a.length)return"/";var l=void 0;if(a.length){var s=a[a.length-1];l="."===s||".."===s||""===s}else l=!1;for(var f=0,p=a.length;p>=0;p--){var d=a[p];"."===d?o(a,p):".."===d?(o(a,p),f++):f&&(o(a,p),f--)}if(!c)for(;f--;f)a.unshift("..");!c||""===a[0]||a[0]&&r(a[0])||a.unshift("");var h=a.join("/");return l&&"/"!==h.substr(-1)&&(h+="/"),h}Object.defineProperty(t,"__esModule",{value:!0}),t.default=a},function(e,t,n){"use strict";function r(e,t){if(e===t)return!0;if(null==e||null==t)return!1;if(Array.isArray(e))return Array.isArray(t)&&e.length===t.length&&e.every(function(e,n){return r(e,t[n])});var n=void 0===e?"undefined":o(e);if(n!==(void 0===t?"undefined":o(t)))return!1;if("object"===n){var a=e.valueOf(),i=t.valueOf();if(a!==e||i!==t)return r(a,i);var u=Object.keys(e),c=Object.keys(t);return u.length===c.length&&u.every(function(n){return r(e[n],t[n])})}return!1}Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.default=r},function(e,t,n){"use strict";t.__esModule=!0;t.canUseDOM=!("undefined"==typeof window||!window.document||!window.document.createElement),t.addEventListener=function(e,t,n){return e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent("on"+t,n)},t.removeEventListener=function(e,t,n){return e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent("on"+t,n)},t.getConfirmation=function(e,t){return t(window.confirm(e))},t.supportsHistory=function(){var e=window.navigator.userAgent;return(-1===e.indexOf("Android 2.")&&-1===e.indexOf("Android 4.0")||-1===e.indexOf("Mobile Safari")||-1!==e.indexOf("Chrome")||-1!==e.indexOf("Windows Phone"))&&(window.history&&"pushState"in window.history)},t.supportsPopStateOnHashChange=function(){return-1===window.navigator.userAgent.indexOf("Trident")},t.supportsGoWithoutReloadUsingHash=function(){return-1===window.navigator.userAgent.indexOf("Firefox")},t.isExtraneousPopstateEvent=function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")}},function(e,t,n){"use strict";function r(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=n(1),c=n.n(u),l=n(8),s=n.n(l),f=n(22),p=n.n(f),d=Object.assign||function(e){for(var t=1;t outside a ");var a=this.context.router.history.createHref("string"==typeof t?{pathname:t}:t);return c.a.createElement("a",d({},o,{onClick:this.handleClick,href:a,ref:n}))},t}(c.a.Component);m.propTypes={onClick:s.a.func,target:s.a.string,replace:s.a.bool,to:s.a.oneOfType([s.a.string,s.a.object]).isRequired,innerRef:s.a.oneOfType([s.a.string,s.a.func])},m.defaultProps={replace:!1},m.contextTypes={router:s.a.shape({history:s.a.shape({push:s.a.func.isRequired,replace:s.a.func.isRequired,createHref:s.a.func.isRequired}).isRequired}).isRequired},t.a=m},function(e,t,n){"use strict";var r=n(180);t.a=r.a},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=n(13),u=n.n(i),c=n(22),l=n.n(c),s=n(1),f=n.n(s),p=n(8),d=n.n(p),h=n(122),m=Object.assign||function(e){for(var t=1;t or withRouter() outside a ");var c=t.route,s=(r||c.location).pathname;return o?Object(h.a)(s,{path:o,strict:a,exact:i,sensitive:u}):c.match},t.prototype.componentWillMount=function(){u()(!(this.props.component&&this.props.render),"You should not use and in the same route; will be ignored"),u()(!(this.props.component&&this.props.children&&!v(this.props.children)),"You should not use and in the same route; will be ignored"),u()(!(this.props.render&&this.props.children&&!v(this.props.children)),"You should not use and in the same route; will be ignored")},t.prototype.componentWillReceiveProps=function(e,t){u()(!(e.location&&!this.props.location),' elements should not change from uncontrolled to controlled (or vice versa). You initially used no "location" prop and then provided one on a subsequent render.'),u()(!(!e.location&&this.props.location),' elements should not change from controlled to uncontrolled (or vice versa). You provided a "location" prop initially but omitted it on a subsequent render.'),this.setState({match:this.computeMatch(e,t.router)})},t.prototype.render=function(){var e=this.state.match,t=this.props,n=t.children,r=t.component,o=t.render,a=this.context.router,i=a.history,u=a.route,c=a.staticContext,l=this.props.location||u.location,s={match:e,location:l,history:i,staticContext:c};return r?e?f.a.createElement(r,s):null:o?e?o(s):null:n?"function"==typeof n?n(s):v(n)?null:f.a.Children.only(n):null},t}(f.a.Component);y.propTypes={computedMatch:d.a.object,path:d.a.string,exact:d.a.bool,strict:d.a.bool,sensitive:d.a.bool,component:d.a.func,render:d.a.func,children:d.a.oneOfType([d.a.func,d.a.node]),location:d.a.object},y.contextTypes={router:d.a.shape({history:d.a.object.isRequired,route:d.a.object.isRequired,staticContext:d.a.object})},y.childContextTypes={router:d.a.object.isRequired},t.a=y},function(e,t,n){"use strict";n.d(t,"b",function(){return r}),n.d(t,"a",function(){return o}),n.d(t,"e",function(){return a}),n.d(t,"c",function(){return i}),n.d(t,"g",function(){return u}),n.d(t,"h",function(){return c}),n.d(t,"f",function(){return l}),n.d(t,"d",function(){return s});var r=!("undefined"==typeof window||!window.document||!window.document.createElement),o=function(e,t,n){return e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent("on"+t,n)},a=function(e,t,n){return e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent("on"+t,n)},i=function(e,t){return t(window.confirm(e))},u=function(){var e=window.navigator.userAgent;return(-1===e.indexOf("Android 2.")&&-1===e.indexOf("Android 4.0")||-1===e.indexOf("Mobile Safari")||-1!==e.indexOf("Chrome")||-1!==e.indexOf("Windows Phone"))&&(window.history&&"pushState"in window.history)},c=function(){return-1===window.navigator.userAgent.indexOf("Trident")},l=function(){return-1===window.navigator.userAgent.indexOf("Firefox")},s=function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.LOGIN="Existing",t.CREATE="New"},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.CHANNEL_UPDATE="CHANNEL_UPDATE"},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(471),o=n(186);n.d(t,"runSaga",function(){return o.a});var a=n(60);n.d(t,"END",function(){return a.a}),n.d(t,"eventChannel",function(){return a.d}),n.d(t,"channel",function(){return a.b});var i=n(85);n.d(t,"buffers",function(){return i.a});var u=n(188);n.d(t,"takeEvery",function(){return u.a}),n.d(t,"takeLatest",function(){return u.c}),n.d(t,"throttle",function(){return u.e});var c=n(23);n.d(t,"delay",function(){return c.m}),n.d(t,"CANCEL",function(){return c.a});var l=n(50);n.d(t,"detach",function(){return l.i});var s=n(51),f=n(475);n.d(t,"effects",function(){return s}),n.d(t,"utils",function(){return f}),t.default=r.a},function(e,t,n){"use strict";function r(e){try{a(),e()}finally{i()}}function o(e){c.push(e),l||(a(),u())}function a(){l++}function i(){l--}function u(){i();for(var e=void 0;!l&&void 0!==(e=c.shift());)r(e)}t.a=o,t.c=a,t.b=u;var c=[],l=0},function(e,t,n){"use strict";function r(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),i=2;i2&&void 0!==arguments[2]?arguments[2]:"",o=arguments[3],a=Object(c.y)();Y&&Y.effectTriggered({effectId:a,parentEffectId:t,label:r,effect:e});var i=void 0;n.cancel=c.u,o.cancel=function(){if(!i){i=!0;try{n.cancel()}catch(e){X(e)}n.cancel=c.u,Y&&Y.effectCancelled(a)}};var u=void 0;return c.q.promise(e)?E(e,n):c.q.helper(e)?P(g(e),a,n):c.q.iterator(e)?_(e,a,V,n):c.q.array(e)?z(e,a,n):(u=s.d.take(e))?O(u,n):(u=s.d.put(e))?S(u,n):(u=s.d.all(e))?A(u,a,n):(u=s.d.race(e))?j(u,a,n):(u=s.d.call(e))?T(u,a,n):(u=s.d.cps(e))?C(u,n):(u=s.d.fork(e))?P(u,a,n):(u=s.d.join(e))?x(u,n):(u=s.d.cancel(e))?k(u,n):(u=s.d.select(e))?N(u,n):(u=s.d.actionChannel(e))?R(u,n):(u=s.d.flush(e))?M(u,n):(u=s.d.cancelled(e))?I(u,n):(u=s.d.getContext(e))?L(u,n):(u=s.d.setContext(e))?D(u,n):n(e)}function E(e,t){var n=e[c.a];c.q.func(n)?t.cancel=n:c.q.func(e.abort)&&(t.cancel=function(){return e.abort()}),e.then(t,function(e){return t(e,!0)})}function _(e,t,n,r){u(e,U,F,H,Z,B,t,n,r)}function O(e,t){var n=e.channel,r=e.pattern,a=e.maybe;n=n||J;var i=function(e){return e instanceof Error?t(e,!0):t(Object(f.e)(e)&&!a?v:e)};try{n.take(i,o(r))}catch(e){return t(e,!0)}t.cancel=i.cancel}function S(e,t){var n=e.channel,r=e.action,o=e.resolve;Object(l.a)(function(){var e=void 0;try{e=(n?n.put:F)(r)}catch(e){if(n||o)return t(e,!0);X(e)}if(!o||!c.q.promise(e))return t(e);E(e,t)})}function T(e,t,n){var r=e.context,o=e.fn,a=e.args,i=void 0;try{i=o.apply(r,a)}catch(e){return n(e,!0)}return c.q.promise(i)?E(i,n):c.q.iterator(i)?_(i,t,o.name,n):n(i)}function C(e,t){var n=e.context,r=e.fn,o=e.args;try{var a=function(e,n){return c.q.undef(e)?t(n):t(e,!0)};r.apply(n,o.concat(a)),a.cancel&&(t.cancel=function(){return a.cancel()})}catch(e){return t(e,!0)}}function P(e,t,n){var r=e.context,o=e.fn,a=e.args,s=e.detached,f=i({context:r,fn:o,args:a});try{Object(l.c)();var p=u(f,U,F,H,Z,B,t,o.name,s?null:c.u);s?n(p):f._isRunning?(ne.addTask(p),n(p)):f._error?ne.abort(f._error):n(p)}finally{Object(l.b)()}}function x(e,t){if(e.isRunning()){var n={task:ee,cb:t};t.cancel=function(){return Object(c.w)(e.joiners,n)},e.joiners.push(n)}else e.isAborted()?t(e.error(),!0):t(e.result())}function k(e,t){e===c.d&&(e=ee),e.isRunning()&&e.cancel(),t()}function A(e,t,n){function r(){a===o.length&&(i=!0,n(c.q.array(e)?c.f.from(d({},u,{length:o.length})):u))}var o=Object.keys(e);if(!o.length)return n(c.q.array(e)?[]:{});var a=0,i=void 0,u={},l={};o.forEach(function(e){var t=function(t,o){i||(o||Object(f.e)(t)||t===v||t===y?(n.cancel(),n(t,o)):(u[e]=t,a++,r()))};t.cancel=c.u,l[e]=t}),n.cancel=function(){i||(i=!0,o.forEach(function(e){return l[e].cancel()}))},o.forEach(function(n){return w(e[n],t,n,l[n])})}function j(e,t,n){var r=void 0,o=Object.keys(e),a={};o.forEach(function(t){var i=function(a,i){if(!r)if(i)n.cancel(),n(a,!0);else if(!Object(f.e)(a)&&a!==v&&a!==y){var u;n.cancel(),r=!0;var l=(u={},u[t]=a,u);n(c.q.array(e)?[].slice.call(d({},l,{length:o.length})):l)}};i.cancel=c.u,a[t]=i}),n.cancel=function(){r||(r=!0,o.forEach(function(e){return a[e].cancel()}))},o.forEach(function(n){r||w(e[n],t,n,a[n])})}function N(e,t){var n=e.selector,r=e.args;try{var o=n.apply(void 0,[H()].concat(r));t(o)}catch(e){t(e,!0)}}function R(e,t){var n=e.pattern,r=e.buffer,a=o(n);a.pattern=n,t(Object(f.d)(U,r||p.a.fixed(),a))}function I(e,t){t(!!te.isCancelled)}function M(e,t){e.flush(t)}function L(e,t){t(Z[e])}function D(e,t){c.v.assign(Z,e),t()}var U=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return c.u},F=arguments.length>2&&void 0!==arguments[2]?arguments[2]:c.u,H=arguments.length>3&&void 0!==arguments[3]?arguments[3]:c.u,q=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},B=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},G=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,V=arguments.length>7&&void 0!==arguments[7]?arguments[7]:"anonymous",W=arguments[8];Object(c.h)(e,c.q.iterator,m);var z=Object(c.n)(A,Object(c.z)("[...effects]","all([...effects])")),Y=B.sagaMonitor,K=B.logger,Q=B.onError,$=K||c.s,X=function(e){var t=e.sagaStack;!t&&e.stack&&(t=-1!==e.stack.split("\n")[0].indexOf(e.message)?e.stack:"Error: "+e.message+"\n"+e.stack),$("error","uncaught at "+V,t||e.message||e)},J=Object(f.f)(U),Z=Object.create(q);h.cancel=c.u;var ee=function(e,t,o,a){var i,u,l;return o._deferredEnd=null,u={},u[c.e]=!0,u.id=e,u.name=t,i="done",l={},l[i]=l[i]||{},l[i].get=function(){if(o._deferredEnd)return o._deferredEnd.promise;var e=Object(c.l)();return o._deferredEnd=e,o._isRunning||(o._error?e.reject(o._error):e.resolve(o._result)),e.promise},u.cont=a,u.joiners=[],u.cancel=n,u.isRunning=function(){return o._isRunning},u.isCancelled=function(){return o._isCancelled},u.isAborted=function(){return o._isAborted},u.result=function(){return o._result},u.error=function(){return o._error},u.setContext=function(e){Object(c.h)(e,c.q.object,Object(c.k)("task",e)),c.v.assign(Z,e)},r(u,l),u}(G,V,e,W),te={name:V,cancel:t,isRunning:!0},ne=a(V,te,b);return W&&(W.cancel=n),e._isRunning=!0,h(),ee}n.d(t,"a",function(){return v}),t.b=u;var c=n(23),l=n(185),s=n(50),f=n(60),p=n(85),d=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function u(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}t.__esModule=!0,t.Helmet=void 0;var c=Object.assign||function(e){for(var t=1;t elements are self-closing and can not contain children. Refer to our API for more information.")},n.prototype.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren,o=e.newChildProps,a=e.nestedChildren;return c({},r,(t={},t[n.type]=[].concat(r[n.type]||[],[c({},o,this.mapNestedChildrenToProps(n,a))]),t))},n.prototype.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TAG_NAMES.TITLE:return c({},o,(t={},t[r.type]=i,t.titleAttributes=c({},a),t));case g.TAG_NAMES.BODY:return c({},o,{bodyAttributes:c({},a)});case g.TAG_NAMES.HTML:return c({},o,{htmlAttributes:c({},a)})}return c({},o,(n={},n[r.type]=c({},a),n))},n.prototype.mapArrayTypeChildrenToProps=function(e,t){var n=c({},t);return Object.keys(e).forEach(function(t){var r;n=c({},n,(r={},r[t]=e[t],r))}),n},n.prototype.warnOnInvalidChildren=function(e,t){return!0},n.prototype.mapChildrenToProps=function(e,t){var n=this,r={};return f.default.Children.forEach(e,function(e){if(e&&e.props){var a=e.props,i=a.children,u=o(a,["children"]),c=(0,b.convertReactPropstoHtmlAttributes)(u);switch(n.warnOnInvalidChildren(e,i),e.type){case g.TAG_NAMES.LINK:case g.TAG_NAMES.META:case g.TAG_NAMES.NOSCRIPT:case g.TAG_NAMES.SCRIPT:case g.TAG_NAMES.STYLE:r=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:r,newChildProps:c,nestedChildren:i});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:c,nestedChildren:i})}}}),t=this.mapArrayTypeChildrenToProps(r,t)},n.prototype.render=function(){var t=this.props,n=t.children,r=o(t,["children"]),a=c({},r);return n&&(a=this.mapChildrenToProps(n,a)),f.default.createElement(e,a)},l(n,null,[{key:"canUseDOM",set:function(t){e.canUseDOM=t}}]),n}(f.default.Component),t.propTypes={base:d.default.object,bodyAttributes:d.default.object,children:d.default.oneOfType([d.default.arrayOf(d.default.node),d.default.node]),defaultTitle:d.default.string,defer:d.default.bool,encodeSpecialCharacters:d.default.bool,htmlAttributes:d.default.object,link:d.default.arrayOf(d.default.object),meta:d.default.arrayOf(d.default.object),noscript:d.default.arrayOf(d.default.object),onChangeClientState:d.default.func,script:d.default.arrayOf(d.default.object),style:d.default.arrayOf(d.default.object),title:d.default.string,titleAttributes:d.default.object,titleTemplate:d.default.string},t.defaultProps={defer:!0,encodeSpecialCharacters:!0},t.peek=e.peek,t.rewind=function(){var t=e.rewind();return t||(t=(0,b.mapStateOnServer)({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}})),t},n}(E);_.renderStatic=_.rewind,t.Helmet=_,t.default=_},function(e,t){t.__esModule=!0;var n=(t.ATTRIBUTE_NAMES={BODY:"bodyAttributes",HTML:"htmlAttributes",TITLE:"titleAttributes"},t.TAG_NAMES={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title"}),r=(t.VALID_TAG_NAMES=Object.keys(n).map(function(e){return n[e]}),t.TAG_PROPERTIES={CHARSET:"charset",CSS_TEXT:"cssText",HREF:"href",HTTPEQUIV:"http-equiv",INNER_HTML:"innerHTML",ITEM_PROP:"itemprop",NAME:"name",PROPERTY:"property",REL:"rel",SRC:"src"},t.REACT_TAG_MAP={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"});t.HELMET_PROPS={DEFAULT_TITLE:"defaultTitle",DEFER:"defer",ENCODE_SPECIAL_CHARACTERS:"encodeSpecialCharacters",ON_CHANGE_CLIENT_STATE:"onChangeClientState",TITLE_TEMPLATE:"titleTemplate"},t.HTML_TAG_MAP=Object.keys(r).reduce(function(e,t){return e[r[t]]=t,e},{}),t.SELF_CLOSING_TAGS=[n.NOSCRIPT,n.SCRIPT,n.STYLE],t.HELMET_ATTRIBUTE="data-react-helmet"},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(6),o=n(24),a=n(510),i=function(e){return e&&e.__esModule?e:{default:e}}(a),u=function(e){var t=e.publish;return{file:t.file,thumbnail:t.thumbnail,fileError:t.error.file}},c=function(e){return{selectFile:function(t){e((0,o.selectFile)(t))},setFileError:function(t){e((0,o.clearFile)()),e((0,o.updateError)("file",t))}}};t.default=(0,r.connect)(u,c)(i.default)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(6),o=n(128),a=n(527),i=function(e){return e&&e.__esModule?e:{default:e}}(a),u=n(24),c=function(e){return{onChannelLogin:function(t,n,r){e((0,o.updateLoggedInChannel)(t,n,r)),e((0,u.updateSelectedChannel)(t))}}};t.default=(0,r.connect)(null,c)(i.default)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(6),o=n(128),a=n(528),i=function(e){return e&&e.__esModule?e:{default:e}}(a),u=n(24),c=function(e){return{onChannelLogin:function(t,n,r){e((0,o.updateLoggedInChannel)(t,n,r)),e((0,u.updateSelectedChannel)(t))}}};t.default=(0,r.connect)(null,c)(i.default)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(6),o=n(542),a=function(e){return e&&e.__esModule?e:{default:e}}(o),i=n(52),u=n(68),c=function(e){var t=e.show;return{error:t.displayAsset.error,status:t.displayAsset.status,asset:(0,u.selectAsset)(t)}},l=function(e){return{onFileRequest:function(t,n){e((0,i.fileRequested)(t,n))}}};t.default=(0,r.connect)(c,l)(a.default)},function(e,t,n){n(200),n(402),e.exports=n(403)},function(e,t,n){"use strict";(function(e){function t(e,t,n){e[t]||Object[r](e,t,{writable:!0,configurable:!0,value:n})}if(n(201),n(398),n(399),e._babelPolyfill)throw new Error("only one instance of babel-polyfill is allowed");e._babelPolyfill=!0;var r="defineProperty";t(String.prototype,"padLeft","".padStart),t(String.prototype,"padRight","".padEnd),"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function(e){[][e]&&t(Array,e,Function.call.bind([][e]))})}).call(t,n(62))},function(e,t,n){n(202),n(204),n(205),n(206),n(207),n(208),n(209),n(210),n(211),n(212),n(213),n(214),n(215),n(216),n(217),n(218),n(220),n(221),n(222),n(223),n(224),n(225),n(226),n(227),n(228),n(229),n(230),n(231),n(232),n(233),n(234),n(235),n(236),n(237),n(238),n(239),n(240),n(241),n(242),n(243),n(244),n(245),n(246),n(247),n(248),n(249),n(250),n(251),n(252),n(253),n(254),n(255),n(256),n(257),n(258),n(259),n(260),n(261),n(262),n(263),n(264),n(265),n(266),n(267),n(268),n(269),n(270),n(271),n(272),n(273),n(274),n(275),n(276),n(277),n(278),n(279),n(280),n(282),n(283),n(285),n(286),n(287),n(288),n(289),n(290),n(291),n(293),n(294),n(295),n(296),n(297),n(298),n(299),n(300),n(301),n(302),n(303),n(304),n(305),n(108),n(306),n(307),n(149),n(308),n(309),n(310),n(311),n(312),n(152),n(154),n(155),n(313),n(314),n(315),n(316),n(317),n(318),n(319),n(320),n(321),n(322),n(323),n(324),n(325),n(326),n(327),n(328),n(329),n(330),n(331),n(332),n(333),n(334),n(335),n(336),n(337),n(338),n(339),n(340),n(341),n(342),n(343),n(344),n(345),n(346),n(347),n(348),n(349),n(350),n(351),n(352),n(353),n(354),n(355),n(356),n(357),n(358),n(359),n(360),n(361),n(362),n(363),n(364),n(365),n(366),n(367),n(368),n(369),n(370),n(371),n(372),n(373),n(374),n(375),n(376),n(377),n(378),n(379),n(380),n(381),n(382),n(383),n(384),n(385),n(386),n(387),n(388),n(389),n(390),n(391),n(392),n(393),n(394),n(395),n(396),n(397),e.exports=n(28)},function(e,t,n){"use strict";var r=n(3),o=n(15),a=n(9),i=n(0),u=n(17),c=n(37).KEY,l=n(4),s=n(69),f=n(55),p=n(40),d=n(7),h=n(132),m=n(88),v=n(203),y=n(72),b=n(2),g=n(5),w=n(19),E=n(29),_=n(39),O=n(44),S=n(135),T=n(20),C=n(10),P=n(42),x=T.f,k=C.f,A=S.f,j=r.Symbol,N=r.JSON,R=N&&N.stringify,I=d("_hidden"),M=d("toPrimitive"),L={}.propertyIsEnumerable,D=s("symbol-registry"),U=s("symbols"),F=s("op-symbols"),H=Object.prototype,q="function"==typeof j,B=r.QObject,G=!B||!B.prototype||!B.prototype.findChild,V=a&&l(function(){return 7!=O(k({},"a",{get:function(){return k(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=x(H,t);r&&delete H[t],k(e,t,n),r&&e!==H&&k(H,t,r)}:k,W=function(e){var t=U[e]=O(j.prototype);return t._k=e,t},z=q&&"symbol"==typeof j.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof j},Y=function(e,t,n){return e===H&&Y(F,t,n),b(e),t=E(t,!0),b(n),o(U,t)?(n.enumerable?(o(e,I)&&e[I][t]&&(e[I][t]=!1),n=O(n,{enumerable:_(0,!1)})):(o(e,I)||k(e,I,_(1,{})),e[I][t]=!0),V(e,t,n)):k(e,t,n)},K=function(e,t){b(e);for(var n,r=v(t=w(t)),o=0,a=r.length;a>o;)Y(e,n=r[o++],t[n]);return e},Q=function(e,t){return void 0===t?O(e):K(O(e),t)},$=function(e){var t=L.call(this,e=E(e,!0));return!(this===H&&o(U,e)&&!o(F,e))&&(!(t||!o(this,e)||!o(U,e)||o(this,I)&&this[I][e])||t)},X=function(e,t){if(e=w(e),t=E(t,!0),e!==H||!o(U,t)||o(F,t)){var n=x(e,t);return!n||!o(U,t)||o(e,I)&&e[I][t]||(n.enumerable=!0),n}},J=function(e){for(var t,n=A(w(e)),r=[],a=0;n.length>a;)o(U,t=n[a++])||t==I||t==c||r.push(t);return r},Z=function(e){for(var t,n=e===H,r=A(n?F:w(e)),a=[],i=0;r.length>i;)!o(U,t=r[i++])||n&&!o(H,t)||a.push(U[t]);return a};q||(j=function(){if(this instanceof j)throw TypeError("Symbol is not a constructor!");var e=p(arguments.length>0?arguments[0]:void 0),t=function(n){this===H&&t.call(F,n),o(this,I)&&o(this[I],e)&&(this[I][e]=!1),V(this,e,_(1,n))};return a&&G&&V(H,e,{configurable:!0,set:t}),W(e)},u(j.prototype,"toString",function(){return this._k}),T.f=X,C.f=Y,n(45).f=S.f=J,n(64).f=$,n(71).f=Z,a&&!n(41)&&u(H,"propertyIsEnumerable",$,!0),h.f=function(e){return W(d(e))}),i(i.G+i.W+i.F*!q,{Symbol:j});for(var ee="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),te=0;ee.length>te;)d(ee[te++]);for(var ne=P(d.store),re=0;ne.length>re;)m(ne[re++]);i(i.S+i.F*!q,"Symbol",{for:function(e){return o(D,e+="")?D[e]:D[e]=j(e)},keyFor:function(e){if(!z(e))throw TypeError(e+" is not a symbol!");for(var t in D)if(D[t]===e)return t},useSetter:function(){G=!0},useSimple:function(){G=!1}}),i(i.S+i.F*!q,"Object",{create:Q,defineProperty:Y,defineProperties:K,getOwnPropertyDescriptor:X,getOwnPropertyNames:J,getOwnPropertySymbols:Z}),N&&i(i.S+i.F*(!q||l(function(){var e=j();return"[null]"!=R([e])||"{}"!=R({a:e})||"{}"!=R(Object(e))})),"JSON",{stringify:function(e){for(var t,n,r=[e],o=1;arguments.length>o;)r.push(arguments[o++]);if(n=t=r[1],(g(t)||void 0!==e)&&!z(e))return y(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!z(t))return t}),r[1]=t,R.apply(N,r)}}),j.prototype[M]||n(16)(j.prototype,M,j.prototype.valueOf),f(j,"Symbol"),f(Math,"Math",!0),f(r.JSON,"JSON",!0)},function(e,t,n){var r=n(42),o=n(71),a=n(64);e.exports=function(e){var t=r(e),n=o.f;if(n)for(var i,u=n(e),c=a.f,l=0;u.length>l;)c.call(e,i=u[l++])&&t.push(i);return t}},function(e,t,n){var r=n(0);r(r.S,"Object",{create:n(44)})},function(e,t,n){var r=n(0);r(r.S+r.F*!n(9),"Object",{defineProperty:n(10).f})},function(e,t,n){var r=n(0);r(r.S+r.F*!n(9),"Object",{defineProperties:n(134)})},function(e,t,n){var r=n(19),o=n(20).f;n(32)("getOwnPropertyDescriptor",function(){return function(e,t){return o(r(e),t)}})},function(e,t,n){var r=n(12),o=n(21);n(32)("getPrototypeOf",function(){return function(e){return o(r(e))}})},function(e,t,n){var r=n(12),o=n(42);n(32)("keys",function(){return function(e){return o(r(e))}})},function(e,t,n){n(32)("getOwnPropertyNames",function(){return n(135).f})},function(e,t,n){var r=n(5),o=n(37).onFreeze;n(32)("freeze",function(e){return function(t){return e&&r(t)?e(o(t)):t}})},function(e,t,n){var r=n(5),o=n(37).onFreeze;n(32)("seal",function(e){return function(t){return e&&r(t)?e(o(t)):t}})},function(e,t,n){var r=n(5),o=n(37).onFreeze;n(32)("preventExtensions",function(e){return function(t){return e&&r(t)?e(o(t)):t}})},function(e,t,n){var r=n(5);n(32)("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}})},function(e,t,n){var r=n(5);n(32)("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}})},function(e,t,n){var r=n(5);n(32)("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}})},function(e,t,n){var r=n(0);r(r.S+r.F,"Object",{assign:n(136)})},function(e,t,n){var r=n(0);r(r.S,"Object",{is:n(219)})},function(e,t){e.exports=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}},function(e,t,n){var r=n(0);r(r.S,"Object",{setPrototypeOf:n(92).set})},function(e,t,n){"use strict";var r=n(65),o={};o[n(7)("toStringTag")]="z",o+""!="[object z]"&&n(17)(Object.prototype,"toString",function(){return"[object "+r(this)+"]"},!0)},function(e,t,n){var r=n(0);r(r.P,"Function",{bind:n(137)})},function(e,t,n){var r=n(10).f,o=Function.prototype,a=/^\s*function ([^ (]*)/;"name"in o||n(9)&&r(o,"name",{configurable:!0,get:function(){try{return(""+this).match(a)[1]}catch(e){return""}}})},function(e,t,n){"use strict";var r=n(5),o=n(21),a=n(7)("hasInstance"),i=Function.prototype;a in i||n(10).f(i,a,{value:function(e){if("function"!=typeof this||!r(e))return!1;if(!r(this.prototype))return e instanceof this;for(;e=o(e);)if(this.prototype===e)return!0;return!1}})},function(e,t,n){var r=n(0),o=n(139);r(r.G+r.F*(parseInt!=o),{parseInt:o})},function(e,t,n){var r=n(0),o=n(140);r(r.G+r.F*(parseFloat!=o),{parseFloat:o})},function(e,t,n){"use strict";var r=n(3),o=n(15),a=n(26),i=n(94),u=n(29),c=n(4),l=n(45).f,s=n(20).f,f=n(10).f,p=n(56).trim,d=r.Number,h=d,m=d.prototype,v="Number"==a(n(44)(m)),y="trim"in String.prototype,b=function(e){var t=u(e,!1);if("string"==typeof t&&t.length>2){t=y?t.trim():p(t,3);var n,r,o,a=t.charCodeAt(0);if(43===a||45===a){if(88===(n=t.charCodeAt(2))||120===n)return NaN}else if(48===a){switch(t.charCodeAt(1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+t}for(var i,c=t.slice(2),l=0,s=c.length;lo)return NaN;return parseInt(c,r)}}return+t};if(!d(" 0o1")||!d("0b1")||d("+0x1")){d=function(e){var t=arguments.length<1?0:e,n=this;return n instanceof d&&(v?c(function(){m.valueOf.call(n)}):"Number"!=a(n))?i(new h(b(t)),n,d):b(t)};for(var g,w=n(9)?l(h):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),E=0;w.length>E;E++)o(h,g=w[E])&&!o(d,g)&&f(d,g,s(h,g));d.prototype=m,m.constructor=d,n(17)(r,"Number",d)}},function(e,t,n){"use strict";var r=n(0),o=n(31),a=n(141),i=n(95),u=1..toFixed,c=Math.floor,l=[0,0,0,0,0,0],s="Number.toFixed: incorrect invocation!",f=function(e,t){for(var n=-1,r=t;++n<6;)r+=e*l[n],l[n]=r%1e7,r=c(r/1e7)},p=function(e){for(var t=6,n=0;--t>=0;)n+=l[t],l[t]=c(n/e),n=n%e*1e7},d=function(){for(var e=6,t="";--e>=0;)if(""!==t||0===e||0!==l[e]){var n=String(l[e]);t=""===t?n:t+i.call("0",7-n.length)+n}return t},h=function(e,t,n){return 0===t?n:t%2==1?h(e,t-1,n*e):h(e*e,t/2,n)},m=function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t};r(r.P+r.F*(!!u&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!n(4)(function(){u.call({})})),"Number",{toFixed:function(e){var t,n,r,u,c=a(this,s),l=o(e),v="",y="0";if(l<0||l>20)throw RangeError(s);if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return String(c);if(c<0&&(v="-",c=-c),c>1e-21)if(t=m(c*h(2,69,1))-69,n=t<0?c*h(2,-t,1):c/h(2,t,1),n*=4503599627370496,(t=52-t)>0){for(f(0,n),r=l;r>=7;)f(1e7,0),r-=7;for(f(h(10,r,1),0),r=t-1;r>=23;)p(1<<23),r-=23;p(1<0?(u=y.length,y=v+(u<=l?"0."+i.call("0",l-u)+y:y.slice(0,u-l)+"."+y.slice(u-l))):y=v+y,y}})},function(e,t,n){"use strict";var r=n(0),o=n(4),a=n(141),i=1..toPrecision;r(r.P+r.F*(o(function(){return"1"!==i.call(1,void 0)})||!o(function(){i.call({})})),"Number",{toPrecision:function(e){var t=a(this,"Number#toPrecision: incorrect invocation!");return void 0===e?i.call(t):i.call(t,e)}})},function(e,t,n){var r=n(0);r(r.S,"Number",{EPSILON:Math.pow(2,-52)})},function(e,t,n){var r=n(0),o=n(3).isFinite;r(r.S,"Number",{isFinite:function(e){return"number"==typeof e&&o(e)}})},function(e,t,n){var r=n(0);r(r.S,"Number",{isInteger:n(142)})},function(e,t,n){var r=n(0);r(r.S,"Number",{isNaN:function(e){return e!=e}})},function(e,t,n){var r=n(0),o=n(142),a=Math.abs;r(r.S,"Number",{isSafeInteger:function(e){return o(e)&&a(e)<=9007199254740991}})},function(e,t,n){var r=n(0);r(r.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(e,t,n){var r=n(0);r(r.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(e,t,n){var r=n(0),o=n(140);r(r.S+r.F*(Number.parseFloat!=o),"Number",{parseFloat:o})},function(e,t,n){var r=n(0),o=n(139);r(r.S+r.F*(Number.parseInt!=o),"Number",{parseInt:o})},function(e,t,n){var r=n(0),o=n(143),a=Math.sqrt,i=Math.acosh;r(r.S+r.F*!(i&&710==Math.floor(i(Number.MAX_VALUE))&&i(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:o(e-1+a(e-1)*a(e+1))}})},function(e,t,n){function r(e){return isFinite(e=+e)&&0!=e?e<0?-r(-e):Math.log(e+Math.sqrt(e*e+1)):e}var o=n(0),a=Math.asinh;o(o.S+o.F*!(a&&1/a(0)>0),"Math",{asinh:r})},function(e,t,n){var r=n(0),o=Math.atanh;r(r.S+r.F*!(o&&1/o(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}})},function(e,t,n){var r=n(0),o=n(96);r(r.S,"Math",{cbrt:function(e){return o(e=+e)*Math.pow(Math.abs(e),1/3)}})},function(e,t,n){var r=n(0);r(r.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}})},function(e,t,n){var r=n(0),o=Math.exp;r(r.S,"Math",{cosh:function(e){return(o(e=+e)+o(-e))/2}})},function(e,t,n){var r=n(0),o=n(97);r(r.S+r.F*(o!=Math.expm1),"Math",{expm1:o})},function(e,t,n){var r=n(0);r(r.S,"Math",{fround:n(144)})},function(e,t,n){var r=n(0),o=Math.abs;r(r.S,"Math",{hypot:function(e,t){for(var n,r,a=0,i=0,u=arguments.length,c=0;i0?(r=n/c,a+=r*r):a+=n;return c===1/0?1/0:c*Math.sqrt(a)}})},function(e,t,n){var r=n(0),o=Math.imul;r(r.S+r.F*n(4)(function(){return-5!=o(4294967295,5)||2!=o.length}),"Math",{imul:function(e,t){var n=+e,r=+t,o=65535&n,a=65535&r;return 0|o*a+((65535&n>>>16)*a+o*(65535&r>>>16)<<16>>>0)}})},function(e,t,n){var r=n(0);r(r.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}})},function(e,t,n){var r=n(0);r(r.S,"Math",{log1p:n(143)})},function(e,t,n){var r=n(0);r(r.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}})},function(e,t,n){var r=n(0);r(r.S,"Math",{sign:n(96)})},function(e,t,n){var r=n(0),o=n(97),a=Math.exp;r(r.S+r.F*n(4)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(o(e)-o(-e))/2:(a(e-1)-a(-e-1))*(Math.E/2)}})},function(e,t,n){var r=n(0),o=n(97),a=Math.exp;r(r.S,"Math",{tanh:function(e){var t=o(e=+e),n=o(-e);return t==1/0?1:n==1/0?-1:(t-n)/(a(e)+a(-e))}})},function(e,t,n){var r=n(0);r(r.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}})},function(e,t,n){var r=n(0),o=n(43),a=String.fromCharCode,i=String.fromCodePoint;r(r.S+r.F*(!!i&&1!=i.length),"String",{fromCodePoint:function(e){for(var t,n=[],r=arguments.length,i=0;r>i;){if(t=+arguments[i++],o(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?a(t):a(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}})},function(e,t,n){var r=n(0),o=n(19),a=n(11);r(r.S,"String",{raw:function(e){for(var t=o(e.raw),n=a(t.length),r=arguments.length,i=[],u=0;n>u;)i.push(String(t[u++])),u=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){"use strict";var r=n(0),o=n(98)(!1);r(r.P,"String",{codePointAt:function(e){return o(this,e)}})},function(e,t,n){"use strict";var r=n(0),o=n(11),a=n(101),i="".endsWith;r(r.P+r.F*n(102)("endsWith"),"String",{endsWith:function(e){var t=a(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,r=o(t.length),u=void 0===n?r:Math.min(o(n),r),c=String(e);return i?i.call(t,c,u):t.slice(u-c.length,u)===c}})},function(e,t,n){"use strict";var r=n(0),o=n(101);r(r.P+r.F*n(102)("includes"),"String",{includes:function(e){return!!~o(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){var r=n(0);r(r.P,"String",{repeat:n(95)})},function(e,t,n){"use strict";var r=n(0),o=n(11),a=n(101),i="".startsWith;r(r.P+r.F*n(102)("startsWith"),"String",{startsWith:function(e){var t=a(this,e,"startsWith"),n=o(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),r=String(e);return i?i.call(t,r,n):t.slice(n,n+r.length)===r}})},function(e,t,n){"use strict";n(18)("anchor",function(e){return function(t){return e(this,"a","name",t)}})},function(e,t,n){"use strict";n(18)("big",function(e){return function(){return e(this,"big","","")}})},function(e,t,n){"use strict";n(18)("blink",function(e){return function(){return e(this,"blink","","")}})},function(e,t,n){"use strict";n(18)("bold",function(e){return function(){return e(this,"b","","")}})},function(e,t,n){"use strict";n(18)("fixed",function(e){return function(){return e(this,"tt","","")}})},function(e,t,n){"use strict";n(18)("fontcolor",function(e){return function(t){return e(this,"font","color",t)}})},function(e,t,n){"use strict";n(18)("fontsize",function(e){return function(t){return e(this,"font","size",t)}})},function(e,t,n){"use strict";n(18)("italics",function(e){return function(){return e(this,"i","","")}})},function(e,t,n){"use strict";n(18)("link",function(e){return function(t){return e(this,"a","href",t)}})},function(e,t,n){"use strict";n(18)("small",function(e){return function(){return e(this,"small","","")}})},function(e,t,n){"use strict";n(18)("strike",function(e){return function(){return e(this,"strike","","")}})},function(e,t,n){"use strict";n(18)("sub",function(e){return function(){return e(this,"sub","","")}})},function(e,t,n){"use strict";n(18)("sup",function(e){return function(){return e(this,"sup","","")}})},function(e,t,n){var r=n(0);r(r.S,"Date",{now:function(){return(new Date).getTime()}})},function(e,t,n){"use strict";var r=n(0),o=n(12),a=n(29);r(r.P+r.F*n(4)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function(e){var t=o(this),n=a(t);return"number"!=typeof n||isFinite(n)?t.toISOString():null}})},function(e,t,n){var r=n(0),o=n(281);r(r.P+r.F*(Date.prototype.toISOString!==o),"Date",{toISOString:o})},function(e,t,n){"use strict";var r=n(4),o=Date.prototype.getTime,a=Date.prototype.toISOString,i=function(e){return e>9?e:"0"+e};e.exports=r(function(){return"0385-07-25T07:06:39.999Z"!=a.call(new Date(-5e13-1))})||!r(function(){a.call(new Date(NaN))})?function(){if(!isFinite(o.call(this)))throw RangeError("Invalid time value");var e=this,t=e.getUTCFullYear(),n=e.getUTCMilliseconds(),r=t<0?"-":t>9999?"+":"";return r+("00000"+Math.abs(t)).slice(r?-6:-4)+"-"+i(e.getUTCMonth()+1)+"-"+i(e.getUTCDate())+"T"+i(e.getUTCHours())+":"+i(e.getUTCMinutes())+":"+i(e.getUTCSeconds())+"."+(n>99?n:"0"+i(n))+"Z"}:a},function(e,t,n){var r=Date.prototype,o=r.toString,a=r.getTime;new Date(NaN)+""!="Invalid Date"&&n(17)(r,"toString",function(){var e=a.call(this);return e===e?o.call(this):"Invalid Date"})},function(e,t,n){var r=n(7)("toPrimitive"),o=Date.prototype;r in o||n(16)(o,r,n(284))},function(e,t,n){"use strict";var r=n(2),o=n(29);e.exports=function(e){if("string"!==e&&"number"!==e&&"default"!==e)throw TypeError("Incorrect hint");return o(r(this),"number"!=e)}},function(e,t,n){var r=n(0);r(r.S,"Array",{isArray:n(72)})},function(e,t,n){"use strict";var r=n(25),o=n(0),a=n(12),i=n(145),u=n(103),c=n(11),l=n(104),s=n(105);o(o.S+o.F*!n(74)(function(e){Array.from(e)}),"Array",{from:function(e){var t,n,o,f,p=a(e),d="function"==typeof this?this:Array,h=arguments.length,m=h>1?arguments[1]:void 0,v=void 0!==m,y=0,b=s(p);if(v&&(m=r(m,h>2?arguments[2]:void 0,2)),void 0==b||d==Array&&u(b))for(t=c(p.length),n=new d(t);t>y;y++)l(n,y,v?m(p[y],y):p[y]);else for(f=b.call(p),n=new d;!(o=f.next()).done;y++)l(n,y,v?i(f,m,[o.value,y],!0):o.value);return n.length=y,n}})},function(e,t,n){"use strict";var r=n(0),o=n(104);r(r.S+r.F*n(4)(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)o(n,e,arguments[e++]);return n.length=t,n}})},function(e,t,n){"use strict";var r=n(0),o=n(19),a=[].join;r(r.P+r.F*(n(63)!=Object||!n(27)(a)),"Array",{join:function(e){return a.call(o(this),void 0===e?",":e)}})},function(e,t,n){"use strict";var r=n(0),o=n(91),a=n(26),i=n(43),u=n(11),c=[].slice;r(r.P+r.F*n(4)(function(){o&&c.call(o)}),"Array",{slice:function(e,t){var n=u(this.length),r=a(this);if(t=void 0===t?n:t,"Array"==r)return c.call(this,e,t);for(var o=i(e,n),l=i(t,n),s=u(l-o),f=new Array(s),p=0;p1&&(r=Math.min(r,a(arguments[1]))),r<0&&(r=n+r);r>=0;r--)if(r in t&&t[r]===e)return r||0;return-1}})},function(e,t,n){var r=n(0);r(r.P,"Array",{copyWithin:n(147)}),n(38)("copyWithin")},function(e,t,n){var r=n(0);r(r.P,"Array",{fill:n(107)}),n(38)("fill")},function(e,t,n){"use strict";var r=n(0),o=n(33)(5),a=!0;"find"in[]&&Array(1).find(function(){a=!1}),r(r.P+r.F*a,"Array",{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(38)("find")},function(e,t,n){"use strict";var r=n(0),o=n(33)(6),a="findIndex",i=!0;a in[]&&Array(1)[a](function(){i=!1}),r(r.P+r.F*i,"Array",{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(38)(a)},function(e,t,n){n(46)("Array")},function(e,t,n){var r=n(3),o=n(94),a=n(10).f,i=n(45).f,u=n(73),c=n(75),l=r.RegExp,s=l,f=l.prototype,p=/a/g,d=/a/g,h=new l(p)!==p;if(n(9)&&(!h||n(4)(function(){return d[n(7)("match")]=!1,l(p)!=p||l(d)==d||"/a/i"!=l(p,"i")}))){l=function(e,t){var n=this instanceof l,r=u(e),a=void 0===t;return!n&&r&&e.constructor===l&&a?e:o(h?new s(r&&!a?e.source:e,t):s((r=e instanceof l)?e.source:e,r&&a?c.call(e):t),n?this:f,l)};for(var m=i(s),v=0;m.length>v;)!function(e){e in l||a(l,e,{configurable:!0,get:function(){return s[e]},set:function(t){s[e]=t}})}(m[v++]);f.constructor=l,l.prototype=f,n(17)(r,"RegExp",l)}n(46)("RegExp")},function(e,t,n){"use strict";n(149);var r=n(2),o=n(75),a=n(9),i=/./.toString,u=function(e){n(17)(RegExp.prototype,"toString",e,!0)};n(4)(function(){return"/a/b"!=i.call({source:"a",flags:"b"})})?u(function(){var e=r(this);return"/".concat(e.source,"/","flags"in e?e.flags:!a&&e instanceof RegExp?o.call(e):void 0)}):"toString"!=i.name&&u(function(){return i.call(this)})},function(e,t,n){n(76)("match",1,function(e,t,n){return[function(n){"use strict";var r=e(this),o=void 0==n?void 0:n[t];return void 0!==o?o.call(n,r):new RegExp(n)[t](String(r))},n]})},function(e,t,n){n(76)("replace",2,function(e,t,n){return[function(r,o){"use strict";var a=e(this),i=void 0==r?void 0:r[t];return void 0!==i?i.call(r,a,o):n.call(String(a),r,o)},n]})},function(e,t,n){n(76)("search",1,function(e,t,n){return[function(n){"use strict";var r=e(this),o=void 0==n?void 0:n[t];return void 0!==o?o.call(n,r):new RegExp(n)[t](String(r))},n]})},function(e,t,n){n(76)("split",2,function(e,t,r){"use strict";var o=n(73),a=r,i=[].push,u="length";if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1)[u]||2!="ab".split(/(?:ab)*/)[u]||4!=".".split(/(.?)(.?)/)[u]||".".split(/()()/)[u]>1||"".split(/.?/)[u]){var c=void 0===/()??/.exec("")[1];r=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!o(e))return a.call(n,e,t);var r,l,s,f,p,d=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),m=0,v=void 0===t?4294967295:t>>>0,y=new RegExp(e.source,h+"g");for(c||(r=new RegExp("^"+y.source+"$(?!\\s)",h));(l=y.exec(n))&&!((s=l.index+l[0][u])>m&&(d.push(n.slice(m,l.index)),!c&&l[u]>1&&l[0].replace(r,function(){for(p=1;p1&&l.index=v));)y.lastIndex===l.index&&y.lastIndex++;return m===n[u]?!f&&y.test("")||d.push(""):d.push(n.slice(m)),d[u]>v?d.slice(0,v):d}}else"0".split(void 0,0)[u]&&(r=function(e,t){return void 0===e&&0===t?[]:a.call(this,e,t)});return[function(n,o){var a=e(this),i=void 0==n?void 0:n[t];return void 0!==i?i.call(n,a,o):r.call(String(a),n,o)},r]})},function(e,t,n){"use strict";var r,o,a,i,u=n(41),c=n(3),l=n(25),s=n(65),f=n(0),p=n(5),d=n(14),h=n(47),m=n(48),v=n(77),y=n(109).set,b=n(110)(),g=n(111),w=n(150),E=n(151),_=c.TypeError,O=c.process,S=c.Promise,T="process"==s(O),C=function(){},P=o=g.f,x=!!function(){try{var e=S.resolve(1),t=(e.constructor={})[n(7)("species")]=function(e){e(C,C)};return(T||"function"==typeof PromiseRejectionEvent)&&e.then(C)instanceof t}catch(e){}}(),k=function(e){var t;return!(!p(e)||"function"!=typeof(t=e.then))&&t},A=function(e,t){if(!e._n){e._n=!0;var n=e._c;b(function(){for(var r=e._v,o=1==e._s,a=0;n.length>a;)!function(t){var n,a,i=o?t.ok:t.fail,u=t.resolve,c=t.reject,l=t.domain;try{i?(o||(2==e._h&&R(e),e._h=1),!0===i?n=r:(l&&l.enter(),n=i(r),l&&l.exit()),n===t.promise?c(_("Promise-chain cycle")):(a=k(n))?a.call(n,u,c):u(n)):c(r)}catch(e){c(e)}}(n[a++]);e._c=[],e._n=!1,t&&!e._h&&j(e)})}},j=function(e){y.call(c,function(){var t,n,r,o=e._v,a=N(e);if(a&&(t=w(function(){T?O.emit("unhandledRejection",o,e):(n=c.onunhandledrejection)?n({promise:e,reason:o}):(r=c.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=T||N(e)?2:1),e._a=void 0,a&&t.e)throw t.v})},N=function(e){return 1!==e._h&&0===(e._a||e._c).length},R=function(e){y.call(c,function(){var t;T?O.emit("rejectionHandled",e):(t=c.onrejectionhandled)&&t({promise:e,reason:e._v})})},I=function(e){var t=this;t._d||(t._d=!0,t=t._w||t,t._v=e,t._s=2,t._a||(t._a=t._c.slice()),A(t,!0))},M=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw _("Promise can't be resolved itself");(t=k(e))?b(function(){var r={_w:n,_d:!1};try{t.call(e,l(M,r,1),l(I,r,1))}catch(e){I.call(r,e)}}):(n._v=e,n._s=1,A(n,!1))}catch(e){I.call({_w:n,_d:!1},e)}}};x||(S=function(e){h(this,S,"Promise","_h"),d(e),r.call(this);try{e(l(M,this,1),l(I,this,1))}catch(e){I.call(this,e)}},r=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=n(49)(S.prototype,{then:function(e,t){var n=P(v(this,S));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=T?O.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&A(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),a=function(){var e=new r;this.promise=e,this.resolve=l(M,e,1),this.reject=l(I,e,1)},g.f=P=function(e){return e===S||e===i?new a(e):o(e)}),f(f.G+f.W+f.F*!x,{Promise:S}),n(55)(S,"Promise"),n(46)("Promise"),i=n(28).Promise,f(f.S+f.F*!x,"Promise",{reject:function(e){var t=P(this);return(0,t.reject)(e),t.promise}}),f(f.S+f.F*(u||!x),"Promise",{resolve:function(e){return E(u&&this===i?S:this,e)}}),f(f.S+f.F*!(x&&n(74)(function(e){S.all(e).catch(C)})),"Promise",{all:function(e){var t=this,n=P(t),r=n.resolve,o=n.reject,a=w(function(){var n=[],a=0,i=1;m(e,!1,function(e){var u=a++,c=!1;n.push(void 0),i++,t.resolve(e).then(function(e){c||(c=!0,n[u]=e,--i||r(n))},o)}),--i||r(n)});return a.e&&o(a.v),n.promise},race:function(e){var t=this,n=P(t),r=n.reject,o=w(function(){m(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o.e&&r(o.v),n.promise}})},function(e,t,n){"use strict";var r=n(156),o=n(58);n(78)("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return r.def(o(this,"WeakSet"),e,!0)}},r,!1,!0)},function(e,t,n){"use strict";var r=n(0),o=n(79),a=n(112),i=n(2),u=n(43),c=n(11),l=n(5),s=n(3).ArrayBuffer,f=n(77),p=a.ArrayBuffer,d=a.DataView,h=o.ABV&&s.isView,m=p.prototype.slice,v=o.VIEW;r(r.G+r.W+r.F*(s!==p),{ArrayBuffer:p}),r(r.S+r.F*!o.CONSTR,"ArrayBuffer",{isView:function(e){return h&&h(e)||l(e)&&v in e}}),r(r.P+r.U+r.F*n(4)(function(){return!new p(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==m&&void 0===t)return m.call(i(this),e);for(var n=i(this).byteLength,r=u(e,n),o=u(void 0===t?n:t,n),a=new(f(this,p))(c(o-r)),l=new d(this),s=new d(a),h=0;r=n.length)return{value:void 0,done:!0}}while(!((e=n[t._i++])in t._t));return{value:e,done:!1}}),r(r.S,"Reflect",{enumerate:function(e){return new a(e)}})},function(e,t,n){function r(e,t){var n,u,s=arguments.length<3?e:arguments[2];return l(e)===s?e[t]:(n=o.f(e,t))?i(n,"value")?n.value:void 0!==n.get?n.get.call(s):void 0:c(u=a(e))?r(u,t,s):void 0}var o=n(20),a=n(21),i=n(15),u=n(0),c=n(5),l=n(2);u(u.S,"Reflect",{get:r})},function(e,t,n){var r=n(20),o=n(0),a=n(2);o(o.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return r.f(a(e),t)}})},function(e,t,n){var r=n(0),o=n(21),a=n(2);r(r.S,"Reflect",{getPrototypeOf:function(e){return o(a(e))}})},function(e,t,n){var r=n(0);r(r.S,"Reflect",{has:function(e,t){return t in e}})},function(e,t,n){var r=n(0),o=n(2),a=Object.isExtensible;r(r.S,"Reflect",{isExtensible:function(e){return o(e),!a||a(e)}})},function(e,t,n){var r=n(0);r(r.S,"Reflect",{ownKeys:n(158)})},function(e,t,n){var r=n(0),o=n(2),a=Object.preventExtensions;r(r.S,"Reflect",{preventExtensions:function(e){o(e);try{return a&&a(e),!0}catch(e){return!1}}})},function(e,t,n){function r(e,t,n){var c,p,d=arguments.length<4?e:arguments[3],h=a.f(s(e),t);if(!h){if(f(p=i(e)))return r(p,t,n,d);h=l(0)}return u(h,"value")?!(!1===h.writable||!f(d))&&(c=a.f(d,t)||l(0),c.value=n,o.f(d,t,c),!0):void 0!==h.set&&(h.set.call(d,n),!0)}var o=n(10),a=n(20),i=n(21),u=n(15),c=n(0),l=n(39),s=n(2),f=n(5);c(c.S,"Reflect",{set:r})},function(e,t,n){var r=n(0),o=n(92);o&&r(r.S,"Reflect",{setPrototypeOf:function(e,t){o.check(e,t);try{return o.set(e,t),!0}catch(e){return!1}}})},function(e,t,n){"use strict";var r=n(0),o=n(70)(!0);r(r.P,"Array",{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(38)("includes")},function(e,t,n){"use strict";var r=n(0),o=n(159),a=n(12),i=n(11),u=n(14),c=n(106);r(r.P,"Array",{flatMap:function(e){var t,n,r=a(this);return u(e),t=i(r.length),n=c(r,0),o(n,r,r,t,0,1,e,arguments[1]),n}}),n(38)("flatMap")},function(e,t,n){"use strict";var r=n(0),o=n(159),a=n(12),i=n(11),u=n(31),c=n(106);r(r.P,"Array",{flatten:function(){var e=arguments[0],t=a(this),n=i(t.length),r=c(t,0);return o(r,t,t,n,0,void 0===e?1:u(e)),r}}),n(38)("flatten")},function(e,t,n){"use strict";var r=n(0),o=n(98)(!0);r(r.P,"String",{at:function(e){return o(this,e)}})},function(e,t,n){"use strict";var r=n(0),o=n(160),a=n(113);r(r.P+r.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(a),"String",{padStart:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0,!0)}})},function(e,t,n){"use strict";var r=n(0),o=n(160),a=n(113);r(r.P+r.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(a),"String",{padEnd:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0,!1)}})},function(e,t,n){"use strict";n(56)("trimLeft",function(e){return function(){return e(this,1)}},"trimStart")},function(e,t,n){"use strict";n(56)("trimRight",function(e){return function(){return e(this,2)}},"trimEnd")},function(e,t,n){"use strict";var r=n(0),o=n(30),a=n(11),i=n(73),u=n(75),c=RegExp.prototype,l=function(e,t){this._r=e,this._s=t};n(100)(l,"RegExp String",function(){var e=this._r.exec(this._s);return{value:e,done:null===e}}),r(r.P,"String",{matchAll:function(e){if(o(this),!i(e))throw TypeError(e+" is not a regexp!");var t=String(this),n="flags"in c?String(e.flags):u.call(e),r=new RegExp(e.source,~n.indexOf("g")?n:"g"+n);return r.lastIndex=a(e.lastIndex),new l(r,t)}})},function(e,t,n){n(88)("asyncIterator")},function(e,t,n){n(88)("observable")},function(e,t,n){var r=n(0),o=n(158),a=n(19),i=n(20),u=n(104);r(r.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,r=a(e),c=i.f,l=o(r),s={},f=0;l.length>f;)void 0!==(n=c(r,t=l[f++]))&&u(s,t,n);return s}})},function(e,t,n){var r=n(0),o=n(161)(!1);r(r.S,"Object",{values:function(e){return o(e)}})},function(e,t,n){var r=n(0),o=n(161)(!0);r(r.S,"Object",{entries:function(e){return o(e)}})},function(e,t,n){"use strict";var r=n(0),o=n(12),a=n(14),i=n(10);n(9)&&r(r.P+n(80),"Object",{__defineGetter__:function(e,t){i.f(o(this),e,{get:a(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var r=n(0),o=n(12),a=n(14),i=n(10);n(9)&&r(r.P+n(80),"Object",{__defineSetter__:function(e,t){i.f(o(this),e,{set:a(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var r=n(0),o=n(12),a=n(29),i=n(21),u=n(20).f;n(9)&&r(r.P+n(80),"Object",{__lookupGetter__:function(e){var t,n=o(this),r=a(e,!0);do{if(t=u(n,r))return t.get}while(n=i(n))}})},function(e,t,n){"use strict";var r=n(0),o=n(12),a=n(29),i=n(21),u=n(20).f;n(9)&&r(r.P+n(80),"Object",{__lookupSetter__:function(e){var t,n=o(this),r=a(e,!0);do{if(t=u(n,r))return t.set}while(n=i(n))}})},function(e,t,n){var r=n(0);r(r.P+r.R,"Map",{toJSON:n(162)("Map")})},function(e,t,n){var r=n(0);r(r.P+r.R,"Set",{toJSON:n(162)("Set")})},function(e,t,n){n(81)("Map")},function(e,t,n){n(81)("Set")},function(e,t,n){n(81)("WeakMap")},function(e,t,n){n(81)("WeakSet")},function(e,t,n){n(82)("Map")},function(e,t,n){n(82)("Set")},function(e,t,n){n(82)("WeakMap")},function(e,t,n){n(82)("WeakSet")},function(e,t,n){var r=n(0);r(r.G,{global:n(3)})},function(e,t,n){var r=n(0);r(r.S,"System",{global:n(3)})},function(e,t,n){var r=n(0),o=n(26);r(r.S,"Error",{isError:function(e){return"Error"===o(e)}})},function(e,t,n){var r=n(0);r(r.S,"Math",{clamp:function(e,t,n){return Math.min(n,Math.max(t,e))}})},function(e,t,n){var r=n(0);r(r.S,"Math",{DEG_PER_RAD:Math.PI/180})},function(e,t,n){var r=n(0),o=180/Math.PI;r(r.S,"Math",{degrees:function(e){return e*o}})},function(e,t,n){var r=n(0),o=n(164),a=n(144);r(r.S,"Math",{fscale:function(e,t,n,r,i){return a(o(e,t,n,r,i))}})},function(e,t,n){var r=n(0);r(r.S,"Math",{iaddh:function(e,t,n,r){var o=e>>>0,a=t>>>0,i=n>>>0;return a+(r>>>0)+((o&i|(o|i)&~(o+i>>>0))>>>31)|0}})},function(e,t,n){var r=n(0);r(r.S,"Math",{isubh:function(e,t,n,r){var o=e>>>0,a=t>>>0,i=n>>>0;return a-(r>>>0)-((~o&i|~(o^i)&o-i>>>0)>>>31)|0}})},function(e,t,n){var r=n(0);r(r.S,"Math",{imulh:function(e,t){var n=+e,r=+t,o=65535&n,a=65535&r,i=n>>16,u=r>>16,c=(i*a>>>0)+(o*a>>>16);return i*u+(c>>16)+((o*u>>>0)+(65535&c)>>16)}})},function(e,t,n){var r=n(0);r(r.S,"Math",{RAD_PER_DEG:180/Math.PI})},function(e,t,n){var r=n(0),o=Math.PI/180;r(r.S,"Math",{radians:function(e){return e*o}})},function(e,t,n){var r=n(0);r(r.S,"Math",{scale:n(164)})},function(e,t,n){var r=n(0);r(r.S,"Math",{umulh:function(e,t){var n=+e,r=+t,o=65535&n,a=65535&r,i=n>>>16,u=r>>>16,c=(i*a>>>0)+(o*a>>>16);return i*u+(c>>>16)+((o*u>>>0)+(65535&c)>>>16)}})},function(e,t,n){var r=n(0);r(r.S,"Math",{signbit:function(e){return(e=+e)!=e?e:0==e?1/e==1/0:e>0}})},function(e,t,n){"use strict";var r=n(0),o=n(28),a=n(3),i=n(77),u=n(151);r(r.P+r.R,"Promise",{finally:function(e){var t=i(this,o.Promise||a.Promise),n="function"==typeof e;return this.then(n?function(n){return u(t,e()).then(function(){return n})}:e,n?function(n){return u(t,e()).then(function(){throw n})}:e)}})},function(e,t,n){"use strict";var r=n(0),o=n(111),a=n(150);r(r.S,"Promise",{try:function(e){var t=o.f(this),n=a(e);return(n.e?t.reject:t.resolve)(n.v),t.promise}})},function(e,t,n){var r=n(36),o=n(2),a=r.key,i=r.set;r.exp({defineMetadata:function(e,t,n,r){i(e,t,o(n),a(r))}})},function(e,t,n){var r=n(36),o=n(2),a=r.key,i=r.map,u=r.store;r.exp({deleteMetadata:function(e,t){var n=arguments.length<3?void 0:a(arguments[2]),r=i(o(t),n,!1);if(void 0===r||!r.delete(e))return!1;if(r.size)return!0;var c=u.get(t);return c.delete(n),!!c.size||u.delete(t)}})},function(e,t,n){var r=n(36),o=n(2),a=n(21),i=r.has,u=r.get,c=r.key,l=function(e,t,n){if(i(e,t,n))return u(e,t,n);var r=a(t);return null!==r?l(e,r,n):void 0};r.exp({getMetadata:function(e,t){return l(e,o(t),arguments.length<3?void 0:c(arguments[2]))}})},function(e,t,n){var r=n(154),o=n(163),a=n(36),i=n(2),u=n(21),c=a.keys,l=a.key,s=function(e,t){var n=c(e,t),a=u(e);if(null===a)return n;var i=s(a,t);return i.length?n.length?o(new r(n.concat(i))):i:n};a.exp({getMetadataKeys:function(e){return s(i(e),arguments.length<2?void 0:l(arguments[1]))}})},function(e,t,n){var r=n(36),o=n(2),a=r.get,i=r.key;r.exp({getOwnMetadata:function(e,t){return a(e,o(t),arguments.length<3?void 0:i(arguments[2]))}})},function(e,t,n){var r=n(36),o=n(2),a=r.keys,i=r.key;r.exp({getOwnMetadataKeys:function(e){return a(o(e),arguments.length<2?void 0:i(arguments[1]))}})},function(e,t,n){var r=n(36),o=n(2),a=n(21),i=r.has,u=r.key,c=function(e,t,n){if(i(e,t,n))return!0;var r=a(t);return null!==r&&c(e,r,n)};r.exp({hasMetadata:function(e,t){return c(e,o(t),arguments.length<3?void 0:u(arguments[2]))}})},function(e,t,n){var r=n(36),o=n(2),a=r.has,i=r.key;r.exp({hasOwnMetadata:function(e,t){return a(e,o(t),arguments.length<3?void 0:i(arguments[2]))}})},function(e,t,n){var r=n(36),o=n(2),a=n(14),i=r.key,u=r.set;r.exp({metadata:function(e,t){return function(n,r){u(e,t,(void 0!==r?o:a)(n),i(r))}}})},function(e,t,n){var r=n(0),o=n(110)(),a=n(3).process,i="process"==n(26)(a);r(r.G,{asap:function(e){var t=i&&a.domain;o(t?t.bind(e):e)}})},function(e,t,n){"use strict";var r=n(0),o=n(3),a=n(28),i=n(110)(),u=n(7)("observable"),c=n(14),l=n(2),s=n(47),f=n(49),p=n(16),d=n(48),h=d.RETURN,m=function(e){return null==e?void 0:c(e)},v=function(e){var t=e._c;t&&(e._c=void 0,t())},y=function(e){return void 0===e._o},b=function(e){y(e)||(e._o=void 0,v(e))},g=function(e,t){l(e),this._c=void 0,this._o=e,e=new w(this);try{var n=t(e),r=n;null!=n&&("function"==typeof n.unsubscribe?n=function(){r.unsubscribe()}:c(n),this._c=n)}catch(t){return void e.error(t)}y(this)&&v(this)};g.prototype=f({},{unsubscribe:function(){b(this)}});var w=function(e){this._s=e};w.prototype=f({},{next:function(e){var t=this._s;if(!y(t)){var n=t._o;try{var r=m(n.next);if(r)return r.call(n,e)}catch(e){try{b(t)}finally{throw e}}}},error:function(e){var t=this._s;if(y(t))throw e;var n=t._o;t._o=void 0;try{var r=m(n.error);if(!r)throw e;e=r.call(n,e)}catch(e){try{v(t)}finally{throw e}}return v(t),e},complete:function(e){var t=this._s;if(!y(t)){var n=t._o;t._o=void 0;try{var r=m(n.complete);e=r?r.call(n,e):void 0}catch(e){try{v(t)}finally{throw e}}return v(t),e}}});var E=function(e){s(this,E,"Observable","_f")._f=c(e)};f(E.prototype,{subscribe:function(e){return new g(e,this._f)},forEach:function(e){var t=this;return new(a.Promise||o.Promise)(function(n,r){c(e);var o=t.subscribe({next:function(t){try{return e(t)}catch(e){r(e),o.unsubscribe()}},error:r,complete:n})})}}),f(E,{from:function(e){var t="function"==typeof this?this:E,n=m(l(e)[u]);if(n){var r=l(n.call(e));return r.constructor===t?r:new t(function(e){return r.subscribe(e)})}return new t(function(t){var n=!1;return i(function(){if(!n){try{if(d(e,!1,function(e){if(t.next(e),n)return h})===h)return}catch(e){if(n)throw e;return void t.error(e)}t.complete()}}),function(){n=!0}})},of:function(){for(var e=0,t=arguments.length,n=new Array(t);e2,o=!!r&&i.call(arguments,2);return e(r?function(){("function"==typeof t?t:Function(t)).apply(this,o)}:t,n)}};o(o.G+o.B+o.F*u,{setTimeout:c(r.setTimeout),setInterval:c(r.setInterval)})},function(e,t,n){var r=n(0),o=n(109);r(r.G+r.B,{setImmediate:o.set,clearImmediate:o.clear})},function(e,t,n){for(var r=n(108),o=n(42),a=n(17),i=n(3),u=n(16),c=n(57),l=n(7),s=l("iterator"),f=l("toStringTag"),p=c.Array,d={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},h=o(d),m=0;m=0;--r){var o=this.tryEntries[r],a=o.completion;if("root"===o.tryLoc)return t("end");if(o.tryLoc<=this.prev){var i=b.call(o,"catchLoc"),u=b.call(o,"finallyLoc");if(i&&u){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&b.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),p(n),k}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;p(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:h(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=v),k}}}("object"==typeof t?t:"object"==typeof window?window:"object"==typeof self?self:this)}).call(t,n(62))},function(e,t,n){n(400),e.exports=n(28).RegExp.escape},function(e,t,n){var r=n(0),o=n(401)(/[\\^$*+?.()|[\]{}]/g,"\\$&");r(r.S,"RegExp",{escape:function(e){return o(e)}})},function(e,t){e.exports=function(e,t){var n=t===Object(t)?function(e){return t[e]}:t;return function(t){return String(t).replace(e,n)}}},function(e,t){!function(e){"use strict";function t(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function n(e){return"string"!=typeof e&&(e=String(e)),e}function r(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return y.iterable&&(t[Symbol.iterator]=function(){return t}),t}function o(e){this.map={},e instanceof o?e.forEach(function(e,t){this.append(t,e)},this):Array.isArray(e)?e.forEach(function(e){this.append(e[0],e[1])},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function a(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function i(e){return new Promise(function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}})}function u(e){var t=new FileReader,n=i(t);return t.readAsArrayBuffer(e),n}function c(e){var t=new FileReader,n=i(t);return t.readAsText(e),n}function l(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r-1?t:e}function d(e,t){t=t||{};var n=t.body;if(e instanceof d){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new o(e.headers)),this.method=e.method,this.mode=e.mode,n||null==e._bodyInit||(n=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new o(t.headers)),this.method=p(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&n)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(n)}function h(e){var t=new FormData;return e.trim().split("&").forEach(function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(o))}}),t}function m(e){var t=new o;return e.split(/\r?\n/).forEach(function(e){var n=e.split(":"),r=n.shift().trim();if(r){var o=n.join(":").trim();t.append(r,o)}}),t}function v(e,t){t||(t={}),this.type="default",this.status="status"in t?t.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new o(t.headers),this.url=t.url||"",this._initBody(e)}if(!e.fetch){var y={searchParams:"URLSearchParams"in e,iterable:"Symbol"in e&&"iterator"in Symbol,blob:"FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),formData:"FormData"in e,arrayBuffer:"ArrayBuffer"in e};if(y.arrayBuffer)var b=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],g=function(e){return e&&DataView.prototype.isPrototypeOf(e)},w=ArrayBuffer.isView||function(e){return e&&b.indexOf(Object.prototype.toString.call(e))>-1};o.prototype.append=function(e,r){e=t(e),r=n(r);var o=this.map[e];this.map[e]=o?o+","+r:r},o.prototype.delete=function(e){delete this.map[t(e)]},o.prototype.get=function(e){return e=t(e),this.has(e)?this.map[e]:null},o.prototype.has=function(e){return this.map.hasOwnProperty(t(e))},o.prototype.set=function(e,r){this.map[t(e)]=n(r)},o.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)},o.prototype.keys=function(){var e=[];return this.forEach(function(t,n){e.push(n)}),r(e)},o.prototype.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),r(e)},o.prototype.entries=function(){var e=[];return this.forEach(function(t,n){e.push([n,t])}),r(e)},y.iterable&&(o.prototype[Symbol.iterator]=o.prototype.entries);var E=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];d.prototype.clone=function(){return new d(this,{body:this._bodyInit})},f.call(d.prototype),f.call(v.prototype),v.prototype.clone=function(){return new v(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new o(this.headers),url:this.url})},v.error=function(){var e=new v(null,{status:0,statusText:""});return e.type="error",e};var _=[301,302,303,307,308];v.redirect=function(e,t){if(-1===_.indexOf(t))throw new RangeError("Invalid status code");return new v(null,{status:t,headers:{location:e}})},e.Headers=o,e.Request=d,e.Response=v,e.fetch=function(e,t){return new Promise(function(n,r){var o=new d(e,t),a=new XMLHttpRequest;a.onload=function(){var e={status:a.status,statusText:a.statusText,headers:m(a.getAllResponseHeaders()||"")};e.url="responseURL"in a?a.responseURL:e.headers.get("X-Request-URL");var t="response"in a?a.response:a.responseText;n(new v(t,e))},a.onerror=function(){r(new TypeError("Network request failed"))},a.ontimeout=function(){r(new TypeError("Network request failed"))},a.open(o.method,o.url,!0),"include"===o.credentials&&(a.withCredentials=!0),"responseType"in a&&y.blob&&(a.responseType="blob"),o.headers.forEach(function(e,t){a.setRequestHeader(t,e)}),a.send(void 0===o._bodyInit?null:o._bodyInit)})},e.fetch.polyfill=!0}}("undefined"!=typeof self?self:this)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var o=n(1),a=r(o),i=n(405),u=n(6),c=n(116),l=n(34),s=n(466),f=r(s),p=n(184),d=r(p),h=n(476),m=r(h),v=n(490),y=r(v),b=n(492),g=r(b),w=window.__PRELOADED_STATE__||null;delete window.__PRELOADED_STATE__;var E=(0,d.default)(),_=(0,c.applyMiddleware)(E),O=window.__REDUX_DEVTOOLS_EXTENSION__?(0,c.compose)(_,window.__REDUX_DEVTOOLS_EXTENSION__()):_,S=void 0;S=w?(0,c.createStore)(f.default,w,O):(0,c.createStore)(f.default,O),E.run(m.default),(0,i.hydrate)(a.default.createElement(u.Provider,{store:S},a.default.createElement(l.BrowserRouter,null,a.default.createElement(y.default,null,a.default.createElement(g.default,null)))),document.getElementById("react-app"))},function(e,t,n){"use strict";function r(e){for(var t=arguments.length-1,n="Minified React error #"+e+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant="+e,r=0;rM.length&&M.push(e)}function d(e,t,n,o){var a=typeof e;"undefined"!==a&&"boolean"!==a||(e=null);var i=!1;if(null===e)i=!0;else switch(a){case"string":case"number":i=!0;break;case"object":switch(e.$$typeof){case _:case O:case S:case T:i=!0}}if(i)return n(o,e,""===t?"."+h(e,0):t),1;if(i=0,t=""===t?".":t+":",Array.isArray(e))for(var u=0;uthis.eventPool.length&&this.eventPool.push(e)}function B(e){e.eventPool=[],e.getPooled=H,e.release=q}function G(e,t,n,r){return F.call(this,e,t,n,r)}function V(e,t,n,r){return F.call(this,e,t,n,r)}function W(e,t){switch(e){case"topKeyUp":return-1!==dr.indexOf(t.keyCode);case"topKeyDown":return 229!==t.keyCode;case"topKeyPress":case"topMouseDown":case"topBlur":return!0;default:return!1}}function z(e){return e=e.detail,"object"==typeof e&&"data"in e?e.data:null}function Y(e,t){switch(e){case"topCompositionEnd":return z(t);case"topKeyPress":return 32!==t.which?null:(Or=!0,Er);case"topTextInput":return e=t.data,e===Er&&Or?null:e;default:return null}}function K(e,t){if(Sr)return"topCompositionEnd"===e||!hr&&W(e,t)?(e=D(),sr._root=null,sr._startText=null,sr._fallbackText=null,Sr=!1,e):null;switch(e){case"topPaste":return null;case"topKeyPress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1Br.length&&Br.push(e)}}}function Re(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n["ms"+e]="MS"+t,n["O"+e]="o"+t.toLowerCase(),n}function Ie(e){if(Yr[e])return Yr[e];if(!zr[e])return e;var t,n=zr[e];for(t in n)if(n.hasOwnProperty(t)&&t in Kr)return Yr[e]=n[t];return""}function Me(e){return Object.prototype.hasOwnProperty.call(e,Jr)||(e[Jr]=Xr++,$r[e[Jr]]={}),$r[e[Jr]]}function Le(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function De(e,t){var n=Le(e);e=0;for(var r;n;){if(3===n.nodeType){if(r=e+n.textContent.length,e<=t&&r>=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Le(n)}}function Ue(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&"text"===e.type||"textarea"===t||"true"===e.contentEditable)}function Fe(e,t){if(oo||null==to||to!==Sn())return null;var n=to;return"selectionStart"in n&&Ue(n)?n={start:n.selectionStart,end:n.selectionEnd}:window.getSelection?(n=window.getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}):n=void 0,ro&&Tn(ro,n)?null:(ro=n,e=F.getPooled(eo.select,no,e,t),e.type="select",e.target=to,I(e),e)}function He(e,t,n,r){return F.call(this,e,t,n,r)}function qe(e,t,n,r){return F.call(this,e,t,n,r)}function Be(e,t,n,r){return F.call(this,e,t,n,r)}function Ge(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,32<=e||13===e?e:0}function Ve(e,t,n,r){return F.call(this,e,t,n,r)}function We(e,t,n,r){return F.call(this,e,t,n,r)}function ze(e,t,n,r){return F.call(this,e,t,n,r)}function Ye(e,t,n,r){return F.call(this,e,t,n,r)}function Ke(e,t,n,r){return F.call(this,e,t,n,r)}function Qe(e){0>po||(e.current=fo[po],fo[po]=null,po--)}function $e(e,t){po++,fo[po]=e.current,e.current=t}function Xe(e){return Ze(e)?vo:ho.current}function Je(e,t){var n=e.type.contextTypes;if(!n)return xn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function Ze(e){return 2===e.tag&&null!=e.type.childContextTypes}function et(e){Ze(e)&&(Qe(mo,e),Qe(ho,e))}function tt(e,t,n){null!=ho.cursor&&r("168"),$e(ho,t,e),$e(mo,n,e)}function nt(e,t){var n=e.stateNode,o=e.type.childContextTypes;if("function"!=typeof n.getChildContext)return t;n=n.getChildContext();for(var a in n)a in o||r("108",Ee(e)||"Unknown",a);return En({},t,n)}function rt(e){if(!Ze(e))return!1;var t=e.stateNode;return t=t&&t.__reactInternalMemoizedMergedChildContext||xn,vo=ho.current,$e(ho,t,e),$e(mo,mo.current,e),!0}function ot(e,t){var n=e.stateNode;if(n||r("169"),t){var o=nt(e,vo);n.__reactInternalMemoizedMergedChildContext=o,Qe(mo,e),Qe(ho,e),$e(ho,o,e)}else Qe(mo,e);$e(mo,t,e)}function at(e,t,n){this.tag=e,this.key=t,this.stateNode=this.type=null,this.sibling=this.child=this.return=null,this.index=0,this.memoizedState=this.updateQueue=this.memoizedProps=this.pendingProps=this.ref=null,this.internalContextTag=n,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.expirationTime=0,this.alternate=null}function it(e,t,n){var r=e.alternate;return null===r?(r=new at(e.tag,e.key,e.internalContextTag),r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.effectTag=0,r.nextEffect=null,r.firstEffect=null,r.lastEffect=null),r.expirationTime=n,r.pendingProps=t,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function ut(e,t,n){var o=void 0,a=e.type,i=e.key;return"function"==typeof a?(o=a.prototype&&a.prototype.isReactComponent?new at(2,i,t):new at(0,i,t),o.type=a,o.pendingProps=e.props):"string"==typeof a?(o=new at(5,i,t),o.type=a,o.pendingProps=e.props):"object"==typeof a&&null!==a&&"number"==typeof a.tag?(o=a,o.pendingProps=e.props):r("130",null==a?a:typeof a,""),o.expirationTime=n,o}function ct(e,t,n,r){return t=new at(10,r,t),t.pendingProps=e,t.expirationTime=n,t}function lt(e,t,n){return t=new at(6,null,t),t.pendingProps=e,t.expirationTime=n,t}function st(e,t,n){return t=new at(7,e.key,t),t.type=e.handler,t.pendingProps=e,t.expirationTime=n,t}function ft(e,t,n){return e=new at(9,null,t),e.expirationTime=n,e}function pt(e,t,n){return t=new at(4,e.key,t),t.pendingProps=e.children||[],t.expirationTime=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function dt(e){return function(t){try{return e(t)}catch(e){}}}function ht(e){if("undefined"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)return!0;try{var n=t.inject(e);yo=dt(function(e){return t.onCommitFiberRoot(n,e)}),bo=dt(function(e){return t.onCommitFiberUnmount(n,e)})}catch(e){}return!0}function mt(e){"function"==typeof yo&&yo(e)}function vt(e){"function"==typeof bo&&bo(e)}function yt(e){return{baseState:e,expirationTime:0,first:null,last:null,callbackList:null,hasForceUpdate:!1,isInitialized:!1}}function bt(e,t){null===e.last?e.first=e.last=t:(e.last.next=t,e.last=t),(0===e.expirationTime||e.expirationTime>t.expirationTime)&&(e.expirationTime=t.expirationTime)}function gt(e,t){var n=e.alternate,r=e.updateQueue;null===r&&(r=e.updateQueue=yt(null)),null!==n?null===(e=n.updateQueue)&&(e=n.updateQueue=yt(null)):e=null,e=e!==r?e:null,null===e?bt(r,t):null===r.last||null===e.last?(bt(r,t),bt(e,t)):(bt(r,t),e.last=t)}function wt(e,t,n,r){return e=e.partialState,"function"==typeof e?e.call(t,n,r):e}function Et(e,t,n,r,o,a){null!==e&&e.updateQueue===n&&(n=t.updateQueue={baseState:n.baseState,expirationTime:n.expirationTime,first:n.first,last:n.last,isInitialized:n.isInitialized,callbackList:null,hasForceUpdate:!1}),n.expirationTime=0,n.isInitialized?e=n.baseState:(e=n.baseState=t.memoizedState,n.isInitialized=!0);for(var i=!0,u=n.first,c=!1;null!==u;){var l=u.expirationTime;if(l>a){var s=n.expirationTime;(0===s||s>l)&&(n.expirationTime=l),c||(c=!0,n.baseState=e)}else c||(n.first=u.next,null===n.first&&(n.last=null)),u.isReplace?(e=wt(u,r,e,o),i=!0):(l=wt(u,r,e,o))&&(e=i?En({},e,l):En(e,l),i=!1),u.isForced&&(n.hasForceUpdate=!0),null!==u.callback&&(l=n.callbackList,null===l&&(l=n.callbackList=[]),l.push(u));u=u.next}return null!==n.callbackList?t.effectTag|=32:null!==n.first||n.hasForceUpdate||(t.updateQueue=null),c||(n.baseState=e),e}function _t(e,t){var n=e.callbackList;if(null!==n)for(e.callbackList=null,e=0;ep?(d=f,f=null):d=f.sibling;var y=m(r,f,u[p],c);if(null===y){null===f&&(f=d);break}e&&f&&null===y.alternate&&t(r,f),a=i(y,a,p),null===s?l=y:s.sibling=y,s=y,f=d}if(p===u.length)return n(r,f),l;if(null===f){for(;pd?(y=p,p=null):y=p.sibling;var g=m(a,p,b.value,l);if(null===g){p||(p=y);break}e&&p&&null===g.alternate&&t(a,p),u=i(g,u,d),null===f?s=g:f.sibling=g,f=g,p=y}if(b.done)return n(a,p),s;if(null===p){for(;!b.done;d++,b=c.next())null!==(b=h(a,b.value,l))&&(u=i(b,u,d),null===f?s=b:f.sibling=b,f=b);return s}for(p=o(a,p);!b.done;d++,b=c.next())null!==(b=v(p,a,d,b.value,l))&&(e&&null!==b.alternate&&p.delete(null===b.key?d:b.key),u=i(b,u,d),null===f?s=b:f.sibling=b,f=b);return e&&p.forEach(function(e){return t(a,e)}),s}return function(e,o,i,c){"object"==typeof i&&null!==i&&i.type===So&&null===i.key&&(i=i.props.children);var l="object"==typeof i&&null!==i;if(l)switch(i.$$typeof){case wo:e:{var s=i.key;for(l=o;null!==l;){if(l.key===s){if(10===l.tag?i.type===So:l.type===i.type){n(e,l.sibling),o=a(l,i.type===So?i.props.children:i.props,c),o.ref=Tt(l,i),o.return=e,e=o;break e}n(e,l);break}t(e,l),l=l.sibling}i.type===So?(o=ct(i.props.children,e.internalContextTag,c,i.key),o.return=e,e=o):(c=ut(i,e.internalContextTag,c),c.ref=Tt(o,i),c.return=e,e=c)}return u(e);case Eo:e:{for(l=i.key;null!==o;){if(o.key===l){if(7===o.tag){n(e,o.sibling),o=a(o,i,c),o.return=e,e=o;break e}n(e,o);break}t(e,o),o=o.sibling}o=st(i,e.internalContextTag,c),o.return=e,e=o}return u(e);case _o:e:{if(null!==o){if(9===o.tag){n(e,o.sibling),o=a(o,null,c),o.type=i.value,o.return=e,e=o;break e}n(e,o)}o=ft(i,e.internalContextTag,c),o.type=i.value,o.return=e,e=o}return u(e);case Oo:e:{for(l=i.key;null!==o;){if(o.key===l){if(4===o.tag&&o.stateNode.containerInfo===i.containerInfo&&o.stateNode.implementation===i.implementation){n(e,o.sibling),o=a(o,i.children||[],c),o.return=e,e=o;break e}n(e,o);break}t(e,o),o=o.sibling}o=pt(i,e.internalContextTag,c),o.return=e,e=o}return u(e)}if("string"==typeof i||"number"==typeof i)return i=""+i,null!==o&&6===o.tag?(n(e,o.sibling),o=a(o,i,c)):(n(e,o),o=lt(i,e.internalContextTag,c)),o.return=e,e=o,u(e);if(Co(i))return y(e,o,i,c);if(St(i))return b(e,o,i,c);if(l&&Ct(e,i),void 0===i)switch(e.tag){case 2:case 1:c=e.type,r("152",c.displayName||c.name||"Component")}return n(e,o)}}function xt(e,t,n,o,a){function i(e,t,n){var r=t.expirationTime;t.child=null===e?xo(t,null,n,r):Po(t,e.child,n,r)}function u(e,t){var n=t.ref;null===n||e&&e.ref===n||(t.effectTag|=128)}function c(e,t,n,r){if(u(e,t),!n)return r&&ot(t,!1),s(e,t);n=t.stateNode,qr.current=t;var o=n.render();return t.effectTag|=1,i(e,t,o),t.memoizedState=n.state,t.memoizedProps=n.props,r&&ot(t,!0),t.child}function l(e){var t=e.stateNode;t.pendingContext?tt(e,t.pendingContext,t.pendingContext!==t.context):t.context&&tt(e,t.context,!1),v(e,t.containerInfo)}function s(e,t){if(null!==e&&t.child!==e.child&&r("153"),null!==t.child){e=t.child;var n=it(e,e.pendingProps,e.expirationTime);for(t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,n=n.sibling=it(e,e.pendingProps,e.expirationTime),n.return=t;n.sibling=null}return t.child}function f(e,t){switch(t.tag){case 3:l(t);break;case 2:rt(t);break;case 4:v(t,t.stateNode.containerInfo)}return null}var p=e.shouldSetTextContent,d=e.useSyncScheduling,h=e.shouldDeprioritizeSubtree,m=t.pushHostContext,v=t.pushHostContainer,y=n.enterHydrationState,b=n.resetHydrationState,g=n.tryToClaimNextHydratableInstance;e=Ot(o,a,function(e,t){e.memoizedProps=t},function(e,t){e.memoizedState=t});var w=e.adoptClassInstance,E=e.constructClassInstance,_=e.mountClassInstance,O=e.updateClassInstance;return{beginWork:function(e,t,n){if(0===t.expirationTime||t.expirationTime>n)return f(e,t);switch(t.tag){case 0:null!==e&&r("155");var o=t.type,a=t.pendingProps,S=Xe(t);return S=Je(t,S),o=o(a,S),t.effectTag|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render?(t.tag=2,a=rt(t),w(t,o),_(t,n),t=c(e,t,!0,a)):(t.tag=1,i(e,t,o),t.memoizedProps=a,t=t.child),t;case 1:e:{if(a=t.type,n=t.pendingProps,o=t.memoizedProps,mo.current)null===n&&(n=o);else if(null===n||o===n){t=s(e,t);break e}o=Xe(t),o=Je(t,o),a=a(n,o),t.effectTag|=1,i(e,t,a),t.memoizedProps=n,t=t.child}return t;case 2:return a=rt(t),o=void 0,null===e?t.stateNode?r("153"):(E(t,t.pendingProps),_(t,n),o=!0):o=O(e,t,n),c(e,t,o,a);case 3:return l(t),a=t.updateQueue,null!==a?(o=t.memoizedState,a=Et(e,t,a,null,null,n),o===a?(b(),t=s(e,t)):(o=a.element,S=t.stateNode,(null===e||null===e.child)&&S.hydrate&&y(t)?(t.effectTag|=2,t.child=xo(t,null,o,n)):(b(),i(e,t,o)),t.memoizedState=a,t=t.child)):(b(),t=s(e,t)),t;case 5:m(t),null===e&&g(t),a=t.type;var T=t.memoizedProps;return o=t.pendingProps,null===o&&null===(o=T)&&r("154"),S=null!==e?e.memoizedProps:null,mo.current||null!==o&&T!==o?(T=o.children,p(a,o)?T=null:S&&p(a,S)&&(t.effectTag|=16),u(e,t),2147483647!==n&&!d&&h(a,o)?(t.expirationTime=2147483647,t=null):(i(e,t,T),t.memoizedProps=o,t=t.child)):t=s(e,t),t;case 6:return null===e&&g(t),e=t.pendingProps,null===e&&(e=t.memoizedProps),t.memoizedProps=e,null;case 8:t.tag=7;case 7:return a=t.pendingProps,mo.current?null===a&&null===(a=e&&e.memoizedProps)&&r("154"):null!==a&&t.memoizedProps!==a||(a=t.memoizedProps),o=a.children,t.stateNode=null===e?xo(t,t.stateNode,o,n):Po(t,t.stateNode,o,n),t.memoizedProps=a,t.stateNode;case 9:return null;case 4:e:{if(v(t,t.stateNode.containerInfo),a=t.pendingProps,mo.current)null===a&&null==(a=e&&e.memoizedProps)&&r("154");else if(null===a||t.memoizedProps===a){t=s(e,t);break e}null===e?t.child=Po(t,null,a,n):i(e,t,a),t.memoizedProps=a,t=t.child}return t;case 10:e:{if(n=t.pendingProps,mo.current)null===n&&(n=t.memoizedProps);else if(null===n||t.memoizedProps===n){t=s(e,t);break e}i(e,t,n),t.memoizedProps=n,t=t.child}return t;default:r("156")}},beginFailedWork:function(e,t,n){switch(t.tag){case 2:rt(t);break;case 3:l(t);break;default:r("157")}return t.effectTag|=64,null===e?t.child=null:t.child!==e.child&&(t.child=e.child),0===t.expirationTime||t.expirationTime>n?f(e,t):(t.firstEffect=null,t.lastEffect=null,t.child=null===e?xo(t,null,null,n):Po(t,e.child,null,n),2===t.tag&&(e=t.stateNode,t.memoizedProps=e.props,t.memoizedState=e.state),t.child)}}}function kt(e,t,n){function o(e){e.effectTag|=4}var a=e.createInstance,i=e.createTextInstance,u=e.appendInitialChild,c=e.finalizeInitialChildren,l=e.prepareUpdate,s=e.persistence,f=t.getRootHostContainer,p=t.popHostContext,d=t.getHostContext,h=t.popHostContainer,m=n.prepareToHydrateHostInstance,v=n.prepareToHydrateHostTextInstance,y=n.popHydrationState,b=void 0,g=void 0,w=void 0;return e.mutation?(b=function(){},g=function(e,t,n){(t.updateQueue=n)&&o(t)},w=function(e,t,n,r){n!==r&&o(t)}):r(s?"235":"236"),{completeWork:function(e,t,n){var s=t.pendingProps;switch(null===s?s=t.memoizedProps:2147483647===t.expirationTime&&2147483647!==n||(t.pendingProps=null),t.tag){case 1:return null;case 2:return et(t),null;case 3:return h(t),Qe(mo,t),Qe(ho,t),s=t.stateNode,s.pendingContext&&(s.context=s.pendingContext,s.pendingContext=null),null!==e&&null!==e.child||(y(t),t.effectTag&=-3),b(t),null;case 5:p(t),n=f();var E=t.type;if(null!==e&&null!=t.stateNode){var _=e.memoizedProps,O=t.stateNode,S=d();O=l(O,E,_,s,n,S),g(e,t,O,E,_,s,n),e.ref!==t.ref&&(t.effectTag|=128)}else{if(!s)return null===t.stateNode&&r("166"),null;if(e=d(),y(t))m(t,n,e)&&o(t);else{e=a(E,s,n,e,t);e:for(_=t.child;null!==_;){if(5===_.tag||6===_.tag)u(e,_.stateNode);else if(4!==_.tag&&null!==_.child){_.child.return=_,_=_.child;continue}if(_===t)break;for(;null===_.sibling;){if(null===_.return||_.return===t)break e;_=_.return}_.sibling.return=_.return,_=_.sibling}c(e,E,s,n)&&o(t),t.stateNode=e}null!==t.ref&&(t.effectTag|=128)}return null;case 6:if(e&&null!=t.stateNode)w(e,t,e.memoizedProps,s);else{if("string"!=typeof s)return null===t.stateNode&&r("166"),null;e=f(),n=d(),y(t)?v(t)&&o(t):t.stateNode=i(s,e,n,t)}return null;case 7:(s=t.memoizedProps)||r("165"),t.tag=8,E=[];e:for((_=t.stateNode)&&(_.return=t);null!==_;){if(5===_.tag||6===_.tag||4===_.tag)r("247");else if(9===_.tag)E.push(_.type);else if(null!==_.child){_.child.return=_,_=_.child;continue}for(;null===_.sibling;){if(null===_.return||_.return===t)break e;_=_.return}_.sibling.return=_.return,_=_.sibling}return _=s.handler,s=_(s.props,E),t.child=Po(t,null!==e?e.child:null,s,n),t.child;case 8:return t.tag=7,null;case 9:case 10:return null;case 4:return h(t),b(t),null;case 0:r("167");default:r("156")}}}}function At(e,t){function n(e){var n=e.ref;if(null!==n)try{n(null)}catch(n){t(e,n)}}function o(e){switch("function"==typeof vt&&vt(e),e.tag){case 2:n(e);var r=e.stateNode;if("function"==typeof r.componentWillUnmount)try{r.props=e.memoizedProps,r.state=e.memoizedState,r.componentWillUnmount()}catch(n){t(e,n)}break;case 5:n(e);break;case 7:a(e.stateNode);break;case 4:l&&u(e)}}function a(e){for(var t=e;;)if(o(t),null===t.child||l&&4===t.tag){if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return;t=t.return}t.sibling.return=t.return,t=t.sibling}else t.child.return=t,t=t.child}function i(e){return 5===e.tag||3===e.tag||4===e.tag}function u(e){for(var t=e,n=!1,i=void 0,u=void 0;;){if(!n){n=t.return;e:for(;;){switch(null===n&&r("160"),n.tag){case 5:i=n.stateNode,u=!1;break e;case 3:case 4:i=n.stateNode.containerInfo,u=!0;break e}n=n.return}n=!0}if(5===t.tag||6===t.tag)a(t),u?g(i,t.stateNode):b(i,t.stateNode);else if(4===t.tag?i=t.stateNode.containerInfo:o(t),null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return;t=t.return,4===t.tag&&(n=!1)}t.sibling.return=t.return,t=t.sibling}}var c=e.getPublicInstance,l=e.mutation;e=e.persistence,l||r(e?"235":"236");var s=l.commitMount,f=l.commitUpdate,p=l.resetTextContent,d=l.commitTextUpdate,h=l.appendChild,m=l.appendChildToContainer,v=l.insertBefore,y=l.insertInContainerBefore,b=l.removeChild,g=l.removeChildFromContainer;return{commitResetTextContent:function(e){p(e.stateNode)},commitPlacement:function(e){e:{for(var t=e.return;null!==t;){if(i(t)){var n=t;break e}t=t.return}r("160"),n=void 0}var o=t=void 0;switch(n.tag){case 5:t=n.stateNode,o=!1;break;case 3:case 4:t=n.stateNode.containerInfo,o=!0;break;default:r("161")}16&n.effectTag&&(p(t),n.effectTag&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||i(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag;){if(2&n.effectTag)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.effectTag)){n=n.stateNode;break e}}for(var a=e;;){if(5===a.tag||6===a.tag)n?o?y(t,a.stateNode,n):v(t,a.stateNode,n):o?m(t,a.stateNode):h(t,a.stateNode);else if(4!==a.tag&&null!==a.child){a.child.return=a,a=a.child;continue}if(a===e)break;for(;null===a.sibling;){if(null===a.return||a.return===e)return;a=a.return}a.sibling.return=a.return,a=a.sibling}},commitDeletion:function(e){u(e),e.return=null,e.child=null,e.alternate&&(e.alternate.child=null,e.alternate.return=null)},commitWork:function(e,t){switch(t.tag){case 2:break;case 5:var n=t.stateNode;if(null!=n){var o=t.memoizedProps;e=null!==e?e.memoizedProps:o;var a=t.type,i=t.updateQueue;t.updateQueue=null,null!==i&&f(n,i,a,e,o,t)}break;case 6:null===t.stateNode&&r("162"),n=t.memoizedProps,d(t.stateNode,null!==e?e.memoizedProps:n,n);break;case 3:break;default:r("163")}},commitLifeCycles:function(e,t){switch(t.tag){case 2:var n=t.stateNode;if(4&t.effectTag)if(null===e)n.props=t.memoizedProps,n.state=t.memoizedState,n.componentDidMount();else{var o=e.memoizedProps;e=e.memoizedState,n.props=t.memoizedProps,n.state=t.memoizedState,n.componentDidUpdate(o,e)}t=t.updateQueue,null!==t&&_t(t,n);break;case 3:n=t.updateQueue,null!==n&&_t(n,null!==t.child?t.child.stateNode:null);break;case 5:n=t.stateNode,null===e&&4&t.effectTag&&s(n,t.type,t.memoizedProps,t);break;case 6:case 4:break;default:r("163")}},commitAttachRef:function(e){var t=e.ref;if(null!==t){var n=e.stateNode;switch(e.tag){case 5:t(c(n));break;default:t(n)}}},commitDetachRef:function(e){null!==(e=e.ref)&&e(null)}}}function jt(e){function t(e){return e===ko&&r("174"),e}var n=e.getChildHostContext,o=e.getRootHostContext,a={current:ko},i={current:ko},u={current:ko};return{getHostContext:function(){return t(a.current)},getRootHostContainer:function(){return t(u.current)},popHostContainer:function(e){Qe(a,e),Qe(i,e),Qe(u,e)},popHostContext:function(e){i.current===e&&(Qe(a,e),Qe(i,e))},pushHostContainer:function(e,t){$e(u,t,e),t=o(t),$e(i,e,e),$e(a,t,e)},pushHostContext:function(e){var r=t(u.current),o=t(a.current);r=n(o,e.type,r),o!==r&&($e(i,e,e),$e(a,r,e))},resetHostContainer:function(){a.current=ko,u.current=ko}}}function Nt(e){function t(e,t){var n=new at(5,null,0);n.type="DELETED",n.stateNode=t,n.return=e,n.effectTag=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function n(e,t){switch(e.tag){case 5:return null!==(t=i(t,e.type,e.pendingProps))&&(e.stateNode=t,!0);case 6:return null!==(t=u(t,e.pendingProps))&&(e.stateNode=t,!0);default:return!1}}function o(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag;)e=e.return;p=e}var a=e.shouldSetTextContent;if(!(e=e.hydration))return{enterHydrationState:function(){return!1},resetHydrationState:function(){},tryToClaimNextHydratableInstance:function(){},prepareToHydrateHostInstance:function(){r("175")},prepareToHydrateHostTextInstance:function(){r("176")},popHydrationState:function(){return!1}};var i=e.canHydrateInstance,u=e.canHydrateTextInstance,c=e.getNextHydratableSibling,l=e.getFirstHydratableChild,s=e.hydrateInstance,f=e.hydrateTextInstance,p=null,d=null,h=!1;return{enterHydrationState:function(e){return d=l(e.stateNode.containerInfo),p=e,h=!0},resetHydrationState:function(){d=p=null,h=!1},tryToClaimNextHydratableInstance:function(e){if(h){var r=d;if(r){if(!n(e,r)){if(!(r=c(r))||!n(e,r))return e.effectTag|=2,h=!1,void(p=e);t(p,d)}p=e,d=l(r)}else e.effectTag|=2,h=!1,p=e}},prepareToHydrateHostInstance:function(e,t,n){return t=s(e.stateNode,e.type,e.memoizedProps,t,n,e),e.updateQueue=t,null!==t},prepareToHydrateHostTextInstance:function(e){return f(e.stateNode,e.memoizedProps,e)},popHydrationState:function(e){if(e!==p)return!1;if(!h)return o(e),h=!0,!1;var n=e.type;if(5!==e.tag||"head"!==n&&"body"!==n&&!a(n,e.memoizedProps))for(n=d;n;)t(e,n),n=c(n);return o(e),d=p?c(e.stateNode):null,!0}}}function Rt(e){function t(e){ae=Q=!0;var t=e.stateNode;if(t.current===e&&r("177"),t.isReadyForCommit=!1,qr.current=null,1i.expirationTime)&&(a=i.expirationTime),i=i.sibling;o.expirationTime=a}if(null!==t)return t;if(null!==n&&(null===n.firstEffect&&(n.firstEffect=e.firstEffect),null!==e.lastEffect&&(null!==n.lastEffect&&(n.lastEffect.nextEffect=e.firstEffect),n.lastEffect=e.lastEffect),1e))if(J<=Y)for(;null!==$;)$=l($)?a($):o($);else for(;null!==$&&!_();)$=l($)?a($):o($)}else if(!(0===J||J>e))if(J<=Y)for(;null!==$;)$=o($);else for(;null!==$&&!_();)$=o($)}function u(e,t){if(Q&&r("243"),Q=!0,e.isReadyForCommit=!1,e!==X||t!==J||null===$){for(;-1t)&&(e.expirationTime=t),null!==e.alternate&&(0===e.alternate.expirationTime||e.alternate.expirationTime>t)&&(e.alternate.expirationTime=t),null===e.return){if(3!==e.tag)break;var n=e.stateNode;!Q&&n===X&&twe&&r("185"),null===o.nextScheduledRoot)o.remainingExpirationTime=a,null===ce?(ue=ce=o,o.nextScheduledRoot=o):(ce=ce.nextScheduledRoot=o,ce.nextScheduledRoot=ue);else{var i=o.remainingExpirationTime;(0===i||ale)return;B(se)}var t=H()-z;le=e,se=q(g,{timeout:10*(e-2)-t})}function b(){var e=0,t=null;if(null!==ce)for(var n=ce,o=ue;null!==o;){var a=o.remainingExpirationTime;if(0===a){if((null===n||null===ce)&&r("244"),o===o.nextScheduledRoot){ue=ce=o.nextScheduledRoot=null;break}if(o===ue)ue=a=o.nextScheduledRoot,ce.nextScheduledRoot=a,o.nextScheduledRoot=null;else{if(o===ce){ce=n,ce.nextScheduledRoot=ue,o.nextScheduledRoot=null;break}n.nextScheduledRoot=o.nextScheduledRoot,o.nextScheduledRoot=null}o=n.nextScheduledRoot}else{if((0===e||aOe)&&(he=!0)}function O(e){null===pe&&r("246"),pe.remainingExpirationTime=0,me||(me=!0,ve=e)}var S=jt(e),T=Nt(e),C=S.popHostContainer,P=S.popHostContext,x=S.resetHostContainer,k=xt(e,S,T,d,p),A=k.beginWork,j=k.beginFailedWork,N=kt(e,S,T).completeWork;S=At(e,c);var R=S.commitResetTextContent,I=S.commitPlacement,M=S.commitDeletion,L=S.commitWork,D=S.commitLifeCycles,U=S.commitAttachRef,F=S.commitDetachRef,H=e.now,q=e.scheduleDeferredCallback,B=e.cancelDeferredCallback,G=e.useSyncScheduling,V=e.prepareForCommit,W=e.resetAfterCommit,z=H(),Y=2,K=0,Q=!1,$=null,X=null,J=0,Z=null,ee=null,te=null,ne=null,re=null,oe=!1,ae=!1,ie=!1,ue=null,ce=null,le=0,se=-1,fe=!1,pe=null,de=0,he=!1,me=!1,ve=null,ye=null,be=!1,ge=!1,we=1e3,_e=0,Oe=1;return{computeAsyncExpiration:f,computeExpirationForFiber:p,scheduleWork:d,batchedUpdates:function(e,t){var n=be;be=!0;try{return e(t)}finally{(be=n)||fe||w(1,null)}},unbatchedUpdates:function(e){if(be&&!ge){ge=!0;try{return e()}finally{ge=!1}}return e()},flushSync:function(e){var t=be;be=!0;try{e:{var n=K;K=1;try{var o=e();break e}finally{K=n}o=void 0}return o}finally{be=t,fe&&r("187"),w(1,null)}},deferredUpdates:function(e){var t=K;K=f();try{return e()}finally{K=t}}}}function It(e){function t(e){return e=Ce(e),null===e?null:e.stateNode}var n=e.getPublicInstance;e=Rt(e);var o=e.computeAsyncExpiration,a=e.computeExpirationForFiber,i=e.scheduleWork;return{createContainer:function(e,t){var n=new at(3,null,0);return e={current:n,containerInfo:e,pendingChildren:null,remainingExpirationTime:0,isReadyForCommit:!1,finishedWork:null,context:null,pendingContext:null,hydrate:t,nextScheduledRoot:null},n.stateNode=e},updateContainer:function(e,t,n,u){var c=t.current;if(n){n=n._reactInternalFiber;var l;e:{for(2===_e(n)&&2===n.tag||r("170"),l=n;3!==l.tag;){if(Ze(l)){l=l.stateNode.__reactInternalMemoizedMergedChildContext;break e}(l=l.return)||r("171")}l=l.stateNode.context}n=Ze(n)?nt(n,l):l}else n=xn;null===t.context?t.context=n:t.pendingContext=n,t=u,t=void 0===t?null:t,u=null!=e&&null!=e.type&&null!=e.type.prototype&&!0===e.type.prototype.unstable_isAsyncReactComponent?o():a(c),gt(c,{expirationTime:u,partialState:{element:e},callback:t,isReplace:!1,isForced:!1,nextCallback:null,next:null}),i(c,u)},batchedUpdates:e.batchedUpdates,unbatchedUpdates:e.unbatchedUpdates,deferredUpdates:e.deferredUpdates,flushSync:e.flushSync,getPublicRootInstance:function(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return n(e.child.stateNode);default:return e.child.stateNode}},findHostInstance:t,findHostInstanceWithNoPortals:function(e){return e=Pe(e),null===e?null:e.stateNode},injectIntoDevTools:function(e){var n=e.findFiberByHostInstance;return ht(En({},e,{findHostInstanceByFiber:function(e){return t(e)},findFiberByHostInstance:function(e){return n?n(e):null}}))}}}function Mt(e,t,n){var r=3n||r.hasOverloadedBooleanValue&&!1===n?Ft(e,t):r.mustUseProperty?e[r.propertyName]=n:(t=r.attributeName,(o=r.attributeNamespace)?e.setAttributeNS(o,t,""+n):r.hasBooleanValue||r.hasOverloadedBooleanValue&&!0===n?e.setAttribute(t,""):e.setAttribute(t,""+n))}else Ut(e,t,a(t,n)?n:null)}function Ut(e,t,n){Lt(t)&&(null==n?e.removeAttribute(t):e.setAttribute(t,""+n))}function Ft(e,t){var n=i(t);n?(t=n.mutationMethod)?t(e,void 0):n.mustUseProperty?e[n.propertyName]=!n.hasBooleanValue&&"":e.removeAttribute(n.attributeName):e.removeAttribute(t)}function Ht(e,t){var n=t.value,r=t.checked;return En({type:void 0,step:void 0,min:void 0,max:void 0},t,{defaultChecked:void 0,defaultValue:void 0,value:null!=n?n:e._wrapperState.initialValue,checked:null!=r?r:e._wrapperState.initialChecked})}function qt(e,t){var n=t.defaultValue;e._wrapperState={initialChecked:null!=t.checked?t.checked:t.defaultChecked,initialValue:null!=t.value?t.value:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function Bt(e,t){null!=(t=t.checked)&&Dt(e,"checked",t)}function Gt(e,t){Bt(e,t);var n=t.value;null!=n?0===n&&""===e.value?e.value="0":"number"===t.type?(t=parseFloat(e.value)||0,(n!=t||n==t&&e.value!=n)&&(e.value=""+n)):e.value!==""+n&&(e.value=""+n):(null==t.value&&null!=t.defaultValue&&e.defaultValue!==""+t.defaultValue&&(e.defaultValue=""+t.defaultValue),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked))}function Vt(e,t){switch(t.type){case"submit":case"reset":break;case"color":case"date":case"datetime":case"datetime-local":case"month":case"time":case"week":e.value="",e.value=e.defaultValue;break;default:e.value=e.value}t=e.name,""!==t&&(e.name=""),e.defaultChecked=!e.defaultChecked,e.defaultChecked=!e.defaultChecked,""!==t&&(e.name=t)}function Wt(e){var t="";return gn.Children.forEach(e,function(e){null==e||"string"!=typeof e&&"number"!=typeof e||(t+=e)}),t}function zt(e,t){return e=En({children:void 0},t),(t=Wt(t.children))&&(e.children=t),e}function Yt(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o=t.length||r("93"),t=t[0]),n=""+t),null==n&&(n="")),e._wrapperState={initialValue:""+n}}function Xt(e,t){var n=t.value;null!=n&&(n=""+n,n!==e.value&&(e.value=n),null==t.defaultValue&&(e.defaultValue=n)),null!=t.defaultValue&&(e.defaultValue=t.defaultValue)}function Jt(e){var t=e.textContent;t===e._wrapperState.initialValue&&(e.value=t)}function Zt(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function en(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?Zt(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}function tn(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}function nn(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=n,a=t[n];o=null==a||"boolean"==typeof a||""===a?"":r||"number"!=typeof a||0===a||Zo.hasOwnProperty(o)&&Zo[o]?(""+a).trim():a+"px","float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}function rn(e,t,n){t&&(ta[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML)&&r("137",e,n()),null!=t.dangerouslySetInnerHTML&&(null!=t.children&&r("60"),"object"==typeof t.dangerouslySetInnerHTML&&"__html"in t.dangerouslySetInnerHTML||r("61")),null!=t.style&&"object"!=typeof t.style&&r("62",n()))}function on(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function an(e,t){e=9===e.nodeType||11===e.nodeType?e:e.ownerDocument;var n=Me(e);t=$n[t];for(var r=0;r<\/script>",e=e.removeChild(e.firstChild)):e="string"==typeof t.is?n.createElement(e,{is:t.is}):n.createElement(e):e=n.createElementNS(r,e),e}function cn(e,t){return(9===t.nodeType?t:t.ownerDocument).createTextNode(e)}function ln(e,t,n,r){var o=on(t,n);switch(t){case"iframe":case"object":Ae("topLoad","load",e);var a=n;break;case"video":case"audio":for(a in oa)oa.hasOwnProperty(a)&&Ae(a,oa[a],e);a=n;break;case"source":Ae("topError","error",e),a=n;break;case"img":case"image":Ae("topError","error",e),Ae("topLoad","load",e),a=n;break;case"form":Ae("topReset","reset",e),Ae("topSubmit","submit",e),a=n;break;case"details":Ae("topToggle","toggle",e),a=n;break;case"input":qt(e,n),a=Ht(e,n),Ae("topInvalid","invalid",e),an(r,"onChange");break;case"option":a=zt(e,n);break;case"select":Kt(e,n),a=En({},n,{value:void 0}),Ae("topInvalid","invalid",e),an(r,"onChange");break;case"textarea":$t(e,n),a=Qt(e,n),Ae("topInvalid","invalid",e),an(r,"onChange");break;default:a=n}rn(t,a,ra);var i,u=a;for(i in u)if(u.hasOwnProperty(i)){var c=u[i];"style"===i?nn(e,c,ra):"dangerouslySetInnerHTML"===i?null!=(c=c?c.__html:void 0)&&Jo(e,c):"children"===i?"string"==typeof c?("textarea"!==t||""!==c)&&tn(e,c):"number"==typeof c&&tn(e,""+c):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(Qn.hasOwnProperty(i)?null!=c&&an(r,i):o?Ut(e,i,c):null!=c&&Dt(e,i,c))}switch(t){case"input":ae(e),Vt(e,n);break;case"textarea":ae(e),Jt(e,n);break;case"option":null!=n.value&&e.setAttribute("value",n.value);break;case"select":e.multiple=!!n.multiple,t=n.value,null!=t?Yt(e,!!n.multiple,t,!1):null!=n.defaultValue&&Yt(e,!!n.multiple,n.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=_n)}}function sn(e,t,n,r,o){var a=null;switch(t){case"input":n=Ht(e,n),r=Ht(e,r),a=[];break;case"option":n=zt(e,n),r=zt(e,r),a=[];break;case"select":n=En({},n,{value:void 0}),r=En({},r,{value:void 0}),a=[];break;case"textarea":n=Qt(e,n),r=Qt(e,r),a=[];break;default:"function"!=typeof n.onClick&&"function"==typeof r.onClick&&(e.onclick=_n)}rn(t,r,ra);var i,u;e=null;for(i in n)if(!r.hasOwnProperty(i)&&n.hasOwnProperty(i)&&null!=n[i])if("style"===i)for(u in t=n[i])t.hasOwnProperty(u)&&(e||(e={}),e[u]="");else"dangerouslySetInnerHTML"!==i&&"children"!==i&&"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(Qn.hasOwnProperty(i)?a||(a=[]):(a=a||[]).push(i,null));for(i in r){var c=r[i];if(t=null!=n?n[i]:void 0,r.hasOwnProperty(i)&&c!==t&&(null!=c||null!=t))if("style"===i)if(t){for(u in t)!t.hasOwnProperty(u)||c&&c.hasOwnProperty(u)||(e||(e={}),e[u]="");for(u in c)c.hasOwnProperty(u)&&t[u]!==c[u]&&(e||(e={}),e[u]=c[u])}else e||(a||(a=[]),a.push(i,e)),e=c;else"dangerouslySetInnerHTML"===i?(c=c?c.__html:void 0,t=t?t.__html:void 0,null!=c&&t!==c&&(a=a||[]).push(i,""+c)):"children"===i?t===c||"string"!=typeof c&&"number"!=typeof c||(a=a||[]).push(i,""+c):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&(Qn.hasOwnProperty(i)?(null!=c&&an(o,i),a||t===c||(a=[])):(a=a||[]).push(i,c))}return e&&(a=a||[]).push("style",e),a}function fn(e,t,n,r,o){"input"===n&&"radio"===o.type&&null!=o.name&&Bt(e,o),on(n,r),r=on(n,o);for(var a=0;a=c.hasBooleanValue+c.hasNumericValue+c.hasOverloadedBooleanValue||r("50",u),i.hasOwnProperty(u)&&(c.attributeName=i[u]),a.hasOwnProperty(u)&&(c.attributeNamespace=a[u]),e.hasOwnProperty(u)&&(c.mutationMethod=e[u]),jn[u]=c}}},jn={},Nn=An,Rn=Nn.MUST_USE_PROPERTY,In=Nn.HAS_BOOLEAN_VALUE,Mn=Nn.HAS_NUMERIC_VALUE,Ln=Nn.HAS_POSITIVE_NUMERIC_VALUE,Dn=Nn.HAS_OVERLOADED_BOOLEAN_VALUE,Un=Nn.HAS_STRING_BOOLEAN_VALUE,Fn={Properties:{allowFullScreen:In,async:In,autoFocus:In,autoPlay:In,capture:Dn,checked:Rn|In,cols:Ln,contentEditable:Un,controls:In,default:In,defer:In,disabled:In,download:Dn,draggable:Un,formNoValidate:In,hidden:In,loop:In,multiple:Rn|In,muted:Rn|In,noValidate:In,open:In,playsInline:In,readOnly:In,required:In,reversed:In,rows:Ln,rowSpan:Mn,scoped:In,seamless:In,selected:Rn|In,size:Ln,start:Mn,span:Ln,spellCheck:Un,style:0,tabIndex:0,itemScope:In,acceptCharset:0,className:0,htmlFor:0,httpEquiv:0,value:Un},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMMutationMethods:{value:function(e,t){if(null==t)return e.removeAttribute("value");"number"!==e.type||!1===e.hasAttribute("value")?e.setAttribute("value",""+t):e.validity&&!e.validity.badInput&&e.ownerDocument.activeElement!==e&&e.setAttribute("value",""+t)}}},Hn=Nn.HAS_STRING_BOOLEAN_VALUE,qn={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"},Bn={Properties:{autoReverse:Hn,externalResourcesRequired:Hn,preserveAlpha:Hn},DOMAttributeNames:{autoReverse:"autoReverse",externalResourcesRequired:"externalResourcesRequired",preserveAlpha:"preserveAlpha"},DOMAttributeNamespaces:{xlinkActuate:qn.xlink,xlinkArcrole:qn.xlink,xlinkHref:qn.xlink,xlinkRole:qn.xlink,xlinkShow:qn.xlink,xlinkTitle:qn.xlink,xlinkType:qn.xlink,xmlBase:qn.xml,xmlLang:qn.xml,xmlSpace:qn.xml}},Gn=/[\-\:]([a-z])/g;"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode x-height xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type xml:base xmlns:xlink xml:lang xml:space".split(" ").forEach(function(e){var t=e.replace(Gn,u);Bn.Properties[t]=0,Bn.DOMAttributeNames[t]=e}),Nn.injectDOMPropertyConfig(Fn),Nn.injectDOMPropertyConfig(Bn);var Vn={_caughtError:null,_hasCaughtError:!1,_rethrowError:null,_hasRethrowError:!1,injection:{injectErrorUtils:function(e){"function"!=typeof e.invokeGuardedCallback&&r("197"),c=e.invokeGuardedCallback}},invokeGuardedCallback:function(e,t,n,r,o,a,i,u,l){c.apply(Vn,arguments)},invokeGuardedCallbackAndCatchFirstError:function(e,t,n,r,o,a,i,u,c){if(Vn.invokeGuardedCallback.apply(this,arguments),Vn.hasCaughtError()){var l=Vn.clearCaughtError();Vn._hasRethrowError||(Vn._hasRethrowError=!0,Vn._rethrowError=l)}},rethrowCaughtError:function(){return l.apply(Vn,arguments)},hasCaughtError:function(){return Vn._hasCaughtError},clearCaughtError:function(){if(Vn._hasCaughtError){var e=Vn._caughtError;return Vn._caughtError=null,Vn._hasCaughtError=!1,e}r("198")}},Wn=null,zn={},Yn=[],Kn={},Qn={},$n={},Xn=Object.freeze({plugins:Yn,eventNameDispatchConfigs:Kn,registrationNameModules:Qn,registrationNameDependencies:$n,possibleRegistrationNames:null,injectEventPluginOrder:p,injectEventPluginsByName:d}),Jn=null,Zn=null,er=null,tr=null,nr={injectEventPluginOrder:p,injectEventPluginsByName:d},rr=Object.freeze({injection:nr,getListener:w,extractEvents:E,enqueueEvents:_,processEventQueue:O}),or=Math.random().toString(36).slice(2),ar="__reactInternalInstance$"+or,ir="__reactEventHandlers$"+or,ur=Object.freeze({precacheFiberNode:function(e,t){t[ar]=e},getClosestInstanceFromNode:S,getInstanceFromNode:function(e){return e=e[ar],!e||5!==e.tag&&6!==e.tag?null:e},getNodeFromInstance:T,getFiberCurrentPropsFromNode:C,updateFiberProps:function(e,t){e[ir]=t}}),cr=Object.freeze({accumulateTwoPhaseDispatches:I,accumulateTwoPhaseDispatchesSkipTarget:function(e){v(e,j)},accumulateEnterLeaveDispatches:M,accumulateDirectDispatches:function(e){v(e,R)}}),lr=null,sr={_root:null,_startText:null,_fallbackText:null},fr="dispatchConfig _targetInst nativeEvent isDefaultPrevented isPropagationStopped _dispatchListeners _dispatchInstances".split(" "),pr={type:null,target:null,currentTarget:_n.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};En(F.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=_n.thatReturnsTrue)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=_n.thatReturnsTrue)},persist:function(){this.isPersistent=_n.thatReturnsTrue},isPersistent:_n.thatReturnsFalse,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;for(t=0;t=parseInt(yr.version(),10))}var br,gr=vr,wr=wn.canUseDOM&&(!hr||mr&&8=mr),Er=String.fromCharCode(32),_r={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["topCompositionEnd","topKeyPress","topTextInput","topPaste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"topBlur topCompositionEnd topKeyDown topKeyPress topKeyUp topMouseDown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"topBlur topCompositionStart topKeyDown topKeyPress topKeyUp topMouseDown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"topBlur topCompositionUpdate topKeyDown topKeyPress topKeyUp topMouseDown".split(" ")}},Or=!1,Sr=!1,Tr={eventTypes:_r,extractEvents:function(e,t,n,r){var o;if(hr)e:{switch(e){case"topCompositionStart":var a=_r.compositionStart;break e;case"topCompositionEnd":a=_r.compositionEnd;break e;case"topCompositionUpdate":a=_r.compositionUpdate;break e}a=void 0}else Sr?W(e,n)&&(a=_r.compositionEnd):"topKeyDown"===e&&229===n.keyCode&&(a=_r.compositionStart);return a?(wr&&(Sr||a!==_r.compositionStart?a===_r.compositionEnd&&Sr&&(o=D()):(sr._root=r,sr._startText=U(),Sr=!0)),a=G.getPooled(a,t,n,r),o?a.data=o:null!==(o=z(n))&&(a.data=o),I(a),o=a):o=null,(e=gr?Y(e,n):K(e,n))?(t=V.getPooled(_r.beforeInput,t,n,r),t.data=e,I(t)):t=null,[o,t]}},Cr=null,Pr=null,xr=null,kr={injectFiberControlledHostComponent:function(e){Cr=e}},Ar=Object.freeze({injection:kr,enqueueStateRestore:$,restoreStateIfNeeded:X}),jr=!1,Nr={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};wn.canUseDOM&&(br=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("",""));var Rr={change:{phasedRegistrationNames:{bubbled:"onChange",captured:"onChangeCapture"},dependencies:"topBlur topChange topClick topFocus topInput topKeyDown topKeyUp topSelectionChange".split(" ")}},Ir=null,Mr=null,Lr=!1;wn.canUseDOM&&(Lr=ne("input")&&(!document.documentMode||9=document.documentMode,eo={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:"topBlur topContextMenu topFocus topKeyDown topKeyUp topMouseDown topMouseUp topSelectionChange".split(" ")}},to=null,no=null,ro=null,oo=!1,ao={eventTypes:eo,extractEvents:function(e,t,n,r){var o,a=r.window===r?r.document:9===r.nodeType?r:r.ownerDocument;if(!(o=!a)){e:{a=Me(a),o=$n.onSelect;for(var i=0;i=Bo-e){if(!(-1!==Ho&&Ho<=e))return void(qo||(qo=!0,requestAnimationFrame(zo)));Do.didTimeout=!0}else Do.didTimeout=!1;Ho=-1,e=Uo,Uo=null,null!==e&&e(Do)}},!1);var zo=function(e){qo=!1;var t=e-Bo+Vo;tt&&(t=8),Vo=t"+t+"",t=Xo.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}}),Zo={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ea=["Webkit","ms","Moz","O"];Object.keys(Zo).forEach(function(e){ea.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Zo[t]=Zo[e]})});var ta=En({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}),na=$o.html,ra=_n.thatReturns(""),oa={topAbort:"abort",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topSeeked:"seeked",topSeeking:"seeking",topStalled:"stalled",topSuspend:"suspend",topTimeUpdate:"timeupdate",topVolumeChange:"volumechange",topWaiting:"waiting"},aa=Object.freeze({createElement:un,createTextNode:cn,setInitialProperties:ln,diffProperties:sn,updateProperties:fn,diffHydratedProperties:pn,diffHydratedText:dn,warnForUnmatchedText:function(){},warnForDeletedHydratableElement:function(){},warnForDeletedHydratableText:function(){},warnForInsertedHydratedElement:function(){},warnForInsertedHydratedText:function(){},restoreControlledState:function(e,t,n){switch(t){case"input":if(Gt(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;tr&&(o=r,r=e,e=o),o=De(n,e);var a=De(n,r);if(o&&a&&(1!==t.rangeCount||t.anchorNode!==o.node||t.anchorOffset!==o.offset||t.focusNode!==a.node||t.focusOffset!==a.offset)){var i=document.createRange();i.setStart(o.node,o.offset),t.removeAllRanges(),e>r?(t.addRange(i),t.extend(a.node,a.offset)):(i.setEnd(a.node,a.offset),t.addRange(i))}}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(Pn(n),n=0;n0&&void 0!==arguments[0]?arguments[0]:"store",n=arguments[1],i=n||t+"Subscription",c=function(e){function n(a,i){r(this,n);var u=o(this,e.call(this,a,i));return u[t]=a.store,u}return a(n,e),n.prototype.getChildContext=function(){var e;return e={},e[t]=this[t],e[i]=null,e},n.prototype.render=function(){return u.Children.only(this.props.children)},n}(u.Component);return c.propTypes={store:s.a.isRequired,children:l.a.element.isRequired},c.childContextTypes=(e={},e[t]=s.a.isRequired,e[i]=s.b,e),c}t.a=i;var u=n(1),c=(n.n(u),n(8)),l=n.n(c),s=n(166);n(115);t.b=i()},function(e,t,n){"use strict";var r=n(83),o=n(417),a=n(418);e.exports=function(){function e(e,t,n,r,i,u){u!==a&&o(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types")}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t};return n.checkPropTypes=r,n.PropTypes=n,n}},function(e,t,n){"use strict";function r(e,t,n,r,a,i,u,c){if(o(t),!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var s=[n,r,a,i,u,c],f=0;l=new Error(t.replace(/%s/g,function(){return s[f++]})),l.name="Invariant Violation"}throw l.framesToPop=1,l}}var o=function(e){};e.exports=r},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(){var e=[],t=[];return{clear:function(){t=a,e=a},notify:function(){for(var n=e=t,r=0;r=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function o(e,t,n){for(var r=t.length-1;r>=0;r--){var o=t[r](e);if(o)return o}return function(t,r){throw new Error("Invalid value of type "+typeof e+" for "+n+" argument when connecting component "+r.wrappedComponentName+".")}}function a(e,t){return e===t}var i=n(167),u=n(421),c=n(422),l=n(437),s=n(438),f=n(439),p=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},t=e.connectHOC,n=void 0===t?i.a:t,d=e.mapStateToPropsFactories,h=void 0===d?l.a:d,m=e.mapDispatchToPropsFactories,v=void 0===m?c.a:m,y=e.mergePropsFactories,b=void 0===y?s.a:y,g=e.selectorFactory,w=void 0===g?f.a:g;return function(e,t,i){var c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},l=c.pure,s=void 0===l||l,f=c.areStatesEqual,d=void 0===f?a:f,m=c.areOwnPropsEqual,y=void 0===m?u.a:m,g=c.areStatePropsEqual,E=void 0===g?u.a:g,_=c.areMergedPropsEqual,O=void 0===_?u.a:_,S=r(c,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),T=o(e,h,"mapStateToProps"),C=o(t,v,"mapDispatchToProps"),P=o(i,b,"mergeProps");return n(w,p({methodName:"connect",getDisplayName:function(e){return"Connect("+e+")"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:T,initMapDispatchToProps:C,initMergeProps:P,pure:s,areStatesEqual:d,areOwnPropsEqual:y,areStatePropsEqual:E,areMergedPropsEqual:O},S))}}()},function(e,t,n){"use strict";function r(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!==e&&t!==t}function o(e,t){if(r(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];if(c)throw c;for(var o=!1,a={},i=0;i=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function o(e,t,n,r){return function(o,a){return n(e(o,a),t(r,a),a)}}function a(e,t,n,r,o){function a(o,a){return h=o,m=a,v=e(h,m),y=t(r,m),b=n(v,y,m),d=!0,b}function i(){return v=e(h,m),t.dependsOnOwnProps&&(y=t(r,m)),b=n(v,y,m)}function u(){return e.dependsOnOwnProps&&(v=e(h,m)),t.dependsOnOwnProps&&(y=t(r,m)),b=n(v,y,m)}function c(){var t=e(h,m),r=!p(t,v);return v=t,r&&(b=n(v,y,m)),b}function l(e,t){var n=!f(t,m),r=!s(e,h);return h=e,m=t,n&&r?i():n?u():r?c():b}var s=o.areStatesEqual,f=o.areOwnPropsEqual,p=o.areStatePropsEqual,d=!1,h=void 0,m=void 0,v=void 0,y=void 0,b=void 0;return function(e,t){return d?l(e,t):a(e,t)}}function i(e,t){var n=t.initMapStateToProps,i=t.initMapDispatchToProps,u=t.initMergeProps,c=r(t,["initMapStateToProps","initMapDispatchToProps","initMergeProps"]),l=n(e,c),s=i(e,c),f=u(e,c);return(c.pure?a:o)(l,s,f,e,c)}t.a=i;n(440)},function(e,t,n){"use strict";n(115)},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=n(13),u=n.n(i),c=n(1),l=n.n(c),s=n(8),f=n.n(s),p=n(442),d=n.n(p),h=n(120),m=function(e){function t(){var n,a,i;r(this,t);for(var u=arguments.length,c=Array(u),l=0;l ignores the history prop. To use a custom history, use `import { Router }` instead of `import { BrowserRouter as Router }`.")},t.prototype.render=function(){return l.a.createElement(h.a,{history:this.history,children:this.props.children})},t}(l.a.Component);m.propTypes={basename:f.a.string,forceRefresh:f.a.bool,getUserConfirmation:f.a.func,keyLength:f.a.number,children:f.a.node},t.a=m},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};(0,l.default)(h.canUseDOM,"Browser history needs a DOM");var t=window.history,n=(0,h.supportsHistory)(),r=!(0,h.supportsPopStateOnHashChange)(),i=e.forceRefresh,c=void 0!==i&&i,p=e.getUserConfirmation,v=void 0===p?h.getConfirmation:p,y=e.keyLength,b=void 0===y?6:y,g=e.basename?(0,f.stripTrailingSlash)((0,f.addLeadingSlash)(e.basename)):"",w=function(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname,i=o.search,c=o.hash,l=a+i+c;return(0,u.default)(!g||(0,f.hasBasename)(l,g),'You are attempting to use a basename on a page whose URL path does not begin with the basename. Expected path "'+l+'" to begin with "'+g+'".'),g&&(l=(0,f.stripBasename)(l,g)),(0,s.createLocation)(l,r,n)},E=function(){return Math.random().toString(36).substr(2,b)},_=(0,d.default)(),O=function(e){a(B,e),B.length=t.length,_.notifyListeners(B.location,B.action)},S=function(e){(0,h.isExtraneousPopstateEvent)(e)||P(w(e.state))},T=function(){P(w(m()))},C=!1,P=function(e){if(C)C=!1,O();else{_.confirmTransitionTo(e,"POP",v,function(t){t?O({action:"POP",location:e}):x(e)})}},x=function(e){var t=B.location,n=A.indexOf(t.key);-1===n&&(n=0);var r=A.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(C=!0,I(o))},k=w(m()),A=[k.key],j=function(e){return g+(0,f.createPath)(e)},N=function(e,r){(0,u.default)(!("object"===(void 0===e?"undefined":o(e))&&void 0!==e.state&&void 0!==r),"You should avoid providing a 2nd state argument to push when the 1st argument is a location-like object that already has state; it is ignored");var a=(0,s.createLocation)(e,r,E(),B.location);_.confirmTransitionTo(a,"PUSH",v,function(e){if(e){var r=j(a),o=a.key,i=a.state;if(n)if(t.pushState({key:o,state:i},null,r),c)window.location.href=r;else{var l=A.indexOf(B.location.key),s=A.slice(0,-1===l?0:l+1);s.push(a.key),A=s,O({action:"PUSH",location:a})}else(0,u.default)(void 0===i,"Browser history cannot push state in browsers that do not support HTML5 history"),window.location.href=r}})},R=function(e,r){(0,u.default)(!("object"===(void 0===e?"undefined":o(e))&&void 0!==e.state&&void 0!==r),"You should avoid providing a 2nd state argument to replace when the 1st argument is a location-like object that already has state; it is ignored");var a=(0,s.createLocation)(e,r,E(),B.location);_.confirmTransitionTo(a,"REPLACE",v,function(e){if(e){var r=j(a),o=a.key,i=a.state;if(n)if(t.replaceState({key:o,state:i},null,r),c)window.location.replace(r);else{var l=A.indexOf(B.location.key);-1!==l&&(A[l]=a.key),O({action:"REPLACE",location:a})}else(0,u.default)(void 0===i,"Browser history cannot replace state in browsers that do not support HTML5 history"),window.location.replace(r)}})},I=function(e){t.go(e)},M=function(){return I(-1)},L=function(){return I(1)},D=0,U=function(e){D+=e,1===D?((0,h.addEventListener)(window,"popstate",S),r&&(0,h.addEventListener)(window,"hashchange",T)):0===D&&((0,h.removeEventListener)(window,"popstate",S),r&&(0,h.removeEventListener)(window,"hashchange",T))},F=!1,H=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=_.setPrompt(e);return F||(U(1),F=!0),function(){return F&&(F=!1,U(-1)),t()}},q=function(e){var t=_.appendListener(e);return U(1),function(){U(-1),t()}},B={length:t.length,action:"POP",location:k,createHref:j,push:N,replace:R,go:I,goBack:M,goForward:L,block:H,listen:q};return B};t.default=v},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=n(13),u=n.n(i),c=n(1),l=n.n(c),s=n(8),f=n.n(s),p=n(444),d=n.n(p),h=n(120),m=function(e){function t(){var n,a,i;r(this,t);for(var u=arguments.length,c=Array(u),l=0;l ignores the history prop. To use a custom history, use `import { Router }` instead of `import { HashRouter as Router }`.")},t.prototype.render=function(){return l.a.createElement(h.a,{history:this.history,children:this.props.children})},t}(l.a.Component);m.propTypes={basename:f.a.string,getUserConfirmation:f.a.func,hashType:f.a.oneOf(["hashbang","noslash","slash"]),children:f.a.node},t.a=m},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var o=Object.assign||function(e){for(var t=1;t=0?t:0)+"#"+e)},b=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,c.default)(d.canUseDOM,"Hash history needs a DOM");var t=window.history,n=(0,d.supportsGoWithoutReloadUsingHash)(),r=e.getUserConfirmation,a=void 0===r?d.getConfirmation:r,u=e.hashType,f=void 0===u?"slash":u,b=e.basename?(0,s.stripTrailingSlash)((0,s.addLeadingSlash)(e.basename)):"",g=h[f],w=g.encodePath,E=g.decodePath,_=function(){var e=E(m());return(0,i.default)(!b||(0,s.hasBasename)(e,b),'You are attempting to use a basename on a page whose URL path does not begin with the basename. Expected path "'+e+'" to begin with "'+b+'".'),b&&(e=(0,s.stripBasename)(e,b)),(0,l.createLocation)(e)},O=(0,p.default)(),S=function(e){o(W,e),W.length=t.length,O.notifyListeners(W.location,W.action)},T=!1,C=null,P=function(){var e=m(),t=w(e);if(e!==t)y(t);else{var n=_(),r=W.location;if(!T&&(0,l.locationsAreEqual)(r,n))return;if(C===(0,s.createPath)(n))return;C=null,x(n)}},x=function(e){if(T)T=!1,S();else{O.confirmTransitionTo(e,"POP",a,function(t){t?S({action:"POP",location:e}):k(e)})}},k=function(e){var t=W.location,n=R.lastIndexOf((0,s.createPath)(t));-1===n&&(n=0);var r=R.lastIndexOf((0,s.createPath)(e));-1===r&&(r=0);var o=n-r;o&&(T=!0,D(o))},A=m(),j=w(A);A!==j&&y(j);var N=_(),R=[(0,s.createPath)(N)],I=function(e){return"#"+w(b+(0,s.createPath)(e))},M=function(e,t){(0,i.default)(void 0===t,"Hash history cannot push state; it is ignored");var n=(0,l.createLocation)(e,void 0,void 0,W.location);O.confirmTransitionTo(n,"PUSH",a,function(e){if(e){var t=(0,s.createPath)(n),r=w(b+t);if(m()!==r){C=t,v(r);var o=R.lastIndexOf((0,s.createPath)(W.location)),a=R.slice(0,-1===o?0:o+1);a.push(t),R=a,S({action:"PUSH",location:n})}else(0,i.default)(!1,"Hash history cannot PUSH the same path; a new entry will not be added to the history stack"),S()}})},L=function(e,t){(0,i.default)(void 0===t,"Hash history cannot replace state; it is ignored");var n=(0,l.createLocation)(e,void 0,void 0,W.location);O.confirmTransitionTo(n,"REPLACE",a,function(e){if(e){var t=(0,s.createPath)(n),r=w(b+t);m()!==r&&(C=t,y(r));var o=R.indexOf((0,s.createPath)(W.location));-1!==o&&(R[o]=t),S({action:"REPLACE",location:n})}})},D=function(e){(0,i.default)(n,"Hash history go(n) causes a full page reload in this browser"),t.go(e)},U=function(){return D(-1)},F=function(){return D(1)},H=0,q=function(e){H+=e,1===H?(0,d.addEventListener)(window,"hashchange",P):0===H&&(0,d.removeEventListener)(window,"hashchange",P)},B=!1,G=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=O.setPrompt(e);return B||(q(1),B=!0),function(){return B&&(B=!1,q(-1)),t()}},V=function(e){var t=O.appendListener(e);return q(1),function(){q(-1),t()}},W={length:t.length,action:"POP",location:N,createHref:I,push:M,replace:L,go:D,goBack:U,goForward:F,block:G,listen:V};return W};t.default=b},function(e,t,n){"use strict";var r=n(446);t.a=r.a},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=n(13),u=n.n(i),c=n(1),l=n.n(c),s=n(8),f=n.n(s),p=n(447),d=n.n(p),h=n(121),m=function(e){function t(){var n,a,i;r(this,t);for(var u=arguments.length,c=Array(u),l=0;l ignores the history prop. To use a custom history, use `import { Router }` instead of `import { MemoryRouter as Router }`.")},t.prototype.render=function(){return l.a.createElement(h.a,{history:this.history,children:this.props.children})},t}(l.a.Component);m.propTypes={initialEntries:f.a.array,initialIndex:f.a.number,getUserConfirmation:f.a.func,keyLength:f.a.number,children:f.a.node},t.a=m},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},t=e.getUserConfirmation,n=e.initialEntries,r=void 0===n?["/"]:n,i=e.initialIndex,s=void 0===i?0:i,d=e.keyLength,h=void 0===d?6:d,m=(0,f.default)(),v=function(e){a(k,e),k.length=k.entries.length,m.notifyListeners(k.location,k.action)},y=function(){return Math.random().toString(36).substr(2,h)},b=p(s,0,r.length-1),g=r.map(function(e){return"string"==typeof e?(0,l.createLocation)(e,void 0,y()):(0,l.createLocation)(e,void 0,e.key||y())}),w=c.createPath,E=function(e,n){(0,u.default)(!("object"===(void 0===e?"undefined":o(e))&&void 0!==e.state&&void 0!==n),"You should avoid providing a 2nd state argument to push when the 1st argument is a location-like object that already has state; it is ignored");var r=(0,l.createLocation)(e,n,y(),k.location);m.confirmTransitionTo(r,"PUSH",t,function(e){if(e){var t=k.index,n=t+1,o=k.entries.slice(0);o.length>n?o.splice(n,o.length-n,r):o.push(r),v({action:"PUSH",location:r,index:n,entries:o})}})},_=function(e,n){(0,u.default)(!("object"===(void 0===e?"undefined":o(e))&&void 0!==e.state&&void 0!==n),"You should avoid providing a 2nd state argument to replace when the 1st argument is a location-like object that already has state; it is ignored");var r=(0,l.createLocation)(e,n,y(),k.location);m.confirmTransitionTo(r,"REPLACE",t,function(e){e&&(k.entries[k.index]=r,v({action:"REPLACE",location:r}))})},O=function(e){var n=p(k.index+e,0,k.entries.length-1),r=k.entries[n];m.confirmTransitionTo(r,"POP",t,function(e){e?v({action:"POP",location:r,index:n}):v()})},S=function(){return O(-1)},T=function(){return O(1)},C=function(e){var t=k.index+e;return t>=0&&t0&&void 0!==arguments[0]&&arguments[0];return m.setPrompt(e)},x=function(e){return m.appendListener(e)},k={length:g.length,action:"POP",location:g[b],index:b,entries:g,createHref:w,push:E,replace:_,go:O,goBack:S,goForward:T,canGo:C,block:P,listen:x};return k};t.default=d},function(e,t,n){"use strict";function r(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}var o=n(1),a=n.n(o),i=n(8),u=n.n(i),c=n(179),l=n(178),s=Object.assign||function(e){for(var t=1;t outside a "),this.props.when&&this.enable(this.props.message)},t.prototype.componentWillReceiveProps=function(e){e.when?this.props.when&&this.props.message===e.message||this.enable(e.message):this.disable()},t.prototype.componentWillUnmount=function(){this.disable()},t.prototype.render=function(){return null},t}(u.a.Component);p.propTypes={when:l.a.bool,message:l.a.oneOfType([l.a.func,l.a.string]).isRequired},p.defaultProps={when:!0},p.contextTypes={router:l.a.shape({history:l.a.shape({block:l.a.func.isRequired}).isRequired}).isRequired},t.a=p},function(e,t,n){"use strict";var r=n(454);t.a=r.a},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=n(1),u=n.n(i),c=n(8),l=n.n(c),s=n(13),f=n.n(s),p=n(22),d=n.n(p),h=n(455),m=function(e){function t(){return r(this,t),o(this,e.apply(this,arguments))}return a(t,e),t.prototype.isStatic=function(){return this.context.router&&this.context.router.staticContext},t.prototype.componentWillMount=function(){d()(this.context.router,"You should not use outside a "),this.isStatic()&&this.perform()},t.prototype.componentDidMount=function(){this.isStatic()||this.perform()},t.prototype.componentDidUpdate=function(e){var t=Object(h.a)(e.to),n=Object(h.a)(this.props.to);if(Object(h.b)(t,n))return void f()(!1,"You tried to redirect to the same route you're currently on: \""+n.pathname+n.search+'"');this.perform()},t.prototype.perform=function(){var e=this.context.router.history,t=this.props,n=t.push,r=t.to;n?e.push(r):e.replace(r)},t.prototype.render=function(){return null},t}(u.a.Component);m.propTypes={push:l.a.bool,from:l.a.string,to:l.a.oneOfType([l.a.string,l.a.object]).isRequired},m.defaultProps={push:!1},m.contextTypes={router:l.a.shape({history:l.a.shape({push:l.a.func.isRequired,replace:l.a.func.isRequired}).isRequired,staticContext:l.a.object}).isRequired},t.a=m},function(e,t,n){"use strict";var r=(n(456),n(457),n(458),n(84));n.d(t,"a",function(){return r.a}),n.d(t,"b",function(){return r.b});n(67)},function(e,t,n){"use strict";var r=n(13),o=(n.n(r),n(22));n.n(o),n(84),n(67),n(123),n(181),"function"==typeof Symbol&&Symbol.iterator,Object.assign},function(e,t,n){"use strict";var r=n(13),o=(n.n(r),n(22)),a=(n.n(o),n(84),n(67));n(123),n(181),Object.assign,a.f,a.a,a.a,a.a},function(e,t,n){"use strict";var r=n(13);n.n(r),n(67),n(84),n(123),"function"==typeof Symbol&&Symbol.iterator,Object.assign},function(e,t,n){"use strict";var r=n(460);t.a=r.a},function(e,t,n){"use strict";function r(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=n(13),c=n.n(u),l=n(22),s=n.n(l),f=n(1),p=n.n(f),d=n(8),h=n.n(d),m=n(66),v=(n.n(m),n(121)),y=Object.assign||function(e){for(var t=1;t",e)}},S=function(){},T=function(e){function t(){var n,r,i;o(this,t);for(var u=arguments.length,c=Array(u),l=0;l ignores the history prop. To use a custom history, use `import { Router }` instead of `import { StaticRouter as Router }`.")},t.prototype.render=function(){var e=this.props,t=e.basename,n=(e.context,e.location),o=r(e,["basename","context","location"]),a={createHref:this.createHref,action:"POP",location:w(t,E(n)),push:this.handlePush,replace:this.handleReplace,go:O("go"),goBack:O("goBack"),goForward:O("goForward"),listen:this.handleListen,block:this.handleBlock};return p.a.createElement(v.a,y({},o,{history:a}))},t}(p.a.Component);T.propTypes={basename:h.a.string,context:h.a.object.isRequired,location:h.a.oneOfType([h.a.string,h.a.object])},T.defaultProps={basename:"",location:"/"},T.childContextTypes={router:h.a.object.isRequired},t.a=T},function(e,t,n){"use strict";var r=n(462);t.a=r.a},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=n(1),u=n.n(i),c=n(8),l=n.n(c),s=n(13),f=n.n(s),p=n(22),d=n.n(p),h=n(122),m=function(e){function t(){return r(this,t),o(this,e.apply(this,arguments))}return a(t,e),t.prototype.componentWillMount=function(){d()(this.context.router,"You should not use outside a ")},t.prototype.componentWillReceiveProps=function(e){f()(!(e.location&&!this.props.location),' elements should not change from uncontrolled to controlled (or vice versa). You initially used no "location" prop and then provided one on a subsequent render.'),f()(!(!e.location&&this.props.location),' elements should not change from controlled to uncontrolled (or vice versa). You provided a "location" prop initially but omitted it on a subsequent render.')},t.prototype.render=function(){var e=this.context.router.route,t=this.props.children,n=this.props.location||e.location,r=void 0,o=void 0;return u.a.Children.forEach(t,function(t){if(u.a.isValidElement(t)){var a=t.props,i=a.path,c=a.exact,l=a.strict,s=a.sensitive,f=a.from,p=i||f;null==r&&(o=t,r=p?Object(h.a)(n.pathname,{path:p,exact:c,strict:l,sensitive:s}):e.match)}}),r?u.a.cloneElement(o,{location:n,computedMatch:r}):null},t}(u.a.Component);m.contextTypes={router:l.a.shape({route:l.a.object.isRequired}).isRequired},m.propTypes={children:l.a.node,location:l.a.object},t.a=m},function(e,t,n){"use strict";var r=n(122);t.a=r.a},function(e,t,n){"use strict";var r=n(465);t.a=r.a},function(e,t,n){"use strict";function r(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}var o=n(1),a=n.n(o),i=n(8),u=n.n(i),c=n(168),l=n.n(c),s=n(180),f=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:l,t=arguments[1];switch(t.type){case a.FILE_SELECTED:return Object.assign({},l,{file:t.data});case a.FILE_CLEAR:return l;case a.METADATA_UPDATE:return Object.assign({},e,{metadata:Object.assign({},e.metadata,r({},t.data.name,t.data.value))});case a.CLAIM_UPDATE:return Object.assign({},e,{claim:t.data});case a.SET_PUBLISH_IN_CHANNEL:return Object.assign({},e,{publishInChannel:t.channel});case a.PUBLISH_STATUS_UPDATE:return Object.assign({},e,{status:t.data});case a.ERROR_UPDATE:return Object.assign({},e,{error:Object.assign({},e.error,r({},t.data.name,t.data.value))});case a.SELECTED_CHANNEL_UPDATE:return Object.assign({},e,{selectedChannel:t.data});case a.TOGGLE_METADATA_INPUTS:return Object.assign({},e,{showMetadataInputs:t.data});case a.THUMBNAIL_NEW:return Object.assign({},e,{thumbnail:t.data});default:return e}};var o=n(124),a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(o),i=n(182),u=n(125),c=u.publishing,l={disabled:c.disabled,disabledMessage:c.disabledMessage,publishInChannel:!1,selectedChannel:i.LOGIN,showMetadataInputs:!1,status:{status:null,message:null},error:{file:null,url:null,channel:null,publishSubmit:null},file:null,claim:"",metadata:{title:"",description:"",license:"",nsfw:!1},thumbnail:null}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a,t=arguments[1];switch(t.type){case o.CHANNEL_UPDATE:return Object.assign({},e,{loggedInChannel:t.data});default:return e}};var r=n(183),o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(r),a={loggedInChannel:{name:null,shortId:null,longId:null}}},function(e,t,n){"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:u,t=arguments[1];switch(t.type){case a.REQUEST_ERROR:return Object.assign({},e,{request:Object.assign({},e.request,{error:t.data})});case a.REQUEST_UPDATE:return Object.assign({},e,{request:Object.assign({},e.request,{type:t.data.requestType,id:t.data.requestId})});case a.REQUEST_LIST_ADD:return Object.assign({},e,{requestList:Object.assign({},e.requestList,r({},t.data.id,{error:t.data.error,key:t.data.key}))});case a.ASSET_ADD:return Object.assign({},e,{assetList:Object.assign({},e.assetList,r({},t.data.id,{error:t.data.error,name:t.data.name,claimId:t.data.claimId,shortId:t.data.shortId,claimData:t.data.claimData}))});case a.CHANNEL_ADD:return Object.assign({},e,{channelList:Object.assign({},e.channelList,r({},t.data.id,{name:t.data.name,longId:t.data.longId,shortId:t.data.shortId,claimsData:t.data.claimsData}))});case a.CHANNEL_CLAIMS_UPDATE_SUCCESS:return Object.assign({},e,{channelList:Object.assign({},e.channelList,r({},t.data.channelListId,Object.assign({},e.channelList[t.data.channelListId],{claimsData:t.data.claimsData})))});case a.FILE_AVAILABILITY_UPDATE:return Object.assign({},e,{displayAsset:Object.assign({},e.displayAsset,{status:t.data})});case a.DISPLAY_ASSET_ERROR:return Object.assign({},e,{displayAsset:Object.assign({},e.displayAsset,{error:t.data,status:i.ERROR})});default:return e}};var o=n(59),a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(o),i=n(126),u={request:{error:null,type:null,id:null},requestList:{},channelList:{},assetList:{},displayAsset:{error:null,status:i.LOCAL_CHECK}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:d;return arguments[1].type,e};var r=n(125),o=r.analytics.googleId,a=r.assetDefaults,i=a.thumbnail,u=a.description,c=r.details,l=c.description,s=c.host,f=c.title,p=c.twitter,d={description:l,googleAnalyticsId:o,host:s,title:f,twitter:p,defaultDescription:u,defaultThumbnail:i}},function(e,t,n){"use strict";function r(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function o(){function e(t){var n=t.getState,r=t.dispatch,p=Object(i.c)();return p.emit=(c.emitter||a.o)(p.emit),e.run=u.a.bind(null,{context:o,subscribe:p.subscribe,dispatch:r,getState:n,sagaMonitor:l,logger:s,onError:f}),function(e){return function(t){l&&l.actionDispatched&&l.actionDispatched(t);var n=e(t);return p.emit(t),n}}}var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.context,o=void 0===n?{}:n,c=r(t,["context"]),l=c.sagaMonitor,s=c.logger,f=c.onError;if(a.q.func(c))throw new Error("Saga middleware no longer accept Generator functions. Use sagaMiddleware.run instead");if(s&&!a.q.func(s))throw new Error("`options.logger` passed to the Saga middleware is not a function!");if(f&&!a.q.func(f))throw new Error("`options.onError` passed to the Saga middleware is not a function!");if(c.emitter&&!a.q.func(c.emitter))throw new Error("`options.emitter` passed to the Saga middleware is not a function!");return e.run=function(){throw new Error("Before running a Saga, you must mount the Saga middleware on the Store using applyMiddleware")},e.setContext=function(e){Object(a.h)(e,a.q.object,Object(a.k)("sagaMiddleware",e)),a.v.assign(o,e)},e}t.a=o;var a=n(23),i=n(60),u=n(186)},function(e,t,n){"use strict";function r(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),u=2;u2?n-2:0),u=2;u3?r-3:0),s=3;s-1?t:e}function d(e,t){t=t||{};var n=t.body;if(e instanceof d){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new o(e.headers)),this.method=e.method,this.mode=e.mode,n||null==e._bodyInit||(n=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new o(t.headers)),this.method=p(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&n)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(n)}function h(e){var t=new FormData;return e.trim().split("&").forEach(function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(o))}}),t}function m(e){var t=new o;return e.split(/\r?\n/).forEach(function(e){var n=e.split(":"),r=n.shift().trim();if(r){var o=n.join(":").trim();t.append(r,o)}}),t}function v(e,t){t||(t={}),this.type="default",this.status="status"in t?t.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new o(t.headers),this.url=t.url||"",this._initBody(e)}if(!e.fetch){var y={searchParams:"URLSearchParams"in e,iterable:"Symbol"in e&&"iterator"in Symbol,blob:"FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),formData:"FormData"in e,arrayBuffer:"ArrayBuffer"in e};if(y.arrayBuffer)var b=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],g=function(e){return e&&DataView.prototype.isPrototypeOf(e)},w=ArrayBuffer.isView||function(e){return e&&b.indexOf(Object.prototype.toString.call(e))>-1};o.prototype.append=function(e,r){e=t(e),r=n(r);var o=this.map[e];this.map[e]=o?o+","+r:r},o.prototype.delete=function(e){delete this.map[t(e)]},o.prototype.get=function(e){return e=t(e),this.has(e)?this.map[e]:null},o.prototype.has=function(e){return this.map.hasOwnProperty(t(e))},o.prototype.set=function(e,r){this.map[t(e)]=n(r)},o.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)},o.prototype.keys=function(){var e=[];return this.forEach(function(t,n){e.push(n)}),r(e)},o.prototype.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),r(e)},o.prototype.entries=function(){var e=[];return this.forEach(function(t,n){e.push([n,t])}),r(e)},y.iterable&&(o.prototype[Symbol.iterator]=o.prototype.entries);var E=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];d.prototype.clone=function(){return new d(this,{body:this._bodyInit})},f.call(d.prototype),f.call(v.prototype),v.prototype.clone=function(){return new v(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new o(this.headers),url:this.url})},v.error=function(){var e=new v(null,{status:0,statusText:""});return e.type="error",e};var _=[301,302,303,307,308];v.redirect=function(e,t){if(-1===_.indexOf(t))throw new RangeError("Invalid status code");return new v(null,{status:t,headers:{location:e}})},e.Headers=o,e.Request=d,e.Response=v,e.fetch=function(e,t){return new Promise(function(n,r){var o=new d(e,t),a=new XMLHttpRequest;a.onload=function(){var e={status:a.status,statusText:a.statusText,headers:m(a.getAllResponseHeaders()||"")};e.url="responseURL"in a?a.responseURL:e.headers.get("X-Request-URL");var t="response"in a?a.response:a.responseText;n(new v(t,e))},a.onerror=function(){r(new TypeError("Network request failed"))},a.ontimeout=function(){r(new TypeError("Network request failed"))},a.open(o.method,o.url,!0),"include"===o.credentials&&(a.withCredentials=!0),"responseType"in a&&y.blob&&(a.responseType="blob"),o.headers.forEach(function(e,t){a.setRequestHeader(t,e)}),a.send(void 0===o._bodyInit?null:o._bodyInit)})},e.fetch.polyfill=!0}}("undefined"!=typeof self?self:this)},function(e,t,n){"use strict";function r(e,t,n){t||(t="none");var r=e+"/api/channel/data/"+n+"/"+t;return(0,i.default)(r)}function o(e,t,n,r){r||(r=1);var o=e+"/api/channel/claims/"+n+"/"+t+"/"+r;return(0,i.default)(o)}Object.defineProperty(t,"__esModule",{value:!0}),t.getChannelData=r,t.getChannelClaims=o;var a=n(53),i=function(e){return e&&e.__esModule?e:{default:e}}(a)},function(e,t,n){"use strict";var r=function(){function e(e,t){var n=[],r=!0,o=!1,a=void 0;try{for(var i,u=e[Symbol.iterator]();!(r=(i=u.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(e){o=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(o)throw a}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();e.exports={REGEXP_INVALID_CLAIM:/[^A-Za-z0-9-]/g,REGEXP_INVALID_CHANNEL:/[^A-Za-z0-9-@]/g,REGEXP_ADDRESS:/^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,CHANNEL_CHAR:"@",parseIdentifier:function(t){var n=new RegExp("([^:$#/]*)([:$#]?)([^/]*)"),o=n.exec(t).map(function(e){return e||null}),a=r(o,4),i=(a[0],a[1]),u=a[2],c=a[3];if(!i)throw new Error('Check your URL. No channel name provided before "'+u+'"');var l=i.startsWith(e.exports.CHANNEL_CHAR),s=l?i:null,f=void 0;if(l){if(!s)throw new Error('Check your URL. No channel name after "@".');var p=s.match(e.exports.REGEXP_INVALID_CHANNEL);if(p)throw new Error('Check your URL. Invalid characters in channel name: "'+p.join(", ")+'".')}else f=i;var d=void 0;if(u){if(!c)throw new Error('Check your URL. No modifier provided after separator "'+u+'"');if(":"!==u)throw new Error('Check your URL. The "'+u+'" modifier is not currently supported');d=c}return{isChannel:l,channelName:s,channelClaimId:d||null,claimId:f||null}},parseClaim:function(t){var n=new RegExp("([^:$#/.]*)([:$#.]?)([^/]*)"),o=n.exec(t).map(function(e){return e||null}),a=r(o,4),i=(a[0],a[1]),u=a[2],c=a[3];if(!i)throw new Error('Check your URL. No claim name provided before "."');var l=i.match(e.exports.REGEXP_INVALID_CLAIM);if(l)throw new Error('Check your URL. Invalid characters in claim name: "'+l.join(", ")+'".');if(u){if(!c)throw new Error('Check your URL. No file extension provided after separator "'+u+'".');if("."!==u)throw new Error('Check your URL. The "'+u+'" separator is not supported in the claim name.')}return{claimName:i,extension:c||null}}}},function(e,t,n){"use strict";function r(e){var t,n,r,o,i;return regeneratorRuntime.wrap(function(u){for(;;)switch(u.prev=u.next){case 0:return t=e.data.name,n=e.data.claimId,u.next=4,(0,a.select)(f.selectSiteHost);case 4:return r=u.sent,o=void 0,u.prev=6,u.next=9,(0,a.call)(s.checkFileAvailability,n,r,t);case 9:i=u.sent,o=i.data,u.next=18;break;case 13:return u.prev=13,u.t0=u.catch(6),u.next=17,(0,a.put)((0,c.updateDisplayAssetError)(u.t0.message));case 17:return u.abrupt("return",u.sent);case 18:if(!o){u.next=25;break}return u.next=22,(0,a.put)((0,c.updateDisplayAssetError)(null));case 22:return u.next=24,(0,a.put)((0,c.updateFileAvailability)(l.AVAILABLE));case 24:return u.abrupt("return",u.sent);case 25:return u.next=27,(0,a.put)((0,c.updateFileAvailability)(l.UNAVAILABLE));case 27:return u.prev=27,u.next=30,(0,a.call)(s.triggerClaimGet,n,r,t);case 30:u.next=37;break;case 32:return u.prev=32,u.t1=u.catch(27),u.next=36,(0,a.put)((0,c.updateDisplayAssetError)(u.t1.message));case 36:return u.abrupt("return",u.sent);case 37:return u.next=40,(0,a.put)((0,c.updateFileAvailability)(l.AVAILABLE));case 40:case"end":return u.stop()}},p,this,[[6,13],[27,32]])}function o(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,a.takeLatest)(u.FILE_REQUESTED,r);case 2:case"end":return e.stop()}},d,this)}Object.defineProperty(t,"__esModule",{value:!0}),t.watchFileIsRequested=o;var a=n(51),i=n(59),u=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(i),c=n(52),l=n(126),s=n(483),f=n(86),p=regeneratorRuntime.mark(r),d=regeneratorRuntime.mark(o)},function(e,t,n){"use strict";function r(e,t,n){var r=t+"/api/file/availability/"+n+"/"+e;return(0,i.default)(r)}function o(e,t,n){var r=t+"/api/claim/get/"+n+"/"+e;return(0,i.default)(r)}Object.defineProperty(t,"__esModule",{value:!0}),t.checkFileAvailability=r,t.triggerClaimGet=o;var a=n(53),i=function(e){return e&&e.__esModule?e:{default:e}}(a)},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function o(e){var t,n,r,o,a,u,c,l,g,w,E,_,O,S,T,C,P,x,k,A,j,N,R,I;return regeneratorRuntime.wrap(function(b){for(;;)switch(b.prev=b.next){case 0:return t=e.data.history,b.next=3,(0,i.select)(p.selectPublishState);case 3:return n=b.sent,r=n.publishInChannel,o=n.selectedChannel,a=n.file,u=n.claim,c=n.metadata,l=n.thumbnailChannel,g=n.thumbnailChannelId,w=n.thumbnail,E=n.error.url,b.next=15,(0,i.select)(d.selectChannelState);case 15:return _=b.sent,O=_.loggedInChannel,b.next=19,(0,i.select)(h.selectSiteState);case 19:S=b.sent,T=S.host,b.prev=21,(0,m.validateChannelSelection)(r,o,O),b.next=30;break;case 25:return b.prev=25,b.t0=b.catch(21),b.next=29,(0,i.put)((0,f.updateError)("channel",b.t0.message));case 29:return b.abrupt("return",b.sent);case 30:b.prev=31,(0,m.validatePublishParams)(a,u,E),b.next=40;break;case 35:return b.prev=35,b.t1=b.catch(31),b.next=39,(0,i.put)((0,f.updateError)("publishSubmit",b.t1.message));case 39:return b.abrupt("return",b.sent);case 40:return C=(0,v.createPublishMetadata)(u,a,c,r,o),w&&(C.thumbnail=(0,v.createThumbnailUrl)(l,g,u,T)),P=(0,v.createPublishFormData)(a,w,C),b.next=45,(0,i.call)(y.makePublishRequestChannel,P);case 45:x=b.sent;case 46:return b.next=49,(0,i.take)(x);case 49:if(k=b.sent,A=k.loadStart,j=k.progress,N=k.load,R=k.success,!(I=k.error)){b.next=59;break}return b.next=58,(0,i.put)((0,f.updatePublishStatus)(s.FAILED,I.message));case 58:return b.abrupt("return",b.sent);case 59:if(!R){b.next=63;break}return b.next=62,(0,i.put)((0,f.clearFile)());case 62:return b.abrupt("return",t.push("/"+R.data.claimId+"/"+R.data.name));case 63:if(!A){b.next=66;break}return b.next=66,(0,i.put)((0,f.updatePublishStatus)(s.LOAD_START,null));case 66:if(!j){b.next=69;break}return b.next=69,(0,i.put)((0,f.updatePublishStatus)(s.LOADING,j+"%"));case 69:if(!N){b.next=72;break}return b.next=72,(0,i.put)((0,f.updatePublishStatus)(s.PUBLISHING,null));case 72:b.next=46;break;case 74:case"end":return b.stop()}},b,this,[[21,25],[31,35]])}function a(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,i.takeLatest)(c.PUBLISH_START,o);case 2:case"end":return e.stop()}},g,this)}Object.defineProperty(t,"__esModule",{value:!0}),t.watchPublishStart=a;var i=n(51),u=n(124),c=r(u),l=n(192),s=r(l),f=n(24),p=n(485),d=n(486),h=n(86),m=n(487),v=n(488),y=n(489),b=regeneratorRuntime.mark(o),g=regeneratorRuntime.mark(a)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.selectPublishState=function(e){return e.publish}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.selectChannelState=function(e){return e.channel}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.validateChannelSelection=function(e,t,n){if(e&&t!==n.name)throw new Error("Log in to a channel or select Anonymous")},t.validatePublishParams=function(e,t,n){if(!e)throw new Error("Please choose a file");if(!t)throw new Error("Please enter a URL");if(n)throw new Error("Fix the url")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.createPublishMetadata=function(e,t,n,r,o){var a=t.type,i=n.title,u=n.description,c=n.license,l=n.nsfw,s={name:e,title:i,description:u,license:c,nsfw:l,type:a};return r&&(s.channelName=o),s},t.createPublishFormData=function(e,t,n){var r=new FormData;r.append("file",e),t&&r.append("thumbnail",t);for(var o in n)n.hasOwnProperty(o)&&r.append(o,n[o]);return r},t.createThumbnailUrl=function(e,t,n,r){return r+"/"+e+":"+t+"/"+n+"-thumb.png"}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.makePublishRequestChannel=void 0;var r=n(184);t.makePublishRequestChannel=function(e){return(0,r.eventChannel)(function(t){var n=new XMLHttpRequest,o=function(){t({loadStart:!0})},a=function(e){if(e.lengthComputable){var n=Math.round(100*e.loaded/e.total);t({progress:n})}},i=function(){t({load:!0})};return n.upload.addEventListener("loadstart",o),n.upload.addEventListener("progress",a),n.upload.addEventListener("load",i),n.onreadystatechange=function(){if(4===n.readyState){var e=JSON.parse(n.response);200===n.status&&e.success?(t({success:e}),t(r.END)):(t({error:new Error(e.message)}),t(r.END))}},n.open("POST","/api/claim/publish",!0),n.send(e),function(){n.upload.removeEventListener("loadstart",o),n.upload.removeEventListener("progress",a),n.upload.removeEventListener("load",i),n.onreadystatechange=null,n.abort()}},r.buffers.sliding(2))}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?t-1:0),r=1;r0&&(H.apply(void 0,t),D&&((0,N.default)("called ga('arguments');"),(0,N.default)("with arguments: "+JSON.stringify(t)))),window.ga}function f(e,t){return e?"object"!==(void 0===e?"undefined":w(e))?void(0,A.default)("Expected `fieldsObject` arg to be an Object"):(0===Object.keys(e).length&&(0,A.default)("empty `fieldsObject` given to .set()"),u(t,"set",e),void(D&&((0,N.default)("called ga('set', fieldsObject);"),(0,N.default)("with fieldsObject: "+JSON.stringify(e))))):void(0,A.default)("`fieldsObject` is required in .set()")}function p(e,t){u(t,"send",e),D&&((0,N.default)("called ga('send', fieldObject);"),(0,N.default)("with fieldObject: "+JSON.stringify(e)),(0,N.default)("with trackers: "+JSON.stringify(t)))}function d(e,t,n){if(!e)return void(0,A.default)("path is required in .pageview()");var r=(0,C.default)(e);if(""===r)return void(0,A.default)("path cannot be an empty string in .pageview()");var o={};if(n&&(o.title=n),"function"==typeof s&&(u(t,"send",g({hitType:"pageview",page:r},o)),D)){(0,N.default)("called ga('send', 'pageview', path);");var a="";n&&(a=" and title: "+n),(0,N.default)("with path: "+r+a)}}function h(e,t){if(!e)return void(0,A.default)("modalName is required in .modalview(modalName)");var n=(0,S.default)((0,C.default)(e));if(""===n)return void(0,A.default)("modalName cannot be an empty string or a single / in .modalview()");if("function"==typeof s){var r="/modal/"+n;u(t,"send","pageview",r),D&&((0,N.default)("called ga('send', 'pageview', path);"),(0,N.default)("with path: "+r))}}function m(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.category,n=e.variable,r=e.value,o=e.label,a=arguments[1];if("function"==typeof s){if(!t||!n||!r||"number"!=typeof r)return void(0,A.default)("args.category, args.variable AND args.value are required in timing() AND args.value has to be a number");var u={hitType:"timing",timingCategory:i(t),timingVar:i(n),timingValue:r};o&&(u.timingLabel=i(o)),p(u,a)}}function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],n=e.category,r=e.action,a=e.label,u=e.value,c=e.nonInteraction,l=e.transport,f=o(e,["category","action","label","value","nonInteraction","transport"]);if("function"==typeof s){if(!n||!r)return void(0,A.default)("args.category AND args.action are required in event()");var d={hitType:"event",eventCategory:i(n),eventAction:i(r)};a&&(d.eventLabel=i(a)),void 0!==u&&("number"!=typeof u?(0,A.default)("Expected `args.value` arg to be a Number."):d.eventValue=u),void 0!==c&&("boolean"!=typeof c?(0,A.default)("`args.nonInteraction` must be a boolean."):d.nonInteraction=c),void 0!==l&&("string"!=typeof l?(0,A.default)("`args.transport` must be a string."):(-1===["beacon","xhr","image"].indexOf(l)&&(0,A.default)("`args.transport` must be either one of these values: `beacon`, `xhr` or `image`"),d.transport=l)),Object.keys(f).filter(function(e){return"dimension"===e.substr(0,"dimension".length)}).forEach(function(e){d[e]=f[e]}),Object.keys(f).filter(function(e){return"metric"===e.substr(0,"metric".length)}).forEach(function(e){d[e]=f[e]}),p(d,t)}}function y(e,t){var n=e.description,r=e.fatal;if("function"==typeof s){var o={hitType:"exception"};n&&(o.exDescription=i(n)),void 0!==r&&("boolean"!=typeof r?(0,A.default)("`args.fatal` must be a boolean."):o.exFatal=r),p(o,t)}}function b(e,t,n){if("function"!=typeof t)return void(0,A.default)("hitCallback function is required");if("function"==typeof s){if(!e||!e.label)return void(0,A.default)("args.label is required in outboundLink()");var r={hitType:"event",eventCategory:"Outbound",eventAction:"Click",eventLabel:i(e.label)},o=!1,a=function(){o=!0,t()},u=setTimeout(a,250),c=function(){clearTimeout(u),o||t()};r.hitCallback=c,p(r,n)}else setTimeout(t,0)}Object.defineProperty(t,"__esModule",{value:!0}),t.testModeAPI=t.OutboundLink=t.plugin=void 0;var g=Object.assign||function(e){for(var t=1;t0&&t+e.length!==n.length&&e.search(i)>-1&&":"!==n.charAt(t-2)&&("-"!==n.charAt(t+e.length)||"-"===n.charAt(t-1))&&n.charAt(t-1).search(/[^\s-]/)<0?e.toLowerCase():e.substr(1).search(/[A-Z]|\../)>-1?e:e.charAt(0).toUpperCase()+e.substr(1)})}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var o=n(1),a=function(e){return e&&e.__esModule?e:{default:e}}(o),i=/^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\.?|via)$/i},function(e,t,n){"use strict";function r(e){return"/"===e.substring(0,1)?e.substring(1):e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){!function(e,t,n,r,o,a,i){e.GoogleAnalyticsObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,a=t.createElement(n),i=t.getElementsByTagName(n)[0],a.async=1,a.src=r,i.parentNode.insertBefore(a,i)}(window,document,"script",e&&e.gaAddress?e.gaAddress:"https://www.google-analytics.com/analytics.js","ga")}},function(e,t,n){"use strict";function r(e){console.info("[react-ga]",e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=t.gaCalls=[];t.default={calls:r,ga:function(){for(var e=arguments.length,t=Array(e),n=0;n0&&"number"!=typeof e[0]))}function a(e,t,n){var a,s;if(r(e)||r(t))return!1;if(e.prototype!==t.prototype)return!1;if(c(e))return!!c(t)&&(e=i.call(e),t=i.call(t),l(e,t,n));if(o(e)){if(!o(t))return!1;if(e.length!==t.length)return!1;for(a=0;a=0;a--)if(f[a]!=p[a])return!1;for(a=f.length-1;a>=0;a--)if(s=f[a],!l(e[s],t[s],n))return!1;return typeof e==typeof t}var i=Array.prototype.slice,u=n(499),c=n(500),l=e.exports=function(e,t,n){return n||(n={}),e===t||(e instanceof Date&&t instanceof Date?e.getTime()===t.getTime():!e||!t||"object"!=typeof e&&"object"!=typeof t?n.strict?e===t:e==t:a(e,t,n))}},function(e,t){function n(e){var t=[];for(var n in e)t.push(n);return t}t=e.exports="function"==typeof Object.keys?Object.keys:n,t.shim=n},function(e,t){function n(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function r(e){return e&&"object"==typeof e&&"number"==typeof e.length&&Object.prototype.hasOwnProperty.call(e,"callee")&&!Object.prototype.propertyIsEnumerable.call(e,"callee")||!1}var o="[object Arguments]"==function(){return Object.prototype.toString.call(arguments)}();t=e.exports=o?n:r,t.supported=n,t.unsupported=r},function(e,t,n){(function(e){function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0,t.warn=t.requestAnimationFrame=t.reducePropsToState=t.mapStateOnServer=t.handleClientStateChange=t.convertReactPropstoHtmlAttributes=void 0;var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1])||arguments[1])?String(e):String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},p=function(e){var t=y(e,s.TAG_NAMES.TITLE),n=y(e,s.HELMET_PROPS.TITLE_TEMPLATE);if(n&&t)return n.replace(/%s/g,function(){return t});var r=y(e,s.HELMET_PROPS.DEFAULT_TITLE);return t||r||void 0},d=function(e){return y(e,s.HELMET_PROPS.ON_CHANGE_CLIENT_STATE)||function(){}},h=function(e,t){return t.filter(function(t){return void 0!==t[e]}).map(function(t){return t[e]}).reduce(function(e,t){return a({},e,t)},{})},m=function(e,t){return t.filter(function(e){return void 0!==e[s.TAG_NAMES.BASE]}).map(function(e){return e[s.TAG_NAMES.BASE]}).reverse().reduce(function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o=0;n--){var r=e[n];if(r.hasOwnProperty(t))return r[t]}return null},b=function(e){return{baseTag:m([s.TAG_PROPERTIES.HREF],e),bodyAttributes:h(s.ATTRIBUTE_NAMES.BODY,e),defer:y(e,s.HELMET_PROPS.DEFER),encode:y(e,s.HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),htmlAttributes:h(s.ATTRIBUTE_NAMES.HTML,e),linkTags:v(s.TAG_NAMES.LINK,[s.TAG_PROPERTIES.REL,s.TAG_PROPERTIES.HREF],e),metaTags:v(s.TAG_NAMES.META,[s.TAG_PROPERTIES.NAME,s.TAG_PROPERTIES.CHARSET,s.TAG_PROPERTIES.HTTPEQUIV,s.TAG_PROPERTIES.PROPERTY,s.TAG_PROPERTIES.ITEM_PROP],e),noscriptTags:v(s.TAG_NAMES.NOSCRIPT,[s.TAG_PROPERTIES.INNER_HTML],e),onChangeClientState:d(e),scriptTags:v(s.TAG_NAMES.SCRIPT,[s.TAG_PROPERTIES.SRC,s.TAG_PROPERTIES.INNER_HTML],e),styleTags:v(s.TAG_NAMES.STYLE,[s.TAG_PROPERTIES.CSS_TEXT],e),title:p(e),titleAttributes:h(s.ATTRIBUTE_NAMES.TITLE,e)}},g=function(){var e=Date.now();return function(t){var n=Date.now();n-e>16?(e=n,t(n)):setTimeout(function(){g(t)},0)}}(),w=function(e){return clearTimeout(e)},E="undefined"!=typeof window?window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||g:e.requestAnimationFrame||g,_="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||w:e.cancelAnimationFrame||w,O=function(e){return console&&"function"==typeof console.warn&&console.warn(e)},S=null,T=function(e){S&&_(S),e.defer?S=E(function(){C(e,function(){S=null})}):(C(e),S=null)},C=function(e,t){var n=e.baseTag,r=e.bodyAttributes,o=e.htmlAttributes,a=e.linkTags,i=e.metaTags,u=e.noscriptTags,c=e.onChangeClientState,l=e.scriptTags,f=e.styleTags,p=e.title,d=e.titleAttributes;k(s.TAG_NAMES.BODY,r),k(s.TAG_NAMES.HTML,o),x(p,d);var h={baseTag:A(s.TAG_NAMES.BASE,n),linkTags:A(s.TAG_NAMES.LINK,a),metaTags:A(s.TAG_NAMES.META,i),noscriptTags:A(s.TAG_NAMES.NOSCRIPT,u),scriptTags:A(s.TAG_NAMES.SCRIPT,l),styleTags:A(s.TAG_NAMES.STYLE,f)},m={},v={};Object.keys(h).forEach(function(e){var t=h[e],n=t.newTags,r=t.oldTags;n.length&&(m[e]=n),r.length&&(v[e]=h[e].oldTags)}),t&&t(),c(e,m,v)},P=function(e){return Array.isArray(e)?e.join(""):e},x=function(e,t){void 0!==e&&document.title!==e&&(document.title=P(e)),k(s.TAG_NAMES.TITLE,t)},k=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute(s.HELMET_ATTRIBUTE),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),u=0;u=0;p--)n.removeAttribute(a[p]);o.length===a.length?n.removeAttribute(s.HELMET_ATTRIBUTE):n.getAttribute(s.HELMET_ATTRIBUTE)!==i.join(",")&&n.setAttribute(s.HELMET_ATTRIBUTE,i.join(","))}},A=function(e,t){var n=document.head||document.querySelector(s.TAG_NAMES.HEAD),r=n.querySelectorAll(e+"["+s.HELMET_ATTRIBUTE+"]"),o=Array.prototype.slice.call(r),a=[],i=void 0;return t&&t.length&&t.forEach(function(t){var n=document.createElement(e);for(var r in t)if(t.hasOwnProperty(r))if(r===s.TAG_PROPERTIES.INNER_HTML)n.innerHTML=t.innerHTML;else if(r===s.TAG_PROPERTIES.CSS_TEXT)n.styleSheet?n.styleSheet.cssText=t.cssText:n.appendChild(document.createTextNode(t.cssText));else{var u=void 0===t[r]?"":t[r];n.setAttribute(r,u)}n.setAttribute(s.HELMET_ATTRIBUTE,"true"),o.some(function(e,t){return i=t,n.isEqualNode(e)})?o.splice(i,1):a.push(n)}),o.forEach(function(e){return e.parentNode.removeChild(e)}),a.forEach(function(e){return n.appendChild(e)}),{oldTags:o,newTags:a}},j=function(e){return Object.keys(e).reduce(function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r},"")},N=function(e,t,n,r){var o=j(n),a=P(t);return o?"<"+e+" "+s.HELMET_ATTRIBUTE+'="true" '+o+">"+f(a,r)+"":"<"+e+" "+s.HELMET_ATTRIBUTE+'="true">'+f(a,r)+""},R=function(e,t,n){return t.reduce(function(t,r){var o=Object.keys(r).filter(function(e){return!(e===s.TAG_PROPERTIES.INNER_HTML||e===s.TAG_PROPERTIES.CSS_TEXT)}).reduce(function(e,t){var o=void 0===r[t]?t:t+'="'+f(r[t],n)+'"';return e?e+" "+o:o},""),a=r.innerHTML||r.cssText||"",i=-1===s.SELF_CLOSING_TAGS.indexOf(e);return t+"<"+e+" "+s.HELMET_ATTRIBUTE+'="true" '+o+(i?"/>":">"+a+"")},"")},I=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce(function(t,n){return t[s.REACT_TAG_MAP[n]||n]=e[n],t},t)},M=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce(function(t,n){return t[s.HTML_TAG_MAP[n]||n]=e[n],t},t)},L=function(e,t,n){var r,o=(r={key:t},r[s.HELMET_ATTRIBUTE]=!0,r),a=I(n,o);return[u.default.createElement(s.TAG_NAMES.TITLE,a,t)]},D=function(e,t){return t.map(function(t,n){var r,o=(r={key:n},r[s.HELMET_ATTRIBUTE]=!0,r);return Object.keys(t).forEach(function(e){var n=s.REACT_TAG_MAP[e]||e;if(n===s.TAG_PROPERTIES.INNER_HTML||n===s.TAG_PROPERTIES.CSS_TEXT){var r=t.innerHTML||t.cssText;o.dangerouslySetInnerHTML={__html:r}}else o[n]=t[e]}),u.default.createElement(e,o)})},U=function(e,t,n){switch(e){case s.TAG_NAMES.TITLE:return{toComponent:function(){return L(0,t.title,t.titleAttributes)},toString:function(){return N(e,t.title,t.titleAttributes,n)}};case s.ATTRIBUTE_NAMES.BODY:case s.ATTRIBUTE_NAMES.HTML:return{toComponent:function(){return I(t)},toString:function(){return j(t)}};default:return{toComponent:function(){return D(e,t)},toString:function(){return R(e,t,n)}}}},F=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.linkTags,i=e.metaTags,u=e.noscriptTags,c=e.scriptTags,l=e.styleTags,f=e.title,p=void 0===f?"":f,d=e.titleAttributes;return{base:U(s.TAG_NAMES.BASE,t,r),bodyAttributes:U(s.ATTRIBUTE_NAMES.BODY,n,r),htmlAttributes:U(s.ATTRIBUTE_NAMES.HTML,o,r),link:U(s.TAG_NAMES.LINK,a,r),meta:U(s.TAG_NAMES.META,i,r),noscript:U(s.TAG_NAMES.NOSCRIPT,u,r),script:U(s.TAG_NAMES.SCRIPT,c,r),style:U(s.TAG_NAMES.STYLE,l,r),title:U(s.TAG_NAMES.TITLE,{title:p,titleAttributes:d},r)}};t.convertReactPropstoHtmlAttributes=M,t.handleClientStateChange=T,t.mapStateOnServer=F,t.reducePropsToState=b,t.requestAnimationFrame=E,t.warn=O}).call(t,n(62))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.createPageTitle=function(e,t){return t?e+" - "+t:""+e}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){if(e){switch(e.substring(e.lastIndexOf("."))){case"jpeg":case"jpg":return"image/jpeg";case"png":return"image/png";case"gif":return"image/gif";case"mp4":return"video/mp4";default:return"image/jpeg"}}return""},o=function(e,t,n,r){return[{property:"og:title",content:n},{property:"og:url",content:e},{property:"og:site_name",content:n},{property:"og:description",content:t},{property:"twitter:site",content:r},{property:"twitter:card",content:"summary"}]},a=function(e,t,n,r){var o=r.name;return[{property:"og:title",content:o+" on "+e},{property:"og:url",content:t+"/"+o+":"+r.longId},{property:"og:site_name",content:e},{property:"og:description",content:o+", a channel on "+e},{property:"twitter:site",content:n},{property:"twitter:card",content:"summary"}]},i=function(e,t,n,o,a,i){var u=o.claimData,c=u.contentType,l=e+"/"+u.claimId+"/"+u.name,s=e+"/"+u.claimId+"/"+u.name,f=e+"/"+u.claimId+"/"+u.name+"."+u.fileExt,p=u.title||u.name,d=u.description||a,h=r(u.thumbnail),m=u.thumbnail||i,v=[{property:"og:title",content:p},{property:"og:url",content:s},{property:"og:site_name",content:t},{property:"og:description",content:d},{property:"og:image:width",content:600},{property:"og:image:height",content:315},{property:"twitter:site",content:n}];return"video/mp4"===c||"video/webm"===c?(v.push({property:"og:video",content:f}),v.push({property:"og:video:secure_url",content:f}),v.push({property:"og:video:type",content:c}),v.push({property:"og:image",content:m}),v.push({property:"og:image:type",content:h}),v.push({property:"og:type",content:"video"}),v.push({property:"twitter:card",content:"player"}),v.push({property:"twitter:player",content:l}),v.push({property:"twitter:player:width",content:600}),v.push({property:"twitter:text:player_width",content:600}),v.push({property:"twitter:player:height",content:337}),v.push({property:"twitter:player:stream",content:f}),v.push({property:"twitter:player:stream:content_type",content:c})):(v.push({property:"og:image",content:f}),v.push({property:"og:image:type",content:c}),v.push({property:"og:type",content:"article"}),v.push({property:"twitter:card",content:"summary_large_image"})),v};t.createMetaTags=function(e,t,n,r,u,c,l,s){return u?i(t,n,r,u,l,s):c?a(t,n,r,c):o(e,t,n,r)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t){return t+"/"+e},o=function(e,t){var n=void 0,r=void 0,o=void 0,a=void 0;if(e.claimData){var i=e.claimData;n=i.channelName,r=i.certificateId,o=i.name,a=i.claimId}return n?t+"/"+n+":"+r+"/"+o:t+"/"+a+"/"+o},a=function(e,t){return t+"/"+e.name+":"+e.longId};t.createCanonicalLink=function(e,t,n,i){return e?o(e,i):t?a(t,i):r(n,i)}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n1e7)throw new Error("Sorry, images are limited to 10 megabytes.");break;case"image/gif":if(e.size>5e7)throw new Error("Sorry, GIFs are limited to 50 megabytes.");break;case"video/mp4":if(e.size>5e7)throw new Error("Sorry, videos are limited to 50 megabytes.");break;default:throw new Error(e.type+" is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.")}}}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function u(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var c=Object.assign||function(e){for(var t=1;t'}):c.default.createElement("input",{type:"text",id:"embed-text",className:"input-disabled input-text--full-width",readOnly:!0,onClick:this.select,spellCheck:"false",value:''})),c.default.createElement("div",{className:"column column--1"}),c.default.createElement("div",{className:"column column--2"},c.default.createElement("button",{className:"button--primary button--wide","data-elementtocopy":"embed-text",onClick:this.copyToClipboard},"copy")))))),c.default.createElement("div",{className:"flex-container--row flex-container--space-between-bottom"},c.default.createElement(l.Link,{className:"link--primary",to:"/"+t+"/"+i+"."+s},c.default.createElement("span",{className:"text"},"Direct Link")),c.default.createElement("a",{className:"link--primary",href:d+"/"+u+"/"+i+"."+s,download:i},"Download"),c.default.createElement("a",{className:"link--primary",target:"_blank",href:"https://lbry.io/dmca"},"Report")))}}]),t}(c.default.Component);t.default=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(6),o=n(550),a=function(e){return e&&e.__esModule?e:{default:e}}(o),i=function(e){var t=e.show,n=t.request.id,r=t.requestList[n]||null,o=void 0;if(r){var a=r.key;o=t.channelList[a]||null}return{channel:o}};t.default=(0,r.connect)(i,null)(a.default)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n0?l.default.createElement("div",null,t.map(function(e,t){return l.default.createElement(f.default,{claimData:e,key:e.name+"-"+t})}),l.default.createElement("div",null,n>1&&l.default.createElement("button",{className:"button--secondary",onClick:this.showPreviousResultsPage},"Previous Page"),n Date: Mon, 19 Mar 2018 14:28:19 -0700 Subject: [PATCH 05/16] Delete bundle.js.map --- public/bundle/bundle.js.map | 1 - 1 file changed, 1 deletion(-) delete mode 100644 public/bundle/bundle.js.map diff --git a/public/bundle/bundle.js.map b/public/bundle/bundle.js.map deleted file mode 100644 index c4228350..00000000 --- a/public/bundle/bundle.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///bundle.js","webpack:///webpack/bootstrap d8bb4dffe3e079942c72","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js","webpack:///./node_modules/react/index.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js","webpack:///./node_modules/prop-types/index.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js","webpack:///./node_modules/warning/browser.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js","webpack:///./node_modules/invariant/browser.js","webpack:///./node_modules/redux-saga/es/internal/utils.js","webpack:///./client/actions/publish.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_core.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_uid.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_library.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_to-absolute-index.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js","webpack:///./node_modules/redux-saga/es/internal/io.js","webpack:///./client/actions/show.js","webpack:///./client/utils/request.js","webpack:///./client/containers/NavBar/index.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_set-to-string-tag.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_string-trim.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_iterators.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_validate-collection.js","webpack:///./client/constants/show_action_types.js","webpack:///./node_modules/redux-saga/es/internal/channel.js","webpack:///./client/components/SEO/index.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_iobject.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_object-pie.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_classof.js","webpack:///./node_modules/history/PathUtils.js","webpack:///./node_modules/history/es/PathUtils.js","webpack:///./client/selectors/show.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_shared.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_array-includes.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gops.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_is-array.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_is-regexp.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-detect.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_flags.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_fix-re-wks.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_species-constructor.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_collection.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_typed.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_object-forced-pam.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-of.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-from.js","webpack:///./node_modules/fbjs/lib/emptyFunction.js","webpack:///./node_modules/history/es/LocationUtils.js","webpack:///./node_modules/redux-saga/es/internal/buffers.js","webpack:///./client/selectors/site.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_dom-create.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_wks-define.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_shared-key.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_enum-bug-keys.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_html.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_set-proto.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_string-ws.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_inherit-if-required.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_string-repeat.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_math-sign.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_math-expm1.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_string-at.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-define.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-create.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_string-context.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_fails-is-regexp.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_is-array-iter.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_create-property.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/core.get-iterator-method.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-create.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_array-fill.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.iterator.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_task.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_microtask.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_new-promise-capability.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-buffer.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_user-agent.js","webpack:///./node_modules/object-assign/index.js","webpack:///./node_modules/react-redux/es/utils/warning.js","webpack:///./node_modules/lodash-es/isPlainObject.js","webpack:///./node_modules/history/LocationUtils.js","webpack:///./node_modules/history/createTransitionManager.js","webpack:///./node_modules/react-router-dom/es/Router.js","webpack:///./node_modules/react-router/es/Router.js","webpack:///./node_modules/react-router/es/matchPath.js","webpack:///./node_modules/history/es/createTransitionManager.js","webpack:///./client/constants/publish_action_types.js","webpack:///./config/siteConfig.js","webpack:///./client/constants/asset_display_states.js","webpack:///./node_modules/redux-saga/es/internal/sagaHelpers/fsmIterator.js","webpack:///./client/actions/channel.js","webpack:///./client/components/ProgressBar/index.jsx","webpack:///./client/pages/ErrorPage/index.jsx","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_ie8-dom-define.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_wks-ext.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys-internal.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dps.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn-ext.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_object-assign.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_bind.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_invoke.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_parse-int.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_parse-float.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_a-number-value.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_is-integer.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_math-log1p.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_math-fround.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-call.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_array-reduce.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_array-copy-within.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-step.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.flags.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_perform.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_promise-resolve.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.map.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-strong.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.set.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-map.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-weak.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_to-index.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_own-keys.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_flatten-into-array.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_string-pad.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_object-to-array.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-to-json.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_array-from-iterable.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_math-scale.js","webpack:///./node_modules/fbjs/lib/emptyObject.js","webpack:///./node_modules/react-redux/es/utils/PropTypes.js","webpack:///./node_modules/react-redux/es/components/connectAdvanced.js","webpack:///./node_modules/hoist-non-react-statics/index.js","webpack:///./node_modules/redux/es/createStore.js","webpack:///./node_modules/lodash-es/_Symbol.js","webpack:///./node_modules/redux/es/compose.js","webpack:///./node_modules/react-redux/es/connect/wrapMapToProps.js","webpack:///./node_modules/resolve-pathname/index.js","webpack:///./node_modules/value-equal/index.js","webpack:///./node_modules/history/DOMUtils.js","webpack:///./node_modules/react-router-dom/es/Link.js","webpack:///./node_modules/react-router-dom/es/Route.js","webpack:///./node_modules/react-router/es/Route.js","webpack:///./node_modules/history/es/DOMUtils.js","webpack:///./client/constants/publish_channel_select_states.js","webpack:///./client/constants/channel_action_types.js","webpack:///./node_modules/redux-saga/es/index.js","webpack:///./node_modules/redux-saga/es/internal/scheduler.js","webpack:///./node_modules/redux-saga/es/internal/runSaga.js","webpack:///./node_modules/redux-saga/es/internal/proc.js","webpack:///./node_modules/redux-saga/es/internal/sagaHelpers/index.js","webpack:///./client/constants/show_request_types.js","webpack:///./client/sagas/show_asset.js","webpack:///./client/sagas/show_channel.js","webpack:///./client/constants/publish_claim_states.js","webpack:///./node_modules/react-helmet/lib/Helmet.js","webpack:///./node_modules/react-helmet/lib/HelmetConstants.js","webpack:///./client/containers/Dropzone/index.js","webpack:///./client/containers/ChannelLoginForm/index.js","webpack:///./client/containers/ChannelCreateForm/index.js","webpack:///./client/containers/AssetDisplay/index.js","webpack:///./node_modules/babel-polyfill/lib/index.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/shim.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.symbol.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_enum-keys.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.create.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-property.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-properties.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-prototype-of.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.keys.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-names.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.freeze.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.seal.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.prevent-extensions.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-frozen.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-sealed.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-extensible.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.assign.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_same-value.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.set-prototype-of.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.to-string.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.bind.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.name.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.has-instance.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-int.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-float.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.constructor.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-fixed.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-precision.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.epsilon.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-finite.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-integer.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-nan.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-safe-integer.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.max-safe-integer.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.min-safe-integer.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-float.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-int.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.acosh.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.asinh.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.atanh.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cbrt.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.clz32.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cosh.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.expm1.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.fround.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.hypot.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.imul.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log10.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log1p.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log2.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sign.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sinh.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.tanh.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.trunc.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.from-code-point.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.raw.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.trim.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.iterator.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.code-point-at.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.ends-with.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.includes.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.repeat.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.starts-with.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.anchor.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.big.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.blink.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.bold.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fixed.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontcolor.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontsize.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.italics.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.link.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.small.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.strike.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sub.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sup.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.now.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-json.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-iso-string.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-iso-string.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-string.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-primitive.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-primitive.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.is-array.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.from.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.of.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.join.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.slice.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.sort.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.for-each.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-constructor.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.map.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.filter.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.some.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.every.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce-right.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.index-of.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.last-index-of.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.copy-within.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.fill.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find-index.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.species.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.constructor.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.to-string.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.match.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.replace.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.search.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.split.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.promise.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-set.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.array-buffer.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.data-view.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int8-array.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-array.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int16-array.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint16-array.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int32-array.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint32-array.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float32-array.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float64-array.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.apply.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.construct.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.define-property.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.delete-property.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.enumerate.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-prototype-of.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.has.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.is-extensible.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.own-keys.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.prevent-extensions.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set-prototype-of.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.includes.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.flat-map.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.flatten.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.at.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-start.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-end.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-left.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-right.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.match-all.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.async-iterator.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.observable.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.values.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.entries.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-getter.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-setter.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-getter.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-setter.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.to-json.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.to-json.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.of.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.of.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-map.of.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-set.of.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.from.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.from.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-map.from.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-set.from.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.global.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.system.global.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.error.is-error.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.clamp.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.deg-per-rad.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.degrees.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.fscale.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.iaddh.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.isubh.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.imulh.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.rad-per-deg.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.radians.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.scale.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.umulh.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.signbit.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.promise.finally.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.promise.try.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.define-metadata.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.delete-metadata.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata-keys.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-metadata.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-own-metadata.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.metadata.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.asap.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es7.observable.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/web.timers.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/web.immediate.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/web.dom.iterable.js","webpack:///./node_modules/babel-polyfill/node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/fn/regexp/escape.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/core.regexp.escape.js","webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/_replacer.js","webpack:///./node_modules/whatwg-fetch/fetch.js","webpack:///./client/client.js","webpack:///./node_modules/react/cjs/react.production.min.js","webpack:///./node_modules/react-dom/index.js","webpack:///./node_modules/react-dom/cjs/react-dom.production.min.js","webpack:///./node_modules/fbjs/lib/ExecutionEnvironment.js","webpack:///./node_modules/fbjs/lib/EventListener.js","webpack:///./node_modules/fbjs/lib/getActiveElement.js","webpack:///./node_modules/fbjs/lib/shallowEqual.js","webpack:///./node_modules/fbjs/lib/containsNode.js","webpack:///./node_modules/fbjs/lib/isTextNode.js","webpack:///./node_modules/fbjs/lib/isNode.js","webpack:///./node_modules/fbjs/lib/focusNode.js","webpack:///./node_modules/react-redux/es/components/Provider.js","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/fbjs/lib/invariant.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/react-redux/es/utils/Subscription.js","webpack:///./node_modules/react-redux/es/connect/connect.js","webpack:///./node_modules/react-redux/es/utils/shallowEqual.js","webpack:///./node_modules/react-redux/es/connect/mapDispatchToProps.js","webpack:///./node_modules/lodash-es/_baseGetTag.js","webpack:///./node_modules/lodash-es/_root.js","webpack:///./node_modules/lodash-es/_freeGlobal.js","webpack:///./node_modules/lodash-es/_getRawTag.js","webpack:///./node_modules/lodash-es/_objectToString.js","webpack:///./node_modules/lodash-es/_getPrototype.js","webpack:///./node_modules/lodash-es/_overArg.js","webpack:///./node_modules/lodash-es/isObjectLike.js","webpack:///./node_modules/symbol-observable/es/index.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///./node_modules/symbol-observable/es/ponyfill.js","webpack:///./node_modules/redux/es/combineReducers.js","webpack:///./node_modules/redux/es/bindActionCreators.js","webpack:///./node_modules/redux/es/applyMiddleware.js","webpack:///./node_modules/react-redux/es/connect/mapStateToProps.js","webpack:///./node_modules/react-redux/es/connect/mergeProps.js","webpack:///./node_modules/react-redux/es/connect/selectorFactory.js","webpack:///./node_modules/react-router-dom/es/BrowserRouter.js","webpack:///./node_modules/history/createBrowserHistory.js","webpack:///./node_modules/react-router-dom/es/HashRouter.js","webpack:///./node_modules/history/createHashHistory.js","webpack:///./node_modules/react-router-dom/es/MemoryRouter.js","webpack:///./node_modules/react-router/es/MemoryRouter.js","webpack:///./node_modules/history/createMemoryHistory.js","webpack:///./node_modules/react-router-dom/es/NavLink.js","webpack:///./node_modules/react-router/node_modules/path-to-regexp/index.js","webpack:///./node_modules/react-router/node_modules/isarray/index.js","webpack:///./node_modules/react-router-dom/es/Prompt.js","webpack:///./node_modules/react-router/es/Prompt.js","webpack:///./node_modules/react-router-dom/es/Redirect.js","webpack:///./node_modules/react-router/es/Redirect.js","webpack:///./node_modules/history/es/createBrowserHistory.js","webpack:///./node_modules/history/es/createHashHistory.js","webpack:///./node_modules/history/es/createMemoryHistory.js","webpack:///./node_modules/react-router-dom/es/StaticRouter.js","webpack:///./node_modules/react-router/es/StaticRouter.js","webpack:///./node_modules/react-router-dom/es/Switch.js","webpack:///./node_modules/react-router/es/Switch.js","webpack:///./node_modules/react-router-dom/es/matchPath.js","webpack:///./node_modules/react-router-dom/es/withRouter.js","webpack:///./node_modules/react-router/es/withRouter.js","webpack:///./client/reducers/index.js","webpack:///./client/reducers/publish.js","webpack:///./client/reducers/channel.js","webpack:///./client/reducers/show.js","webpack:///./client/reducers/site.js","webpack:///./node_modules/redux-saga/es/internal/middleware.js","webpack:///./node_modules/redux-saga/es/internal/sagaHelpers/takeEvery.js","webpack:///./node_modules/redux-saga/es/internal/sagaHelpers/takeLatest.js","webpack:///./node_modules/redux-saga/es/internal/sagaHelpers/throttle.js","webpack:///./client/sagas/index.js","webpack:///./client/sagas/show_uri.js","webpack:///./client/api/assetApi.js","webpack:///./node_modules/cross-fetch/dist/browser-polyfill.js","webpack:///./client/api/channelApi.js","webpack:///./client/utils/lbryUri.js","webpack:///./client/sagas/file.js","webpack:///./client/api/fileApi.js","webpack:///./client/sagas/publish.js","webpack:///./client/selectors/publish.js","webpack:///./client/selectors/channel.js","webpack:///./client/utils/validate.js","webpack:///./client/utils/publish.js","webpack:///./client/channels/publish.js","webpack:///./client/components/GAListener/index.jsx","webpack:///./node_modules/react-ga/dist/react-ga.js","webpack:///./client/app.js","webpack:///./client/pages/HomePage/index.jsx","webpack:///./client/components/SEO/view.jsx","webpack:///./node_modules/react-side-effect/lib/index.js","webpack:///./node_modules/exenv/index.js","webpack:///./node_modules/shallowequal/index.js","webpack:///./node_modules/deep-equal/index.js","webpack:///./node_modules/deep-equal/lib/keys.js","webpack:///./node_modules/deep-equal/lib/is_arguments.js","webpack:///./node_modules/react-helmet/lib/HelmetUtils.js","webpack:///./client/utils/pageTitle.js","webpack:///./client/utils/metaTags.js","webpack:///./client/utils/canonicalLink.js","webpack:///./client/containers/NavBar/view.jsx","webpack:///./client/components/Logo/index.jsx","webpack:///./client/components/NavBarChannelOptionsDropdown/index.jsx","webpack:///./client/containers/PublishTool/index.js","webpack:///./client/containers/PublishTool/view.jsx","webpack:///./client/containers/Dropzone/view.jsx","webpack:///./client/utils/file.js","webpack:///./client/components/PublishPreview/index.jsx","webpack:///./client/containers/PublishDetails/index.js","webpack:///./client/containers/PublishDetails/view.jsx","webpack:///./client/containers/PublishTitleInput/index.js","webpack:///./client/containers/PublishTitleInput/view.jsx","webpack:///./client/containers/PublishUrlInput/index.js","webpack:///./client/containers/PublishUrlInput/view.jsx","webpack:///./client/components/PublishUrlMiddleDisplay/index.jsx","webpack:///./client/containers/PublishThumbnailInput/index.js","webpack:///./client/containers/PublishThumbnailInput/view.jsx","webpack:///./client/containers/PublishMetadataInputs/index.js","webpack:///./client/containers/PublishMetadataInputs/view.jsx","webpack:///./client/components/ExpandingTextArea/index.jsx","webpack:///./client/containers/ChannelSelect/index.js","webpack:///./client/containers/ChannelSelect/view.jsx","webpack:///./client/containers/ChannelLoginForm/view.jsx","webpack:///./client/containers/ChannelCreateForm/view.jsx","webpack:///./client/components/ActiveStatusBar/index.jsx","webpack:///./client/components/InactiveStatusBar/index.jsx","webpack:///./client/containers/PublishStatus/index.js","webpack:///./client/containers/PublishStatus/view.jsx","webpack:///./client/containers/PublishDisabledMessage/index.js","webpack:///./client/containers/PublishDisabledMessage/view.jsx","webpack:///./client/pages/AboutPage/index.jsx","webpack:///./client/pages/LoginPage/index.js","webpack:///./client/pages/LoginPage/view.jsx","webpack:///./client/pages/ShowPage/index.js","webpack:///./client/pages/ShowPage/view.jsx","webpack:///./client/containers/ShowAssetLite/index.js","webpack:///./client/containers/ShowAssetLite/view.jsx","webpack:///./client/containers/AssetDisplay/view.jsx","webpack:///./client/containers/ShowAssetDetails/index.js","webpack:///./client/containers/ShowAssetDetails/view.jsx","webpack:///./client/containers/AssetTitle/index.js","webpack:///./client/containers/AssetTitle/view.jsx","webpack:///./client/containers/AssetInfo/index.js","webpack:///./client/containers/AssetInfo/view.jsx","webpack:///./client/containers/ShowChannel/index.js","webpack:///./client/containers/ShowChannel/view.jsx","webpack:///./client/containers/ChannelClaimsDisplay/index.js","webpack:///./client/containers/ChannelClaimsDisplay/view.jsx","webpack:///./client/components/AssetPreview/index.js","webpack:///./client/components/AssetPreview/view.jsx","webpack:///./client/containers/FourOhFourPage/index.jsx","webpack:///./client/containers/FourOhFourPage/view.jsx"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","global","core","hide","redefine","ctx","$export","type","source","key","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","target","expProto","undefined","Function","U","W","R","isObject","it","TypeError","window","Math","self","__g","exec","e","__webpack_exports__","value","__WEBPACK_IMPORTED_MODULE_0__components_Provider__","__WEBPACK_IMPORTED_MODULE_1__components_connectAdvanced__","__WEBPACK_IMPORTED_MODULE_2__connect_connect__","store","uid","Symbol","USE_SYMBOL","a","anObject","IE8_DOM_DEFINE","toPrimitive","dP","f","O","Attributes","toInteger","min","defined","warning","createDesc","has","SRC","$toString","TPL","split","inspectSource","val","safe","isFunction","join","String","this","fails","quot","createHTML","string","tag","attribute","p1","replace","NAME","test","toLowerCase","length","IObject","pIE","toIObject","gOPD","getOwnPropertyDescriptor","toObject","IE_PROTO","ObjectProto","getPrototypeOf","constructor","invariant","condition","format","b","error","Error","args","argIndex","framesToPop","check","predicate","log","hasOwn","is","notUndef","remove","array","item","index","indexOf","splice","deferred","props","arguments","def","_extends","promise","Promise","resolve","reject","arrayOfDeffered","arr","push","delay","ms","timeoutId","setTimeout","CANCEL","clearTimeout","createMockTask","_ref","running","_result","_error","TASK","isRunning","result","setRunning","setResult","r","setError","makeIterator","next","thro","kThrow","isHelper","iterator","throw","return","kReturn","HELPER","level","message","console","stack","deprecate","fn","deprecationWarning","apply","sym","MATCH","SAGA_ACTION","SELF_CANCELLATION","kTrue","noop","ident","updateIncentive","internalErr","createSetContextWarning","wrapSagaDispatch","cloneableGenerator","assign","_typeof","obj","id","konst","v","undef","func","number","Array","isArray","then","iterable","task","t","observable","ob","subscribe","buffer","buf","isEmpty","take","put","pattern","pat","channel","ch","close","helper","stringableFunc","from","seed","err","done","deprecated","preferred","dispatch","action","generatorFunc","_len","_key","history","gen","arg","clone","clonedGen","forEach","exception","selectFile","file","actions","FILE_SELECTED","data","clearFile","FILE_CLEAR","updateMetadata","METADATA_UPDATE","updateClaim","CLAIM_UPDATE","setPublishInChannel","SET_PUBLISH_IN_CHANNEL","updatePublishStatus","status","PUBLISH_STATUS_UPDATE","updateError","ERROR_UPDATE","updateSelectedChannel","channelName","SELECTED_CHANNEL_UPDATE","toggleMetadataInputs","showMetadataInputs","TOGGLE_METADATA_INPUTS","onNewThumbnail","THUMBNAIL_NEW","startPublish","PUBLISH_START","_publish_action_types","newObj","default","aFunction","that","toString","slice","method","version","__e","valueOf","ceil","floor","isNaN","KEY","toLength","asc","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","create","$this","callbackfn","res","__WEBPACK_IMPORTED_MODULE_0__BrowserRouter__","__WEBPACK_IMPORTED_MODULE_1__HashRouter__","__WEBPACK_IMPORTED_MODULE_2__Link__","__WEBPACK_IMPORTED_MODULE_3__MemoryRouter__","__WEBPACK_IMPORTED_MODULE_4__NavLink__","__WEBPACK_IMPORTED_MODULE_5__Prompt__","__WEBPACK_IMPORTED_MODULE_6__Redirect__","__WEBPACK_IMPORTED_MODULE_7__Route__","__WEBPACK_IMPORTED_MODULE_8__Router__","__WEBPACK_IMPORTED_MODULE_9__StaticRouter__","__WEBPACK_IMPORTED_MODULE_10__Switch__","__WEBPACK_IMPORTED_MODULE_11__matchPath__","__WEBPACK_IMPORTED_MODULE_12__withRouter__","LIBRARY","$typed","$buffer","anInstance","propertyDesc","redefineAll","toIndex","toAbsoluteIndex","classof","isArrayIter","gOPN","getIterFn","wks","createArrayMethod","createArrayIncludes","speciesConstructor","ArrayIterators","Iterators","$iterDetect","setSpecies","arrayFill","arrayCopyWithin","$DP","$GOPD","RangeError","Uint8Array","ArrayProto","$ArrayBuffer","ArrayBuffer","$DataView","DataView","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayIndexOf","arrayValues","values","arrayKeys","keys","arrayEntries","entries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","ITERATOR","TAG","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","CONSTR","TYPED_ARRAY","TYPED","VIEW","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","set","toOffset","BYTES","offset","validate","C","speciesFromList","list","fromList","addGetter","internal","_d","$from","step","aLen","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","proto","copyWithin","start","every","fill","filter","find","findIndex","searchElement","includes","separator","map","reverse","middle","some","comparefn","subarray","begin","end","$begin","byteOffset","BYTES_PER_ELEMENT","$slice","$set","arrayLike","src","len","$iterators","isTAIndex","$getDesc","$setDesc","desc","writable","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","Base","TAC","FORCED","ABV","TypedArrayPrototype","setter","round","addElement","$offset","$length","byteLength","klass","$len","iter","concat","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","Map","shared","getOrCreateMetadataMap","targetKey","targetMetadata","keyMetadata","ordinaryHasOwnMetadata","MetadataKey","metadataMap","ordinaryGetOwnMetadata","ordinaryDefineOwnMetadata","MetadataValue","ordinaryOwnMetadataKeys","_","toMetaKey","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","fastKey","getWeak","onFreeze","meta","NEED","UNSCOPABLES","bitmap","px","random","$keys","enumBugKeys","max","dPs","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","document","open","write","lt","Properties","hiddenKeys","getOwnPropertyNames","DESCRIPTORS","SPECIES","Constructor","forbiddenField","BREAK","RETURN","patternOrChannel","__WEBPACK_IMPORTED_MODULE_0__utils__","effect","TAKE","PUT","all","effects","ALL","race","RACE","getFnCallDesc","meth","context","_fn","_fn2","CALL","cps","_len2","_key2","CPS","fork","_len3","_key3","FORK","spawn","_len4","_key4","detach","_len5","tasks","_key5","TEST_HINT","JOIN","cancel","_len6","_key6","select","selector","_len7","_key7","SELECT","actionChannel","ACTION_CHANNEL","cancelled","CANCELLED","flush","FLUSH","getContext","prop","GET_CONTEXT","setContext","SET_CONTEXT","takeEvery","worker","_len8","_key8","__WEBPACK_IMPORTED_MODULE_1__sagaHelpers__","takeLatest","_len9","_key9","throttle","_len10","_key10","takem","asEffect","IO","payload","eff","detached","maybe","sync","createAsEffectType","__WEBPACK_IMPORTED_MODULE_0__internal_io__","onHandleShowPageUri","params","HANDLE_SHOW_URI","onRequestError","REQUEST_ERROR","onNewChannelRequest","channelId","requestType","requestId","CHANNEL_REQUEST_NEW","onNewAssetRequest","extension","ASSET_REQUEST_NEW","modifier","onRequestUpdate","REQUEST_UPDATE","addRequestToRequestList","REQUEST_LIST_ADD","addAssetToAssetList","claimId","shortId","claimData","ASSET_ADD","addNewChannelToChannelList","longId","claimsData","CHANNEL_ADD","onUpdateChannelClaims","channelKey","page","CHANNEL_CLAIMS_UPDATE_ASYNC","updateChannelClaims","channelListId","CHANNEL_CLAIMS_UPDATE_SUCCESS","fileRequested","FILE_REQUESTED","updateFileAvailability","FILE_AVAILABILITY_UPDATE","updateDisplayAssetError","DISPLAY_ASSET_ERROR","_show_action_types","_show_request_types","parseJSON","response","json","checkStatus","jsonResponse","request","url","options","fetch","_ref2","_slicedToArray","sliceIterator","_arr","_n","_e","_s","_i","_reactRedux","_channel","_publish","_view","_view2","mapStateToProps","site","loggedInChannel","channelShortId","channelLongId","siteDescription","description","mapDispatchToProps","onChannelLogin","updateLoggedInChannel","onChannelLogout","connect","stat","spaces","space","non","ltrim","RegExp","rtrim","exporter","ALIAS","FORCE","trim","_t","emitter","sub","subscribers","emit","checkForbiddenStates","closed","takers","input","UNDEFINED_INPUT_ERROR","cb","END","__WEBPACK_IMPORTED_MODULE_1__buffers__","fixed","INVALID_BUFFER","__takers__","__closed__","eventChannel","none","matcher","chan","unsubscribe","isEnd","stdChannel","__WEBPACK_IMPORTED_MODULE_2__scheduler__","defaultDescription","defaultThumbnail","siteHost","host","siteTitle","title","siteTwitter","twitter","g","eval","cof","propertyIsEnumerable","ARG","tryGet","T","callee","hasBasename","addLeadingSlash","path","charAt","stripLeadingSlash","substr","prefix","stripBasename","stripTrailingSlash","parsePath","pathname","search","hash","hashIndex","searchIndex","createPath","location","selectAsset","show","requestList","assetKey","assetList","selectShowState","state","IS_INCLUDES","el","fromIndex","getOwnPropertySymbols","isRegExp","SAFE_CLOSING","riter","skipClosing","ignoreCase","multiline","unicode","sticky","SYMBOL","fns","strfn","rxfn","D","forOf","setToStringTag","inheritIfRequired","methods","common","IS_WEAK","ADDER","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","clear","getConstructor","setStrong","Typed","TypedArrayConstructors","K","__defineSetter__","COLLECTION","A","mapFn","nextItem","makeEmptyFunction","emptyFunction","thatReturns","thatReturnsFalse","thatReturnsTrue","thatReturnsNull","thatReturnsThis","thatReturnsArgument","createLocation","locationsAreEqual","__WEBPACK_IMPORTED_MODULE_0_resolve_pathname__","__WEBPACK_IMPORTED_MODULE_1_value_equal__","__WEBPACK_IMPORTED_MODULE_2__PathUtils__","currentLocation","decodeURI","URIError","ringBuffer","limit","overflowAction","pushIndex","popIndex","items","doubledLimit","ON_OVERFLOW_THROW","BUFFER_OVERFLOW","ON_OVERFLOW_SLIDE","ON_OVERFLOW_EXPAND","buffers","zeroBuffer","dropping","sliding","expanding","initialSize","selectSiteState","selectSiteHost","createElement","wksExt","$Symbol","documentElement","setPrototypeOf","buggy","__proto__","count","str","Infinity","sign","x","$expm1","expm1","TO_STRING","pos","charCodeAt","$iterCreate","BUGGY","returnThis","DEFAULT","IS_SET","IteratorPrototype","getMethod","kind","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","descriptor","searchString","re","$defineProperty","getIteratorMethod","original","endPos","addToUnscopables","iterated","_k","Arguments","defer","port","invoke","html","cel","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","removeChild","macrotask","Observer","MutationObserver","WebKitMutationObserver","isNode","head","last","notify","parent","domain","exit","enter","navigator","standalone","toggle","node","createTextNode","observe","characterData","PromiseCapability","$$resolve","$$reject","packIEEE754","mLen","nBytes","eLen","eMax","eBias","rt","pow","abs","LN2","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","PROTOTYPE","view","isLittleEndian","numIndex","intIndex","$LENGTH","WRONG_INDEX","$BUFFER","_b","$OFFSET","pack","conversion","BaseBuffer","ArrayBufferProto","j","$setInt8","setInt8","getInt8","setUint8","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","userAgent","propIsEnumerable","test1","test2","fromCharCode","test3","letter","symbols","to","__WEBPACK_IMPORTED_MODULE_0__createStore__","__WEBPACK_IMPORTED_MODULE_1__combineReducers__","__WEBPACK_IMPORTED_MODULE_2__bindActionCreators__","__WEBPACK_IMPORTED_MODULE_3__applyMiddleware__","__WEBPACK_IMPORTED_MODULE_4__compose__","isPlainObject","__WEBPACK_IMPORTED_MODULE_2__isObjectLike_js__","__WEBPACK_IMPORTED_MODULE_0__baseGetTag_js__","objectTag","__WEBPACK_IMPORTED_MODULE_1__getPrototype_js__","Ctor","funcToString","objectCtorString","funcProto","objectProto","_interopRequireDefault","_resolvePathname","_resolvePathname2","_valueEqual","_valueEqual2","_PathUtils","_warning","_warning2","createTransitionManager","prompt","setPrompt","nextPrompt","confirmTransitionTo","getUserConfirmation","callback","listeners","appendListener","isActive","notifyListeners","__WEBPACK_IMPORTED_MODULE_0_react_router_es_Router__","_classCallCheck","_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","__WEBPACK_IMPORTED_MODULE_0_warning__","__WEBPACK_IMPORTED_MODULE_0_warning___default","__WEBPACK_IMPORTED_MODULE_1_invariant__","__WEBPACK_IMPORTED_MODULE_1_invariant___default","__WEBPACK_IMPORTED_MODULE_2_react__","__WEBPACK_IMPORTED_MODULE_2_react___default","__WEBPACK_IMPORTED_MODULE_3_prop_types__","__WEBPACK_IMPORTED_MODULE_3_prop_types___default","Router","_React$Component","_temp","_this","_ret","match","computeMatch","getChildContext","router","route","isExact","componentWillMount","_this2","_props","children","Children","unlisten","listen","setState","componentWillReceiveProps","nextProps","componentWillUnmount","render","only","Component","propTypes","isRequired","contextTypes","childContextTypes","__WEBPACK_IMPORTED_MODULE_0_path_to_regexp__","__WEBPACK_IMPORTED_MODULE_0_path_to_regexp___default","patternCache","cacheCount","compilePath","cacheKey","strict","sensitive","cache","compiledPattern","matchPath","_options","_options$path","_options$exact","exact","_options$strict","_options$sensitive","_compilePath","memo","SiteConfig","analytics","googleId","assetDefaults","thumbnail","auth","sessionKey","details","publishing","additionalClaimAddresses","disabled","disabledMessage","primaryClaimAddress","thumbnailChannel","thumbnailChannelId","uploadDirectory","configure","config","LOCAL_CHECK","UNAVAILABLE","ERROR","AVAILABLE","safeName","entry","fsmIterator","fsm","q0","qNext","qEnd","updateState","_fsm$qNext","q","output","_updateState","CHANNEL_UPDATE","_channel_action_types","_createClass","defineProperties","protoProps","staticProps","_react","_react2","_propTypes","_propTypes2","_ActiveStatusBar","_ActiveStatusBar2","_InactiveStatusBar","_InactiveStatusBar2","ProgressBar","bars","incrementer","createBars","bind","startProgressBar","updateProgressBar","stopProgressBar","size","updateInterval","setInterval","clearInterval","bar","_NavBar","_NavBar2","ErrorPage","className","names","getKeys","windowNames","getWindowNames","gOPS","$assign","k","getSymbols","isEnum","factories","construct","partArgs","bound","un","$parseInt","parseInt","$trim","ws","hex","radix","$parseFloat","parseFloat","msg","isFinite","log1p","EPSILON","EPSILON32","MAX32","MIN32","roundTiesToEven","fround","$abs","$sign","ret","isRight","inc","flags","newPromiseCapability","promiseCapability","strong","getEntry","$iterDefine","SIZE","_f","_l","delete","prev","add","InternalMap","each","weak","uncaughtFrozenStore","ufstore","tmp","$WeakMap","freeze","$has","UncaughtFrozenStore","findUncaughtFrozen","Reflect","ownKeys","flattenIntoArray","sourceLen","depth","mapper","thisArg","element","spreadable","targetIndex","sourceIndex","IS_CONCAT_SPREADABLE","repeat","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","isEntries","scale","inLow","inHigh","outLow","outHigh","emptyObject","subscriptionShape","storeShape","__WEBPACK_IMPORTED_MODULE_0_prop_types__","__WEBPACK_IMPORTED_MODULE_0_prop_types___default","shape","trySubscribe","tryUnsubscribe","notifyNestedSubs","isSubscribed","getState","_objectWithoutProperties","makeSelectorStateful","sourceSelector","shouldComponentUpdate","connectAdvanced","selectorFactory","_contextTypes","_childContextTypes","_ref$getDisplayName","getDisplayName","_ref$methodName","methodName","_ref$renderCountProp","renderCountProp","_ref$shouldHandleStat","shouldHandleStateChanges","_ref$storeKey","storeKey","_ref$withRef","withRef","connectOptions","subscriptionKey","hotReloadingVersion","__WEBPACK_IMPORTED_MODULE_4__utils_PropTypes__","WrappedComponent","JSON","stringify","wrappedComponentName","displayName","selectorFactoryOptions","Connect","_Component","renderCount","propsMode","Boolean","setWrappedInstance","initSelector","initSubscription","subscription","componentDidMount","forceUpdate","getWrappedInstance","wrappedInstance","ref","parentSub","__WEBPACK_IMPORTED_MODULE_3__utils_Subscription__","onStateChange","componentDidUpdate","notifyNestedSubsOnComponentDidUpdate","dummyState","addExtraProps","withExtras","__WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics___default","__WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics__","factory","REACT_STATICS","defaultProps","getDefaultProps","getDerivedStateFromProps","mixins","KNOWN_STATICS","caller","arity","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","createStore","reducer","preloadedState","enhancer","ensureCanMutateNextListeners","nextListeners","currentListeners","currentState","__WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__","isDispatching","currentReducer","replaceReducer","nextReducer","ActionTypes","INIT","outerSubscribe","observer","observeState","__WEBPACK_IMPORTED_MODULE_1_symbol_observable__","__WEBPACK_IMPORTED_MODULE_0__root_js__","compose","funcs","wrapMapToPropsConstant","getConstant","constantSelector","constant","dependsOnOwnProps","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","proxy","stateOrDispatch","ownProps","isAbsolute","spliceOne","pop","resolvePathname","toParts","fromParts","isToAbs","isFromAbs","mustEndAbs","hasTrailingSlash","up","part","unshift","valueEqual","aType","aValue","bValue","aKeys","bKeys","canUseDOM","attachEvent","removeEventListener","detachEvent","getConfirmation","confirm","supportsHistory","ua","supportsPopStateOnHashChange","supportsGoWithoutReloadUsingHash","isExtraneousPopstateEvent","__WEBPACK_IMPORTED_MODULE_0_react__","__WEBPACK_IMPORTED_MODULE_0_react___default","__WEBPACK_IMPORTED_MODULE_1_prop_types__","__WEBPACK_IMPORTED_MODULE_1_prop_types___default","__WEBPACK_IMPORTED_MODULE_2_invariant__","__WEBPACK_IMPORTED_MODULE_2_invariant___default","isModifiedEvent","metaKey","altKey","ctrlKey","shiftKey","Link","handleClick","onClick","defaultPrevented","button","preventDefault","_this$props","innerRef","href","createHref","bool","oneOfType","__WEBPACK_IMPORTED_MODULE_0_react_router_es_Route__","__WEBPACK_IMPORTED_MODULE_4__matchPath__","isEmptyChildren","Route","computedMatch","component","nextContext","_context$router","staticContext","LOGIN","CREATE","__WEBPACK_IMPORTED_MODULE_0__internal_middleware__","__WEBPACK_IMPORTED_MODULE_1__internal_runSaga__","__WEBPACK_IMPORTED_MODULE_2__internal_channel__","__WEBPACK_IMPORTED_MODULE_3__internal_buffers__","__WEBPACK_IMPORTED_MODULE_4__internal_sagaHelpers__","__WEBPACK_IMPORTED_MODULE_5__internal_utils__","__WEBPACK_IMPORTED_MODULE_6__internal_io__","__WEBPACK_IMPORTED_MODULE_7__effects__","__WEBPACK_IMPORTED_MODULE_8__utils__","suspend","release","asap","semaphore","shift","runSaga","storeInterface","saga","NON_GENERATOR_ERR","_storeInterface","sagaMonitor","logger","onError","effectId","effectTriggered","effectResolved","effectRejected","effectCancelled","actionDispatched","root","parentEffectId","__WEBPACK_IMPORTED_MODULE_1__proc__","RUN_SAGA_SIGNATURE","_defineEnumerableProperties","descs","matchers","wildcard","forkQueue","mainTask","abort","cancelAll","addTask","cont","isErr","completed","getTasks","taskNames","createTaskIterator","pc","proc","cancelMain","isCancelled","TASK_CANCEL","_isRunning","_isCancelled","taskQueue","CHANNEL_END","isMainRunning","runEffect","logError","sagaStack","_isAborted","_deferredEnd","joiners","currCb","effectSettled","label","resolvePromise","runForkEffect","wrapHelper","resolveIterator","runParallelEffect","__WEBPACK_IMPORTED_MODULE_2__io__","runTakeEffect","runPutEffect","runAllEffect","runRaceEffect","runCallEffect","runCPSEffect","runJoinEffect","runCancelEffect","runSelectEffect","runChannelEffect","runFlushEffect","runCancelledEffect","runGetContextEffect","runSetContextEffect","cancelPromise","taskContext","takeCb","inp","__WEBPACK_IMPORTED_MODULE_3__channel__","_ref3","__WEBPACK_IMPORTED_MODULE_1__scheduler__","_ref4","_ref5","cpsCb","_ref6","taskIterator","_task","joiner","isAborted","taskToCancel","checkEffectEnd","completedCount","results","childCbs","chCbAtKey","_response","_ref7","_ref8","__WEBPACK_IMPORTED_MODULE_4__buffers__","parentContext","NOT_ITERATOR_ERROR","_done","_ref9","_mutatorMap","patterns","_predicate","__WEBPACK_IMPORTED_MODULE_0__takeEvery__","__WEBPACK_IMPORTED_MODULE_1__takeLatest__","__WEBPACK_IMPORTED_MODULE_2__throttle__","__WEBPACK_IMPORTED_MODULE_3__utils__","helperName","CHANNEL","ASSET_LITE","ASSET_DETAILS","newAssetRequest","_action$data","regeneratorRuntime","wrap","_context","_effects","_show","_show2","sent","_site","abrupt","_assetApi","getLongClaimId","t0","getShortId","t1","getClaimData","t2","stop","_marked","watchNewAssetRequest","_context2","_marked2","mark","newChannelRequest","_ref$data","_channelApi","getChannelData","longChannelClaimId","shortChannelClaimId","channelList","getChannelClaims","watchNewChannelRequest","getNewClaimsAndUpdateChannel","_action$data2","_context3","_marked3","watchUpdateChannelClaims","_context4","_marked4","LOAD_START","LOADING","PUBLISHING","SUCCESS","FAILED","Helmet","_reactSideEffect","_reactSideEffect2","_deepEqual","_deepEqual2","_HelmetUtils","_HelmetConstants","NullComponent","HelmetSideEffects","reducePropsToState","handleClientStateChange","mapStateOnServer","HelmetExport","_class","HelmetWrapper","mapNestedChildrenToProps","child","nestedChildren","TAG_NAMES","SCRIPT","NOSCRIPT","innerHTML","STYLE","cssText","flattenArrayTypeChildren","_extends2","arrayTypeChildren","newChildProps","mapObjectTypeChildren","_extends3","_extends4","newProps","TITLE","titleAttributes","BODY","bodyAttributes","HTML","htmlAttributes","mapArrayTypeChildrenToProps","newFlattenedProps","arrayChildName","_extends5","warnOnInvalidChildren","mapChildrenToProps","_child$props","childProps","convertReactPropstoHtmlAttributes","LINK","base","arrayOf","defaultTitle","encodeSpecialCharacters","link","noscript","onChangeClientState","script","titleTemplate","peek","rewind","mappedState","baseTag","linkTags","metaTags","noscriptTags","scriptTags","styleTags","renderStatic","ATTRIBUTE_NAMES","BASE","HEAD","REACT_TAG_MAP","VALID_TAG_NAMES","TAG_PROPERTIES","CHARSET","CSS_TEXT","HREF","HTTPEQUIV","INNER_HTML","ITEM_PROP","PROPERTY","REL","accesskey","charset","class","contenteditable","contextmenu","http-equiv","itemprop","tabindex","HELMET_PROPS","DEFAULT_TITLE","DEFER","ENCODE_SPECIAL_CHARACTERS","ON_CHANGE_CLIENT_STATE","TITLE_TEMPLATE","HTML_TAG_MAP","SELF_CLOSING_TAGS","HELMET_ATTRIBUTE","publish","fileError","setFileError","displayAsset","asset","onFileRequest","define","DEFINE_PROPERTY","_babelPolyfill","padStart","padEnd","$fails","wksDefine","enumKeys","_create","gOPNExt","$JSON","_stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","USE_NATIVE","QObject","findChild","setSymbolDesc","protoDesc","isSymbol","$defineProperties","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","for","keyFor","useSetter","useSimple","replacer","$replacer","$getPrototypeOf","$freeze","$seal","$preventExtensions","$isFrozen","$isSealed","$isExtensible","y","FProto","nameRE","HAS_INSTANCE","FunctionProto","$Number","BROKEN_COF","TRIM","toNumber","argument","third","maxCode","first","code","digits","aNumberValue","$toFixed","toFixed","multiply","c2","divide","numToString","acc","x2","fractionDigits","z","$toPrecision","toPrecision","precision","_isFinite","isInteger","isSafeInteger","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","Number","sqrt","$acosh","acosh","MAX_VALUE","asinh","$asinh","$atanh","atanh","cbrt","clz32","LOG2E","cosh","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$fromCodePoint","fromCodePoint","raw","callSite","tpl","$at","point","codePointAt","$endsWith","endsWith","endPosition","$startsWith","startsWith","color","Date","getTime","toJSON","toISOString","pv","$toISOString","lz","num","getUTCFullYear","getUTCMilliseconds","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","DateProto","hint","createProperty","upTo","cloned","$sort","$forEach","STRICT","$filter","$some","$every","$reduce","$indexOf","NEGATIVE_ZERO","$find","forced","$flags","$RegExp","re1","re2","CORRECT_NEW","tiRE","piRE","fiU","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SEARCH","$search","SPLIT","$split","_split","$push","LENGTH","NPCG","separator2","lastIndex","lastLength","lastLastIndex","splitLimit","separatorCopy","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","microtask","newPromiseCapabilityModule","perform","promiseResolve","$Promise","empty","FakePromise","PromiseRejectionEvent","isThenable","isReject","chain","_c","_v","ok","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","unhandled","isUnhandled","onunhandledrejection","reason","_a","onrejectionhandled","$reject","_w","$resolve","executor","onFulfilled","onRejected","catch","capability","remaining","$index","alreadyCalled","$isView","isView","final","viewS","viewT","init","rApply","fApply","thisArgument","argumentsList","L","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","Enumerate","enumerate","receiver","getProto","V","existingDescriptor","ownDesc","setProto","$includes","arraySpeciesCreate","flatMap","flatten","depthArg","at","$pad","getFlags","RegExpProto","$RegExpStringIterator","_r","matchAll","rx","getOwnPropertyDescriptors","getDesc","$values","__defineGetter__","__lookupGetter__","__lookupSetter__","isError","clamp","lower","upper","DEG_PER_RAD","PI","RAD_PER_DEG","degrees","radians","fscale","iaddh","x0","x1","y0","y1","$x0","$x1","$y0","isubh","imulh","u","$u","$v","u0","v0","u1","v1","umulh","signbit","finally","onFinally","try","metadata","defineMetadata","metadataKey","metadataValue","deleteMetadata","ordinaryGetMetadata","getMetadata","Set","ordinaryMetadataKeys","oKeys","pKeys","getMetadataKeys","getOwnMetadata","getOwnMetadataKeys","ordinaryHasMetadata","hasMetadata","hasOwnMetadata","$metadata","OBSERVABLE","cleanupSubscription","cleanup","subscriptionClosed","_o","closeSubscription","Subscription","subscriber","SubscriptionObserver","complete","$Observable","Observable","MSIE","time","boundArgs","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","makeInvokeMethod","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","AsyncIterator","record","__await","unwrapped","enqueue","callInvokeWithMethodAndArg","previousPromise","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","_sent","dispatchException","GenStateSuspendedYield","info","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iteratorMethod","iteratorSymbol","Op","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","inModule","runtime","NativeIteratorPrototype","Gp","isGeneratorFunction","genFun","ctor","awrap","async","skipTempReset","rootEntry","rootRecord","rval","handle","loc","caught","hasCatch","hasFinally","finallyEntry","finish","thrown","delegateYield","escape","$re","regExp","normalizeName","normalizeValue","iteratorFor","support","Headers","headers","append","header","consumed","body","bodyUsed","fileReaderReady","reader","onload","onerror","readBlobAsArrayBuffer","blob","FileReader","readAsArrayBuffer","readBlobAsText","readAsText","readArrayBufferAsText","chars","bufferClone","Body","_initBody","_bodyInit","_bodyText","Blob","isPrototypeOf","_bodyBlob","formData","FormData","_bodyFormData","searchParams","URLSearchParams","arrayBuffer","isDataView","_bodyArrayBuffer","isArrayBufferView","rejected","text","decode","parse","normalizeMethod","upcased","toUpperCase","Request","credentials","mode","referrer","form","decodeURIComponent","parseHeaders","rawHeaders","line","parts","Response","bodyInit","statusText","viewClasses","oldValue","redirectStatuses","redirect","xhr","XMLHttpRequest","getAllResponseHeaders","responseURL","responseText","ontimeout","withCredentials","responseType","setRequestHeader","send","polyfill","_reactDom","_redux","_reactRouterDom","_reducers","_reducers2","_reduxSaga","_reduxSaga2","_sagas","_sagas2","_GAListener","_GAListener2","_app","_app2","__PRELOADED_STATE__","sagaMiddleware","middleware","applyMiddleware","reduxMiddleware","__REDUX_DEVTOOLS_EXTENSION__","hydrate","Provider","BrowserRouter","getElementById","encodeURIComponent","refs","updater","J","H","I","h","$$typeof","_owner","current","=",":","N","M","keyPrefix","Q","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","isReactComponent","isPureReactComponent","unstable_isAsyncReactComponent","__self","__source","toArray","PureComponent","unstable_AsyncComponent","Fragment","cloneElement","createFactory","isValidElement","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","pa","va","oa","wa","hasBooleanValue","hasStringBooleanValue","hasOverloadedBooleanValue","Ia","Ja","_hasCaughtError","_caughtError","Ka","_hasRethrowError","_rethrowError","Na","La","Ma","Oa","extractEvents","eventTypes","Pa","phasedRegistrationNames","Qa","registrationName","Ra","Sa","dependencies","Ta","Ua","Za","currentTarget","Ya","invokeGuardedCallbackAndCatchFirstError","$a","ab","_dispatchListeners","_dispatchInstances","isPropagationStopped","isPersistent","db","gb","ib","stateNode","Wa","jb","kb","bb","lb","rethrowCaughtError","pb","parentNode","qb","rb","tb","ub","vb","dispatchConfig","wb","_targetInst","xb","yb","zb","Ab","Bb","alternate","Eb","Db","Fb","_fallbackText","_startText","Gb","_root","nativeEvent","Interface","isDefaultPrevented","returnValue","Kb","eventPool","Lb","destructor","Jb","getPooled","Mb","Nb","dc","Pb","keyCode","ec","detail","gc","which","cc","ac","hc","fc","Vb","char","$b","mc","Xa","jc","restoreControlledState","oc","kc","lc","rc","tc","sc","vc","nodeName","uc","wc","srcElement","correspondingUseElement","nodeType","yc","setAttribute","xc","implementation","hasFeature","zc","Ac","getValue","setValue","stopTracking","_valueTracker","Bc","Cc","checked","Ec","Dc","change","Hc","Ic","Jc","Lc","Fc","Mc","Gc","propertyName","Nc","Oc","Pc","$c","bd","dd","getModifierState","cd","ed","fd","jd","kd","effectTag","ld","_reactInternalFiber","md","nd","sibling","od","pd","rd","targetInst","ancestors","containerInfo","sd","topLevelType","ud","td","ba","vd","wd","capture","qd","yd","Cd","Ad","zd","Bd","Hd","Gd","Fd","Ed","Id","firstChild","Jd","textContent","nextSibling","Kd","contentEditable","Rd","Qd","Nd","da","selectionStart","selectionEnd","getSelection","anchorNode","anchorOffset","focusNode","focusOffset","Pd","ea","Md","Od","Td","Ud","Vd","Wd","charCode","Zd","$d","ae","be","ce","he","ge","ke","le","je","ie","me","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","ne","X","oe","cursor","pe","qe","__reactInternalMemoizedMergedChildContext","Y","memoizedState","updateQueue","memoizedProps","pendingProps","internalContextTag","lastEffect","firstEffect","nextEffect","expirationTime","se","te","ue","ve","we","xe","ye","pendingChildren","Be","Ce","isDisabled","supportsFiber","inject","ze","onCommitFiberRoot","Ae","onCommitFiberUnmount","De","Ee","Fe","baseState","callbackList","hasForceUpdate","isInitialized","Ge","He","Ie","partialState","Je","isReplace","isForced","Ke","Le","nextCallback","adoptClassInstance","constructClassInstance","mountClassInstance","updateClassInstance","componentWillUpdate","Xe","We","Ze","_stringRef","$e","af","Re","Ve","Se","Te","Ue","Ye","df","cf","bf","pendingContext","shouldSetTextContent","useSyncScheduling","shouldDeprioritizeSubtree","pushHostContext","pushHostContainer","enterHydrationState","resetHydrationState","tryToClaimNextHydratableInstance","Ob","beginWork","beginFailedWork","ef","createInstance","createTextInstance","appendInitialChild","finalizeInitialChildren","prepareUpdate","persistence","getRootHostContainer","popHostContext","getHostContext","popHostContainer","prepareToHydrateHostInstance","prepareToHydrateHostTextInstance","popHydrationState","mutation","completeWork","ff","getPublicInstance","commitMount","commitUpdate","resetTextContent","commitTextUpdate","appendChildToContainer","insertBefore","insertInContainerBefore","removeChildFromContainer","commitResetTextContent","commitPlacement","commitDeletion","commitWork","commitLifeCycles","commitAttachRef","commitDetachRef","hf","gf","getChildHostContext","getRootHostContext","resetHostContainer","jf","hydration","canHydrateInstance","canHydrateTextInstance","getNextHydratableSibling","getFirstHydratableChild","hydrateInstance","hydrateTextInstance","kf","Qb","ja","isReadyForCommit","yg","zg","Ag","Ne","Oe","Sc","Bg","Tc","Cg","Dg","Eg","componentDidCatch","componentStack","ca","Qc","ha","qa","Fg","rg","Gg","Uc","ra","Rc","eb","qg","_debugOwner","_debugSource","fileName","lineNumber","componentName","errorBoundary","errorBoundaryFound","errorBoundaryName","willRetry","suppressReactErrorLogging","Vc","ka","Hg","Rb","Ig","nextScheduledRoot","remainingExpirationTime","sa","Fa","la","Sb","ma","na","Wc","Pe","Tb","Jg","Xc","Kg","timeout","fb","Yc","Ub","Zc","finishedWork","timeRemaining","Lg","Me","scheduleDeferredCallback","cancelDeferredCallback","prepareForCommit","resetAfterCommit","computeAsyncExpiration","computeExpirationForFiber","scheduleWork","batchedUpdates","unbatchedUpdates","flushSync","deferredUpdates","lf","createContainer","updateContainer","getPublicRootInstance","findHostInstance","findHostInstanceWithNoPortals","injectIntoDevTools","findFiberByHostInstance","findHostInstanceByFiber","pf","Hf","Gf","Ff","Ef","If","mutationMethod","hasNumericValue","hasPositiveNumericValue","Jf","mustUseProperty","attributeName","attributeNamespace","setAttributeNS","Kf","removeAttribute","Lf","defaultChecked","defaultValue","_wrapperState","initialValue","initialChecked","Mf","controlled","Nf","Of","Pf","Qf","aa","Rf","Sf","selected","defaultSelected","Tf","wasMultiple","multiple","Uf","dangerouslySetInnerHTML","Vf","Wf","Xf","Zf","$f","cg","lastChild","nodeValue","fg","dg","setProperty","hg","gg","ig","lg","ownerDocument","topBlur","topFocus","topCancel","topClose","Dd","ng","jg","createElementNS","og","pg","mg","kg","__html","bg","onclick","sg","tg","ug","vg","Ng","Og","hasAttribute","Pg","_reactRootContainer","Z","Qg","Rg","fa","ia","suppressContentEditableWarning","suppressHydrationWarning","ta","MUST_USE_PROPERTY","HAS_BOOLEAN_VALUE","HAS_NUMERIC_VALUE","HAS_POSITIVE_NUMERIC_VALUE","HAS_OVERLOADED_BOOLEAN_VALUE","HAS_STRING_BOOLEAN_VALUE","injectDOMPropertyConfig","DOMAttributeNamespaces","DOMAttributeNames","DOMMutationMethods","xa","ya","za","Aa","Ba","Ca","Da","allowFullScreen","autoFocus","autoPlay","cols","controls","download","draggable","formNoValidate","hidden","loop","muted","noValidate","playsInline","readOnly","required","reversed","rows","rowSpan","scoped","seamless","span","spellCheck","tabIndex","itemScope","acceptCharset","htmlFor","httpEquiv","validity","badInput","activeElement","Ea","xlink","xml","Ga","autoReverse","externalResourcesRequired","preserveAlpha","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlSpace","Ha","injection","injectErrorUtils","invokeGuardedCallback","hasCaughtError","clearCaughtError","Va","plugins","eventNameDispatchConfigs","registrationNameModules","registrationNameDependencies","possibleRegistrationNames","injectEventPluginOrder","injectEventPluginsByName","hb","mb","getListener","enqueueEvents","processEventQueue","nb","sb","precacheFiberNode","getClosestInstanceFromNode","getInstanceFromNode","getNodeFromInstance","getFiberCurrentPropsFromNode","updateFiberProps","Cb","accumulateTwoPhaseDispatches","accumulateTwoPhaseDispatchesSkipTarget","accumulateEnterLeaveDispatches","accumulateDirectDispatches","Hb","Ib","eventPhase","bubbles","cancelable","timeStamp","isTrusted","stopPropagation","cancelBubble","persist","augmentClass","Wb","documentMode","Xb","Yb","opera","Zb","bc","beforeInput","bubbled","captured","compositionEnd","compositionStart","compositionUpdate","ic","nc","injectFiberControlledHostComponent","qc","enqueueStateRestore","restoreStateIfNeeded","date","datetime","datetime-local","email","month","password","range","tel","week","Kc","ad","_isInputEventSupported","getAttribute","Alt","Control","Meta","Shift","screenX","screenY","clientX","clientY","pageX","pageY","buttons","relatedTarget","fromElement","toElement","gd","mouseEnter","mouseLeave","hd","defaultView","parentWindow","xd","_enabled","_handleTopLevel","setHandleTopLevel","setEnabled","isEnabled","trapBubbledEvent","trapCapturedEvent","dispatchEvent","animationend","animationiteration","animationstart","transitionend","animation","transition","topAbort","topAnimationEnd","topAnimationIteration","topAnimationStart","topCanPlay","topCanPlayThrough","topChange","topClick","topCompositionEnd","topCompositionStart","topCompositionUpdate","topContextMenu","topCopy","topCut","topDoubleClick","topDrag","topDragEnd","topDragEnter","topDragExit","topDragLeave","topDragOver","topDragStart","topDrop","topDurationChange","topEmptied","topEncrypted","topEnded","topError","topInput","topKeyDown","topKeyPress","topKeyUp","topLoadedData","topLoad","topLoadedMetadata","topLoadStart","topMouseDown","topMouseMove","topMouseOut","topMouseOver","topMouseUp","topPaste","topPause","topPlay","topPlaying","topProgress","topRateChange","topScroll","topSeeked","topSeeking","topSelectionChange","topStalled","topSuspend","topTextInput","topTimeUpdate","topToggle","topTouchCancel","topTouchEnd","topTouchMove","topTouchStart","topTransitionEnd","topVolumeChange","topWaiting","topWheel","Ld","Sd","onSelect","animationName","elapsedTime","pseudoElement","clipboardData","Xd","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Yd","8","9","12","13","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","45","46","112","113","114","115","116","117","118","119","120","121","122","123","144","145","224","locale","dataTransfer","touches","targetTouches","changedTouches","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","de","ee","fe","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","Qe","mf","nf","qf","performance","rf","sf","tf","requestIdleCallback","cancelIdleCallback","Bf","uf","vf","wf","xf","yf","zf","Af","didTimeout","Cf","requestAnimationFrame","Df","Yf","mathml","svg","ag","MSApp","execUnsafeLocalFunction","namespaceURI","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","eg","substring","menuitem","area","br","col","embed","hr","img","keygen","param","track","wbr","wg","setInitialProperties","diffProperties","updateProperties","diffHydratedProperties","diffHydratedText","warnForUnmatchedText","warnForDeletedHydratableElement","warnForDeletedHydratableText","warnForInsertedHydratedElement","warnForInsertedHydratedText","querySelectorAll","xg","Mg","tagName","rangeCount","focusedElem","selectionRange","extend","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","top","scrollTop","focus","didNotMatchHydratedContainerTextInstance","didNotMatchHydratedTextInstance","didNotHydrateContainerInstance","didNotHydrateInstance","didNotFindHydratableContainerInstance","didNotFindHydratableContainerTextInstance","didNotFindHydratableInstance","didNotFindHydratableTextInstance","unmount","Sg","createPortal","findDOMNode","unstable_renderSubtreeIntoContainer","unmountComponentAtNode","unstable_createPortal","unstable_batchedUpdates","unstable_deferredUpdates","EventPluginHub","EventPluginRegistry","EventPropagators","ReactControlledComponent","ReactDOMComponentTree","ReactDOMEventListener","bundleType","rendererPackageName","Tg","Ug","ExecutionEnvironment","canUseWorkers","Worker","canUseEventListeners","canUseViewport","screen","isInWorker","EventListener","eventType","registerDefault","getActiveElement","doc","shallowEqual","objA","objB","keysA","keysB","containsNode","outerNode","innerNode","isTextNode","contains","compareDocumentPosition","Node","createProvider","_Provider$childContex","subKey","__WEBPACK_IMPORTED_MODULE_2__utils_PropTypes__","ReactPropTypesSecret","shim","propName","propFullName","secret","getShim","ReactPropTypes","symbol","any","instanceOf","objectOf","oneOf","checkPropTypes","PropTypes","validateFormat","createListenerCollection","CLEARED","nullListeners","addNestedSub","strictEqual","__WEBPACK_IMPORTED_MODULE_0__components_connectAdvanced__","__WEBPACK_IMPORTED_MODULE_1__utils_shallowEqual__","__WEBPACK_IMPORTED_MODULE_2__mapDispatchToProps__","__WEBPACK_IMPORTED_MODULE_3__mapStateToProps__","__WEBPACK_IMPORTED_MODULE_4__mergeProps__","__WEBPACK_IMPORTED_MODULE_5__selectorFactory__","_ref$connectHOC","connectHOC","_ref$mapStateToPropsF","mapStateToPropsFactories","_ref$mapDispatchToPro","mapDispatchToPropsFactories","_ref$mergePropsFactor","mergePropsFactories","_ref$selectorFactory","mergeProps","_ref2$pure","pure","_ref2$areStatesEqual","areStatesEqual","_ref2$areOwnPropsEqua","areOwnPropsEqual","_ref2$areStatePropsEq","areStatePropsEqual","_ref2$areMergedPropsE","areMergedPropsEqual","extraOptions","initMapStateToProps","initMapDispatchToProps","initMergeProps","whenMapDispatchToPropsIsFunction","__WEBPACK_IMPORTED_MODULE_1__wrapMapToProps__","whenMapDispatchToPropsIsMissing","whenMapDispatchToPropsIsObject","__WEBPACK_IMPORTED_MODULE_0_redux__","baseGetTag","undefinedTag","nullTag","symToStringTag","__WEBPACK_IMPORTED_MODULE_1__getRawTag_js__","__WEBPACK_IMPORTED_MODULE_2__objectToString_js__","__WEBPACK_IMPORTED_MODULE_0__Symbol_js__","__WEBPACK_IMPORTED_MODULE_0__freeGlobal_js__","freeSelf","freeGlobal","getRawTag","isOwn","unmasked","nativeObjectToString","objectToString","__WEBPACK_IMPORTED_MODULE_0__overArg_js__","getPrototype","overArg","transform","isObjectLike","__WEBPACK_IMPORTED_MODULE_0__ponyfill_js__","originalModule","webpackPolyfill","symbolObservablePonyfill","getUndefinedStateErrorMessage","actionType","assertReducerShape","reducers","combineReducers","reducerKeys","finalReducers","finalReducerKeys","shapeAssertionError","hasChanged","nextState","previousStateForKey","nextStateForKey","errorMessage","bindActionCreator","actionCreator","bindActionCreators","actionCreators","boundActionCreators","middlewares","_dispatch","middlewareAPI","__WEBPACK_IMPORTED_MODULE_0__compose__","whenMapStateToPropsIsFunction","__WEBPACK_IMPORTED_MODULE_0__wrapMapToProps__","whenMapStateToPropsIsMissing","defaultMergeProps","stateProps","dispatchProps","wrapMergePropsFunc","hasRunOnce","mergedProps","nextMergedProps","whenMergePropsIsFunction","whenMergePropsIsOmitted","impureFinalPropsSelectorFactory","pureFinalPropsSelectorFactory","handleFirstCall","firstState","firstOwnProps","hasRunAtLeastOnce","handleNewPropsAndNewState","handleNewProps","handleNewState","nextStateProps","statePropsChanged","handleSubsequentCalls","nextOwnProps","propsChanged","stateChanged","finalPropsSelectorFactory","__WEBPACK_IMPORTED_MODULE_1_react__","__WEBPACK_IMPORTED_MODULE_1_react___default","__WEBPACK_IMPORTED_MODULE_2_prop_types__","__WEBPACK_IMPORTED_MODULE_2_prop_types___default","__WEBPACK_IMPORTED_MODULE_3_history_createBrowserHistory__","__WEBPACK_IMPORTED_MODULE_3_history_createBrowserHistory___default","__WEBPACK_IMPORTED_MODULE_4__Router__","basename","forceRefresh","keyLength","_invariant","_invariant2","_LocationUtils","_createTransitionManager","_createTransitionManager2","_DOMUtils","getHistoryState","createBrowserHistory","globalHistory","canUseHistory","needsHashChangeListener","_props$forceRefresh","_props$getUserConfirm","_props$keyLength","getDOMLocation","historyState","_window$location","createKey","transitionManager","handlePopState","handlePop","handleHashChange","forceNextPop","revertPop","fromLocation","toLocation","allKeys","delta","go","initialLocation","pushState","prevIndex","nextKeys","replaceState","goBack","goForward","listenerCount","checkDOMListeners","isBlocked","block","unblock","__WEBPACK_IMPORTED_MODULE_3_history_createHashHistory__","__WEBPACK_IMPORTED_MODULE_3_history_createHashHistory___default","HashRouter","hashType","HashPathCoders","hashbang","encodePath","decodePath","noslash","slash","getHashPath","pushHashPath","replaceHashPath","createHashHistory","canGoWithoutReload","_props$hashType","_HashPathCoders$hashT","ignorePath","encodedPath","prevLocation","allPaths","nextPaths","__WEBPACK_IMPORTED_MODULE_0_react_router_es_MemoryRouter__","__WEBPACK_IMPORTED_MODULE_3_history_createMemoryHistory__","__WEBPACK_IMPORTED_MODULE_3_history_createMemoryHistory___default","MemoryRouter","initialEntries","initialIndex","lowerBound","upperBound","createMemoryHistory","_props$initialEntries","_props$initialIndex","nextIndex","nextEntries","canGo","__WEBPACK_IMPORTED_MODULE_2__Route__","__WEBPACK_IMPORTED_MODULE_3__Link__","NavLink","activeClassName","activeStyle","getIsActive","ariaCurrent","rest","aria-current","tokens","defaultDelimiter","delimiter","PATH_REGEXP","escaped","group","asterisk","partial","optional","escapeGroup","escapeString","compile","tokensToFunction","encodeURIComponentPretty","encodeURI","encodeAsterisk","matches","opts","encode","pretty","token","segment","isarray","attachKeys","regexpToRegexp","groups","arrayToRegexp","pathToRegexp","stringToRegexp","tokensToRegExp","endsWithDelimiter","__WEBPACK_IMPORTED_MODULE_0_react_router_es_Prompt__","Prompt","enable","disable","when","__WEBPACK_IMPORTED_MODULE_0_react_router_es_Redirect__","__WEBPACK_IMPORTED_MODULE_2_warning__","__WEBPACK_IMPORTED_MODULE_2_warning___default","__WEBPACK_IMPORTED_MODULE_3_invariant__","__WEBPACK_IMPORTED_MODULE_3_invariant___default","__WEBPACK_IMPORTED_MODULE_4_history__","Redirect","isStatic","prevProps","prevTo","nextTo","__WEBPACK_IMPORTED_MODULE_3__LocationUtils__","__WEBPACK_IMPORTED_MODULE_3__PathUtils__","__WEBPACK_IMPORTED_MODULE_0_react_router_es_StaticRouter__","__WEBPACK_IMPORTED_MODULE_4_history_PathUtils__","__WEBPACK_IMPORTED_MODULE_5__Router__","normalizeLocation","_object$pathname","_object$search","_object$hash","addBasename","createURL","staticHandler","StaticRouter","handlePush","handleReplace","_this$props2","handleListen","handleBlock","__WEBPACK_IMPORTED_MODULE_0_react_router_es_Switch__","Switch","_element$props","pathProp","__WEBPACK_IMPORTED_MODULE_0_react_router_es_matchPath__","__WEBPACK_IMPORTED_MODULE_0_react_router_es_withRouter__","__WEBPACK_IMPORTED_MODULE_2_hoist_non_react_statics__","__WEBPACK_IMPORTED_MODULE_2_hoist_non_react_statics___default","__WEBPACK_IMPORTED_MODULE_3__Route__","withRouter","wrappedComponentRef","remainingProps","routeComponentProps","_publish2","_channel2","_site2","_defineProperty","initialState","claim","publishInChannel","selectedChannel","_publish_channel_select_states","_require","publishSubmit","license","nsfw","_asset_display_states","siteConfig","googleAnalyticsId","_siteConfig$assetDefa","_siteConfig$details","sagaMiddlewareFactory","sagaEmitter","__WEBPACK_IMPORTED_MODULE_1__channel__","__WEBPACK_IMPORTED_MODULE_2__runSaga__","_ref$context","yTake","__WEBPACK_IMPORTED_MODULE_1__io__","yFork","setAction","__WEBPACK_IMPORTED_MODULE_0__fsmIterator__","q1","q2","__WEBPACK_IMPORTED_MODULE_2__channel__","yCancel","q3","delayLength","yActionChannel","__WEBPACK_IMPORTED_MODULE_3__buffers__","yDelay","__WEBPACK_IMPORTED_MODULE_4__utils__","setChannel","q4","__WEBPACK_IMPORTED_MODULE_0__internal_utils__","__WEBPACK_IMPORTED_MODULE_1__internal_io__","__WEBPACK_IMPORTED_MODULE_2__internal_proc__","rootSaga","_show_uri","watchHandleShowPageUri","_show_asset","_show_channel","_file","watchFileIsRequested","watchPublishStart","parseAndUpdateIdentifierAndClaim","isChannel","channelClaimId","claimName","_lbryUri$parseIdentif","_lbryUri$parseClaim","_lbryUri2","parseIdentifier","parseClaim","parseAndUpdateClaimOnly","_lbryUri$parseIdentif2","_lbryUri$parseClaim2","handleShowPageUri","identifier","_lbryUri","Content-Type","_request2","_request","REGEXP_INVALID_CLAIM","REGEXP_INVALID_CHANNEL","REGEXP_ADDRESS","CHANNEL_CHAR","componentsRegex","_componentsRegex$exec","_componentsRegex$exec2","modifierSeperator","nameBadChars","_componentsRegex$exec3","_componentsRegex$exec4","extensionSeperator","retrieveFile","isAvailable","_fileApi","checkFileAvailability","triggerClaimGet","_interopRequireWildcard","publishFile","urlError","publishMetadata","publishFormData","publishChannel","loadStart","progress","load","success","selectPublishState","selectChannelState","_validate","validateChannelSelection","validatePublishParams","_publish3","createPublishMetadata","createThumbnailUrl","createPublishFormData","_publish4","makePublishRequestChannel","publishStates","_publish_claim_states","onLoadStart","onProgress","lengthComputable","percentage","loaded","total","onLoad","upload","onreadystatechange","readyState","_reactGa","_reactGa2","initialize","GAListener","sendPageView","pageview","__WEBPACK_EXTERNAL_MODULE_11__","__WEBPACK_EXTERNAL_MODULE_12__","warn","_toConsumableArray","arr2","_format","_format3","_titleCase","_gaCommand","trackerNames","command","internalGa","_warn2","_initialize","gaTrackingID","debug","_debug","titleCase","gaOptions","configsOrTrackingId","testMode","_testMode","_loadGA2","trackingId","ga","_log2","fieldsObject","fieldObject","rawPath","_trim2","extraFields","hitType","extraLog","modalview","rawModalName","modalName","_removeLeadingSlash2","timing","category","variable","timingCategory","timingVar","timingValue","timingLabel","nonInteraction","transport","eventCategory","eventAction","eventLabel","eventValue","fatal","exDescription","exFatal","outboundLink","hitCallback","safetyCallbackCalled","safetyCallback","clearableCallbackForGA","testModeAPI","OutboundLink","plugin","_format2","_removeLeadingSlash","_trim","_loadGA","_warn","_log","_testModeAPI","_testModeAPI2","_OutboundLink","_OutboundLink2","_window","require","rawName","execute","pluginName","origTrackLink","trackLink","_mightBeEmail2","redacted","_toTitleCase2","_mightBeEmail","_toTitleCase","mightBeEmail","toTitleCase","smallWords","removeLeadingSlash","getElementsByTagName","gaAddress","gaCalls","calls","NEWTAB","MIDDLECLICK","eventMeta","sameTarget","normalClick","_HomePage","_HomePage2","_AboutPage","_AboutPage2","_LoginPage","_LoginPage2","_ShowPage","_ShowPage2","_FourOhFourPage","_FourOhFourPage2","App","_SEO","_SEO2","_PublishTool","_PublishTool2","HomePage","_reactHelmet","_reactHelmet2","_pageTitle","_metaTags","_canonicalLink","SEO","_props2","pageUri","pageTitle","createPageTitle","createMetaTags","canonicalLink","createCanonicalLink","rel","_interopDefault","ex","withSideEffect","handleStateChangeOnClient","emitChange","mountedInstances","SideEffect","recordedState","React__default","React","__WEBPACK_AMD_DEFINE_RESULT__","compare","compareContext","bHasOwnProperty","idx","valueA","valueB","isUndefinedOrNull","isBuffer","copy","objEquiv","isArguments","pSlice","deepEqual","objectKeys","actual","expected","supported","unsupported","supportsArgumentsClass","_objectAssign","_objectAssign2","getTitleFromPropsList","propsList","innermostTitle","getInnermostProperty","innermostTemplate","innermostDefaultTitle","getOnChangeClientState","getAttributesFromPropsList","tagType","tagAttrs","getBaseTagFromPropsList","primaryAttributes","innermostBaseTag","attributeKey","lowerCaseAttributeKey","getTagsFromPropsList","approvedSeenTags","approvedTags","instanceTags","instanceSeenTags","primaryAttributeKey","tagUnion","rafPolyfill","clock","currentTime","cafPolyfill","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","_helmetCallback","newState","commitTagChanges","updateAttributes","updateTitle","tagUpdates","updateTags","addedTags","removedTags","_tagUpdates$tagType","newTags","oldTags","flattenArray","possibleArray","elementTag","helmetAttributeString","helmetAttributes","attributesToRemove","attributeKeys","indexToSave","tags","headElement","querySelector","tagNodes","indexToDelete","newElement","styleSheet","existingTag","isEqualNode","generateElementAttributesAsString","attr","generateTitleAsString","attributeString","flattenedTitle","generateTagsAsString","attributeHtml","tagContent","isSelfClosing","convertElementAttributestoReactProps","initProps","initAttributes","generateTitleAsReactComponent","_initProps","generateTagsAsReactComponent","_mappedTag","mappedTag","mappedAttribute","content","getMethodsForTag","toComponent","_ref$title","determineOgThumbnailContentType","createBasicMetaTags","createChannelMetaTags","createAssetMetaTags","contentType","embedUrl","showUrl","fileExt","ogTitle","ogDescription","ogThumbnailContentType","ogThumbnail","createBasicCanonicalLink","createAssetCanonicalLink","certificateId","_asset$claimData","createChannelCanonicalLink","_Logo","_Logo2","_NavBarChannelOptionsDropdown","_NavBarChannelOptionsDropdown2","NavBar","checkForLoggedInUser","logoutUser","handleSelection","shortChannelId","_this3","selectedOptions","defaultSelection","LOGOUT","Logo","height","viewBox","enableBackground","fontSize","fontFamily","stroke","strokeLinecap","NavBarChannelDropdown","onChange","_Dropzone","_Dropzone2","_PublishDetails","_PublishDetails2","_PublishStatus","_PublishStatus2","_PublishDisabledMessage","_PublishDisabledMessage2","PublishTool","_PublishPreview","_PublishPreview2","Dropzone","dragOver","mouseOver","dimPreview","handleDrop","handleDragOver","handleDragEnd","handleDragEnter","handleDragLeave","handleMouseEnter","handleMouseLeave","handleFileInput","chooseFile","dt","droppedFile","getAsFile","clearData","click","fileList","files","validateFile","accept","encType","onDrop","onDragOver","onDragEnd","onDragEnter","onDragLeave","onMouseEnter","onMouseLeave","PublishPreview","imgSource","setPreviewImageSource","setPreviewImageSourceFromFile","previewReader","readAsDataURL","onloadend","alt","_PublishTitleInput","_PublishTitleInput2","_PublishUrlInput","_PublishUrlInput2","_PublishThumbnailInput","_PublishThumbnailInput2","_PublishMetadataInputs","_PublishMetadataInputs2","_ChannelSelect","_ChannelSelect2","PublishDetails","onPublishSubmit","onMetadataChange","PublishTitleInput","handleInput","placeholder","loggedInChannelName","loggedInChannelShortId","onClaimChange","onUrlError","_PublishUrlMiddleDisplay","_PublishUrlMiddleDisplay2","PublishUrlInput","setClaimName","validateClaim","cleanseInput","fileNameWithoutEnding","cleanClaimName","UrlMiddle","dataURItoBlob","dataURI","byteString","atob","mimeString","PublishThumbnailInput","videoSource","sliderMinRange","sliderMaxRange","sliderValue","handleVideoLoadedData","handleSliderChange","createThumbnail","setVideoSource","dataUri","URL","createObjectURL","duration","totalMinutes","totalSeconds","video","canvas","width","videoWidth","videoHeight","drawImage","dataUrl","toDataURL","snapshot","File","_state","preload","onLoadedData","onSeeked","onToggleMetadataInputs","_ExpandingTextArea","_ExpandingTextArea2","PublishMetadataInputs","toggleShowInputs","handleSelect","selectedOption","maxHeight","ExpandingTextarea","_handleChange","adjustTextarea","_ref$target","scrollHeight","channelError","onPublishInChannelChange","onChannelSelect","_ChannelLoginForm","_ChannelLoginForm2","_ChannelCreateForm","_ChannelCreateForm2","states","ChannelSelect","toggleAnonymousPublish","ChannelLoginForm","loginToChannel","username","channelPassword","_ProgressBar","_ProgressBar2","ChannelCreateForm","handleChannelInput","createChannel","cleanseChannelInput","updateIsChannelAvailable","channelWithAtSymbol","checkIsPasswordProvided","checkIsChannelAvailable","makePublishChannelRequest","ActiveStatusBar","InactiveStatusBar","PublishStatus","PublishDisabledMessage","AboutPage","LoginPage","_ErrorPage","_ErrorPage2","_ShowAssetLite","_ShowAssetLite2","_ShowAssetDetails","_ShowAssetDetails2","_ShowChannel","_ShowChannel2","ShowPage","_AssetDisplay","_AssetDisplay2","ShowLite","AssetDisplay","_props$asset$claimDat","_props$asset$claimDat2","poster","_AssetTitle","_AssetTitle2","_AssetInfo","_AssetInfo2","ShowAssetDetails","AssetTitle","AssetInfo","copyToClipboard","elementToCopy","dataset","elementtocopy","execCommand","_props$asset","data-elementtocopy","previousRequest","_ChannelClaimsDisplay","_ChannelClaimsDisplay2","ShowChannel","_AssetPreview","_AssetPreview2","ChannelClaimsDisplay","showNextResultsPage","showPreviousResultsPage","currentPage","previousPage","showNewPage","nextPage","_props$channel","_props$channel$claims","claims","totalPages","defaults","AssetPreview","_ref$claimData","directSourceLink","showUrlLink","_ref$site","FourOhForPage"],"mappings":"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AA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAA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","file":"bundle.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"public/bundle/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 199);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(3);\nvar core = __webpack_require__(28);\nvar hide = __webpack_require__(16);\nvar redefine = __webpack_require__(17);\nvar ctx = __webpack_require__(25);\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nif (true) {\n module.exports = __webpack_require__(404);\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(5);\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_Provider__ = __webpack_require__(415);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_connectAdvanced__ = __webpack_require__(167);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__connect_connect__ = __webpack_require__(420);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Provider\", function() { return __WEBPACK_IMPORTED_MODULE_0__components_Provider__[\"b\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"createProvider\", function() { return __WEBPACK_IMPORTED_MODULE_0__components_Provider__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"connectAdvanced\", function() { return __WEBPACK_IMPORTED_MODULE_1__components_connectAdvanced__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"connect\", function() { return __WEBPACK_IMPORTED_MODULE_2__connect_connect__[\"a\"]; });\n\n\n\n\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar store = __webpack_require__(69)('wks');\nvar uid = __webpack_require__(40);\nvar Symbol = __webpack_require__(3).Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (false) {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = __webpack_require__(416)();\n}\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(4)(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(2);\nvar IE8_DOM_DEFINE = __webpack_require__(131);\nvar toPrimitive = __webpack_require__(29);\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(9) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.15 ToLength\nvar toInteger = __webpack_require__(31);\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(30);\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (false) {\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n\n if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n throw new Error(\n 'The warning format should be able to uniquely identify this ' +\n 'warning. Please, use a more descriptive format than: ' + format\n );\n }\n\n if (!condition) {\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch(x) {}\n }\n };\n}\n\nmodule.exports = warning;\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(10);\nvar createDesc = __webpack_require__(39);\nmodule.exports = __webpack_require__(9) ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(3);\nvar hide = __webpack_require__(16);\nvar has = __webpack_require__(15);\nvar SRC = __webpack_require__(40)('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(28).inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(0);\nvar fails = __webpack_require__(4);\nvar defined = __webpack_require__(30);\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(63);\nvar defined = __webpack_require__(30);\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar pIE = __webpack_require__(64);\nvar createDesc = __webpack_require__(39);\nvar toIObject = __webpack_require__(19);\nvar toPrimitive = __webpack_require__(29);\nvar has = __webpack_require__(15);\nvar IE8_DOM_DEFINE = __webpack_require__(131);\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(9) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(15);\nvar toObject = __webpack_require__(12);\nvar IE_PROTO = __webpack_require__(89)('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (false) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"x\", function() { return sym; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return TASK; });\n/* unused harmony export HELPER */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return MATCH; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return CANCEL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return SAGA_ACTION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return SELF_CANCELLATION; });\n/* unused harmony export konst */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"r\", function() { return kTrue; });\n/* unused harmony export kFalse */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"u\", function() { return noop; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"o\", function() { return ident; });\n/* harmony export (immutable) */ __webpack_exports__[\"h\"] = check;\n/* unused harmony export hasOwn */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"q\", function() { return is; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"v\", function() { return object; });\n/* harmony export (immutable) */ __webpack_exports__[\"w\"] = remove;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return array; });\n/* harmony export (immutable) */ __webpack_exports__[\"l\"] = deferred;\n/* harmony export (immutable) */ __webpack_exports__[\"g\"] = arrayOfDeffered;\n/* harmony export (immutable) */ __webpack_exports__[\"m\"] = delay;\n/* harmony export (immutable) */ __webpack_exports__[\"j\"] = createMockTask;\n/* unused harmony export autoInc */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"y\", function() { return uid; });\n/* harmony export (immutable) */ __webpack_exports__[\"t\"] = makeIterator;\n/* harmony export (immutable) */ __webpack_exports__[\"s\"] = log;\n/* harmony export (immutable) */ __webpack_exports__[\"n\"] = deprecate;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"z\", function() { return updateIncentive; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"p\", function() { return internalErr; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"k\", function() { return createSetContextWarning; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"A\", function() { return wrapSagaDispatch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return cloneableGenerator; });\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar sym = function sym(id) {\n return '@@redux-saga/' + id;\n};\n\nvar TASK = /*#__PURE__*/sym('TASK');\nvar HELPER = /*#__PURE__*/sym('HELPER');\nvar MATCH = /*#__PURE__*/sym('MATCH');\nvar CANCEL = /*#__PURE__*/sym('CANCEL_PROMISE');\nvar SAGA_ACTION = /*#__PURE__*/sym('SAGA_ACTION');\nvar SELF_CANCELLATION = /*#__PURE__*/sym('SELF_CANCELLATION');\nvar konst = function konst(v) {\n return function () {\n return v;\n };\n};\nvar kTrue = /*#__PURE__*/konst(true);\nvar kFalse = /*#__PURE__*/konst(false);\nvar noop = function noop() {};\nvar ident = function ident(v) {\n return v;\n};\n\nfunction check(value, predicate, error) {\n if (!predicate(value)) {\n log('error', 'uncaught at check', error);\n throw new Error(error);\n }\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn(object, property) {\n return is.notUndef(object) && hasOwnProperty.call(object, property);\n}\n\nvar is = {\n undef: function undef(v) {\n return v === null || v === undefined;\n },\n notUndef: function notUndef(v) {\n return v !== null && v !== undefined;\n },\n func: function func(f) {\n return typeof f === 'function';\n },\n number: function number(n) {\n return typeof n === 'number';\n },\n string: function string(s) {\n return typeof s === 'string';\n },\n array: Array.isArray,\n object: function object(obj) {\n return obj && !is.array(obj) && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object';\n },\n promise: function promise(p) {\n return p && is.func(p.then);\n },\n iterator: function iterator(it) {\n return it && is.func(it.next) && is.func(it.throw);\n },\n iterable: function iterable(it) {\n return it && is.func(Symbol) ? is.func(it[Symbol.iterator]) : is.array(it);\n },\n task: function task(t) {\n return t && t[TASK];\n },\n observable: function observable(ob) {\n return ob && is.func(ob.subscribe);\n },\n buffer: function buffer(buf) {\n return buf && is.func(buf.isEmpty) && is.func(buf.take) && is.func(buf.put);\n },\n pattern: function pattern(pat) {\n return pat && (is.string(pat) || (typeof pat === 'undefined' ? 'undefined' : _typeof(pat)) === 'symbol' || is.func(pat) || is.array(pat));\n },\n channel: function channel(ch) {\n return ch && is.func(ch.take) && is.func(ch.close);\n },\n helper: function helper(it) {\n return it && it[HELPER];\n },\n stringableFunc: function stringableFunc(f) {\n return is.func(f) && hasOwn(f, 'toString');\n }\n};\n\nvar object = {\n assign: function assign(target, source) {\n for (var i in source) {\n if (hasOwn(source, i)) {\n target[i] = source[i];\n }\n }\n }\n};\n\nfunction remove(array, item) {\n var index = array.indexOf(item);\n if (index >= 0) {\n array.splice(index, 1);\n }\n}\n\nvar array = {\n from: function from(obj) {\n var arr = Array(obj.length);\n for (var i in obj) {\n if (hasOwn(obj, i)) {\n arr[i] = obj[i];\n }\n }\n return arr;\n }\n};\n\nfunction deferred() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var def = _extends({}, props);\n var promise = new Promise(function (resolve, reject) {\n def.resolve = resolve;\n def.reject = reject;\n });\n def.promise = promise;\n return def;\n}\n\nfunction arrayOfDeffered(length) {\n var arr = [];\n for (var i = 0; i < length; i++) {\n arr.push(deferred());\n }\n return arr;\n}\n\nfunction delay(ms) {\n var val = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var timeoutId = void 0;\n var promise = new Promise(function (resolve) {\n timeoutId = setTimeout(function () {\n return resolve(val);\n }, ms);\n });\n\n promise[CANCEL] = function () {\n return clearTimeout(timeoutId);\n };\n\n return promise;\n}\n\nfunction createMockTask() {\n var _ref;\n\n var running = true;\n var _result = void 0,\n _error = void 0;\n\n return _ref = {}, _ref[TASK] = true, _ref.isRunning = function isRunning() {\n return running;\n }, _ref.result = function result() {\n return _result;\n }, _ref.error = function error() {\n return _error;\n }, _ref.setRunning = function setRunning(b) {\n return running = b;\n }, _ref.setResult = function setResult(r) {\n return _result = r;\n }, _ref.setError = function setError(e) {\n return _error = e;\n }, _ref;\n}\n\nfunction autoInc() {\n var seed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n return function () {\n return ++seed;\n };\n}\n\nvar uid = /*#__PURE__*/autoInc();\n\nvar kThrow = function kThrow(err) {\n throw err;\n};\nvar kReturn = function kReturn(value) {\n return { value: value, done: true };\n};\nfunction makeIterator(next) {\n var thro = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : kThrow;\n var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var isHelper = arguments[3];\n\n var iterator = { name: name, next: next, throw: thro, return: kReturn };\n\n if (isHelper) {\n iterator[HELPER] = true;\n }\n if (typeof Symbol !== 'undefined') {\n iterator[Symbol.iterator] = function () {\n return iterator;\n };\n }\n return iterator;\n}\n\n/**\n Print error in a useful way whether in a browser environment\n (with expandable error stack traces), or in a node.js environment\n (text-only log output)\n **/\nfunction log(level, message) {\n var error = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n /*eslint-disable no-console*/\n if (typeof window === 'undefined') {\n console.log('redux-saga ' + level + ': ' + message + '\\n' + (error && error.stack || error));\n } else {\n console[level](message, error);\n }\n}\n\nfunction deprecate(fn, deprecationWarning) {\n return function () {\n if (false) log('warn', deprecationWarning);\n return fn.apply(undefined, arguments);\n };\n}\n\nvar updateIncentive = function updateIncentive(deprecated, preferred) {\n return deprecated + ' has been deprecated in favor of ' + preferred + ', please update your code';\n};\n\nvar internalErr = function internalErr(err) {\n return new Error('\\n redux-saga: Error checking hooks detected an inconsistent state. This is likely a bug\\n in redux-saga code and not yours. Thanks for reporting this in the project\\'s github repo.\\n Error: ' + err + '\\n');\n};\n\nvar createSetContextWarning = function createSetContextWarning(ctx, props) {\n return (ctx ? ctx + '.' : '') + 'setContext(props): argument ' + props + ' is not a plain object';\n};\n\nvar wrapSagaDispatch = function wrapSagaDispatch(dispatch) {\n return function (action) {\n return dispatch(Object.defineProperty(action, SAGA_ACTION, { value: true }));\n };\n};\n\nvar cloneableGenerator = function cloneableGenerator(generatorFunc) {\n return function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var history = [];\n var gen = generatorFunc.apply(undefined, args);\n return {\n next: function next(arg) {\n history.push(arg);\n return gen.next(arg);\n },\n clone: function clone() {\n var clonedGen = cloneableGenerator(generatorFunc).apply(undefined, args);\n history.forEach(function (arg) {\n return clonedGen.next(arg);\n });\n return clonedGen;\n },\n return: function _return(value) {\n return gen.return(value);\n },\n throw: function _throw(exception) {\n return gen.throw(exception);\n }\n };\n };\n};\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.selectFile = selectFile;\nexports.clearFile = clearFile;\nexports.updateMetadata = updateMetadata;\nexports.updateClaim = updateClaim;\nexports.setPublishInChannel = setPublishInChannel;\nexports.updatePublishStatus = updatePublishStatus;\nexports.updateError = updateError;\nexports.updateSelectedChannel = updateSelectedChannel;\nexports.toggleMetadataInputs = toggleMetadataInputs;\nexports.onNewThumbnail = onNewThumbnail;\nexports.startPublish = startPublish;\n\nvar _publish_action_types = __webpack_require__(124);\n\nvar actions = _interopRequireWildcard(_publish_action_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// export action creators\nfunction selectFile(file) {\n return {\n type: actions.FILE_SELECTED,\n data: file\n };\n};\n\nfunction clearFile() {\n return {\n type: actions.FILE_CLEAR\n };\n};\n\nfunction updateMetadata(name, value) {\n return {\n type: actions.METADATA_UPDATE,\n data: {\n name: name,\n value: value\n }\n };\n};\n\nfunction updateClaim(value) {\n return {\n type: actions.CLAIM_UPDATE,\n data: value\n };\n};\n\nfunction setPublishInChannel(channel) {\n return {\n type: actions.SET_PUBLISH_IN_CHANNEL,\n channel: channel\n };\n};\n\nfunction updatePublishStatus(status, message) {\n return {\n type: actions.PUBLISH_STATUS_UPDATE,\n data: {\n status: status,\n message: message\n }\n };\n};\n\nfunction updateError(name, value) {\n return {\n type: actions.ERROR_UPDATE,\n data: {\n name: name,\n value: value\n }\n };\n};\n\nfunction updateSelectedChannel(channelName) {\n return {\n type: actions.SELECTED_CHANNEL_UPDATE,\n data: channelName\n };\n};\n\nfunction toggleMetadataInputs(showMetadataInputs) {\n return {\n type: actions.TOGGLE_METADATA_INPUTS,\n data: showMetadataInputs\n };\n};\n\nfunction onNewThumbnail(file) {\n return {\n type: actions.THUMBNAIL_NEW,\n data: file\n };\n};\n\nfunction startPublish(history) {\n return {\n type: actions.PUBLISH_START,\n data: { history: history }\n };\n}\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// optional / simple context binding\nvar aFunction = __webpack_require__(14);\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports) {\n\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fails = __webpack_require__(4);\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\nvar core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(5);\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports) {\n\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports) {\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(28);\nvar fails = __webpack_require__(4);\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(25);\nvar IObject = __webpack_require__(63);\nvar toObject = __webpack_require__(12);\nvar toLength = __webpack_require__(11);\nvar asc = __webpack_require__(106);\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__BrowserRouter__ = __webpack_require__(441);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"BrowserRouter\", function() { return __WEBPACK_IMPORTED_MODULE_0__BrowserRouter__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__HashRouter__ = __webpack_require__(443);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"HashRouter\", function() { return __WEBPACK_IMPORTED_MODULE_1__HashRouter__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Link__ = __webpack_require__(178);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Link\", function() { return __WEBPACK_IMPORTED_MODULE_2__Link__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__MemoryRouter__ = __webpack_require__(445);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"MemoryRouter\", function() { return __WEBPACK_IMPORTED_MODULE_3__MemoryRouter__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__NavLink__ = __webpack_require__(448);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"NavLink\", function() { return __WEBPACK_IMPORTED_MODULE_4__NavLink__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__Prompt__ = __webpack_require__(451);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Prompt\", function() { return __WEBPACK_IMPORTED_MODULE_5__Prompt__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__Redirect__ = __webpack_require__(453);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Redirect\", function() { return __WEBPACK_IMPORTED_MODULE_6__Redirect__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__Route__ = __webpack_require__(179);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Route\", function() { return __WEBPACK_IMPORTED_MODULE_7__Route__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__Router__ = __webpack_require__(120);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Router\", function() { return __WEBPACK_IMPORTED_MODULE_8__Router__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__StaticRouter__ = __webpack_require__(459);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"StaticRouter\", function() { return __WEBPACK_IMPORTED_MODULE_9__StaticRouter__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__Switch__ = __webpack_require__(461);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Switch\", function() { return __WEBPACK_IMPORTED_MODULE_10__Switch__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__matchPath__ = __webpack_require__(463);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"matchPath\", function() { return __WEBPACK_IMPORTED_MODULE_11__matchPath__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__withRouter__ = __webpack_require__(464);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"withRouter\", function() { return __WEBPACK_IMPORTED_MODULE_12__withRouter__[\"a\"]; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nif (__webpack_require__(9)) {\n var LIBRARY = __webpack_require__(41);\n var global = __webpack_require__(3);\n var fails = __webpack_require__(4);\n var $export = __webpack_require__(0);\n var $typed = __webpack_require__(79);\n var $buffer = __webpack_require__(112);\n var ctx = __webpack_require__(25);\n var anInstance = __webpack_require__(47);\n var propertyDesc = __webpack_require__(39);\n var hide = __webpack_require__(16);\n var redefineAll = __webpack_require__(49);\n var toInteger = __webpack_require__(31);\n var toLength = __webpack_require__(11);\n var toIndex = __webpack_require__(157);\n var toAbsoluteIndex = __webpack_require__(43);\n var toPrimitive = __webpack_require__(29);\n var has = __webpack_require__(15);\n var classof = __webpack_require__(65);\n var isObject = __webpack_require__(5);\n var toObject = __webpack_require__(12);\n var isArrayIter = __webpack_require__(103);\n var create = __webpack_require__(44);\n var getPrototypeOf = __webpack_require__(21);\n var gOPN = __webpack_require__(45).f;\n var getIterFn = __webpack_require__(105);\n var uid = __webpack_require__(40);\n var wks = __webpack_require__(7);\n var createArrayMethod = __webpack_require__(33);\n var createArrayIncludes = __webpack_require__(70);\n var speciesConstructor = __webpack_require__(77);\n var ArrayIterators = __webpack_require__(108);\n var Iterators = __webpack_require__(57);\n var $iterDetect = __webpack_require__(74);\n var setSpecies = __webpack_require__(46);\n var arrayFill = __webpack_require__(107);\n var arrayCopyWithin = __webpack_require__(147);\n var $DP = __webpack_require__(10);\n var $GOPD = __webpack_require__(20);\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Map = __webpack_require__(152);\nvar $export = __webpack_require__(0);\nvar shared = __webpack_require__(69)('metadata');\nvar store = shared.store || (shared.store = new (__webpack_require__(155))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar META = __webpack_require__(40)('meta');\nvar isObject = __webpack_require__(5);\nvar has = __webpack_require__(15);\nvar setDesc = __webpack_require__(10).f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !__webpack_require__(4)(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(7)('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(16)(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports) {\n\nvar id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports) {\n\nmodule.exports = false;\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(133);\nvar enumBugKeys = __webpack_require__(90);\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(31);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(2);\nvar dPs = __webpack_require__(134);\nvar enumBugKeys = __webpack_require__(90);\nvar IE_PROTO = __webpack_require__(89)('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(87)('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(91).appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(133);\nvar hiddenKeys = __webpack_require__(90).concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(3);\nvar dP = __webpack_require__(10);\nvar DESCRIPTORS = __webpack_require__(9);\nvar SPECIES = __webpack_require__(7)('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar ctx = __webpack_require__(25);\nvar call = __webpack_require__(145);\nvar isArrayIter = __webpack_require__(103);\nvar anObject = __webpack_require__(2);\nvar toLength = __webpack_require__(11);\nvar getIterFn = __webpack_require__(105);\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar redefine = __webpack_require__(17);\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return detach; });\n/* harmony export (immutable) */ __webpack_exports__[\"s\"] = take;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"v\", function() { return takem; });\n/* harmony export (immutable) */ __webpack_exports__[\"n\"] = put;\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = all;\n/* harmony export (immutable) */ __webpack_exports__[\"o\"] = race;\n/* harmony export (immutable) */ __webpack_exports__[\"e\"] = call;\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = apply;\n/* harmony export (immutable) */ __webpack_exports__[\"h\"] = cps;\n/* harmony export (immutable) */ __webpack_exports__[\"k\"] = fork;\n/* harmony export (immutable) */ __webpack_exports__[\"r\"] = spawn;\n/* harmony export (immutable) */ __webpack_exports__[\"m\"] = join;\n/* harmony export (immutable) */ __webpack_exports__[\"f\"] = cancel;\n/* harmony export (immutable) */ __webpack_exports__[\"p\"] = select;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = actionChannel;\n/* harmony export (immutable) */ __webpack_exports__[\"g\"] = cancelled;\n/* harmony export (immutable) */ __webpack_exports__[\"j\"] = flush;\n/* harmony export (immutable) */ __webpack_exports__[\"l\"] = getContext;\n/* harmony export (immutable) */ __webpack_exports__[\"q\"] = setContext;\n/* harmony export (immutable) */ __webpack_exports__[\"t\"] = takeEvery;\n/* harmony export (immutable) */ __webpack_exports__[\"u\"] = takeLatest;\n/* harmony export (immutable) */ __webpack_exports__[\"w\"] = throttle;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return asEffect; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__sagaHelpers__ = __webpack_require__(188);\n\n\n\nvar IO = /*#__PURE__*/Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"x\" /* sym */])('IO');\nvar TAKE = 'TAKE';\nvar PUT = 'PUT';\nvar ALL = 'ALL';\nvar RACE = 'RACE';\nvar CALL = 'CALL';\nvar CPS = 'CPS';\nvar FORK = 'FORK';\nvar JOIN = 'JOIN';\nvar CANCEL = 'CANCEL';\nvar SELECT = 'SELECT';\nvar ACTION_CHANNEL = 'ACTION_CHANNEL';\nvar CANCELLED = 'CANCELLED';\nvar FLUSH = 'FLUSH';\nvar GET_CONTEXT = 'GET_CONTEXT';\nvar SET_CONTEXT = 'SET_CONTEXT';\n\nvar TEST_HINT = '\\n(HINT: if you are getting this errors in tests, consider using createMockTask from redux-saga/utils)';\n\nvar effect = function effect(type, payload) {\n var _ref;\n\n return _ref = {}, _ref[IO] = true, _ref[type] = payload, _ref;\n};\n\nvar detach = function detach(eff) {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(asEffect.fork(eff), __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].object, 'detach(eff): argument must be a fork effect');\n eff[FORK].detached = true;\n return eff;\n};\n\nfunction take() {\n var patternOrChannel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '*';\n\n if (arguments.length) {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(arguments[0], __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].notUndef, 'take(patternOrChannel): patternOrChannel is undefined');\n }\n if (__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].pattern(patternOrChannel)) {\n return effect(TAKE, { pattern: patternOrChannel });\n }\n if (__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].channel(patternOrChannel)) {\n return effect(TAKE, { channel: patternOrChannel });\n }\n throw new Error('take(patternOrChannel): argument ' + String(patternOrChannel) + ' is not valid channel or a valid pattern');\n}\n\ntake.maybe = function () {\n var eff = take.apply(undefined, arguments);\n eff[TAKE].maybe = true;\n return eff;\n};\n\nvar takem = /*#__PURE__*/Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"n\" /* deprecate */])(take.maybe, /*#__PURE__*/Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"z\" /* updateIncentive */])('takem', 'take.maybe'));\n\nfunction put(channel, action) {\n if (arguments.length > 1) {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(channel, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].notUndef, 'put(channel, action): argument channel is undefined');\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(channel, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].channel, 'put(channel, action): argument ' + channel + ' is not a valid channel');\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(action, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].notUndef, 'put(channel, action): argument action is undefined');\n } else {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(channel, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].notUndef, 'put(action): argument action is undefined');\n action = channel;\n channel = null;\n }\n return effect(PUT, { channel: channel, action: action });\n}\n\nput.resolve = function () {\n var eff = put.apply(undefined, arguments);\n eff[PUT].resolve = true;\n return eff;\n};\n\nput.sync = /*#__PURE__*/Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"n\" /* deprecate */])(put.resolve, /*#__PURE__*/Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"z\" /* updateIncentive */])('put.sync', 'put.resolve'));\n\nfunction all(effects) {\n return effect(ALL, effects);\n}\n\nfunction race(effects) {\n return effect(RACE, effects);\n}\n\nfunction getFnCallDesc(meth, fn, args) {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(fn, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].notUndef, meth + ': argument fn is undefined');\n\n var context = null;\n if (__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].array(fn)) {\n var _fn = fn;\n context = _fn[0];\n fn = _fn[1];\n } else if (fn.fn) {\n var _fn2 = fn;\n context = _fn2.context;\n fn = _fn2.fn;\n }\n if (context && __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].string(fn) && __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func(context[fn])) {\n fn = context[fn];\n }\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(fn, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func, meth + ': argument ' + fn + ' is not a function');\n\n return { context: context, fn: fn, args: args };\n}\n\nfunction call(fn) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return effect(CALL, getFnCallDesc('call', fn, args));\n}\n\nfunction apply(context, fn) {\n var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n return effect(CALL, getFnCallDesc('apply', { context: context, fn: fn }, args));\n}\n\nfunction cps(fn) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return effect(CPS, getFnCallDesc('cps', fn, args));\n}\n\nfunction fork(fn) {\n for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return effect(FORK, getFnCallDesc('fork', fn, args));\n}\n\nfunction spawn(fn) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n return detach(fork.apply(undefined, [fn].concat(args)));\n}\n\nfunction join() {\n for (var _len5 = arguments.length, tasks = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n tasks[_key5] = arguments[_key5];\n }\n\n if (tasks.length > 1) {\n return all(tasks.map(function (t) {\n return join(t);\n }));\n }\n var task = tasks[0];\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(task, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].notUndef, 'join(task): argument task is undefined');\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(task, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].task, 'join(task): argument ' + task + ' is not a valid Task object ' + TEST_HINT);\n return effect(JOIN, task);\n}\n\nfunction cancel() {\n for (var _len6 = arguments.length, tasks = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n tasks[_key6] = arguments[_key6];\n }\n\n if (tasks.length > 1) {\n return all(tasks.map(function (t) {\n return cancel(t);\n }));\n }\n var task = tasks[0];\n if (tasks.length === 1) {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(task, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].notUndef, 'cancel(task): argument task is undefined');\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(task, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].task, 'cancel(task): argument ' + task + ' is not a valid Task object ' + TEST_HINT);\n }\n return effect(CANCEL, task || __WEBPACK_IMPORTED_MODULE_0__utils__[\"d\" /* SELF_CANCELLATION */]);\n}\n\nfunction select(selector) {\n for (var _len7 = arguments.length, args = Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {\n args[_key7 - 1] = arguments[_key7];\n }\n\n if (arguments.length === 0) {\n selector = __WEBPACK_IMPORTED_MODULE_0__utils__[\"o\" /* ident */];\n } else {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(selector, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].notUndef, 'select(selector,[...]): argument selector is undefined');\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(selector, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func, 'select(selector,[...]): argument ' + selector + ' is not a function');\n }\n return effect(SELECT, { selector: selector, args: args });\n}\n\n/**\n channel(pattern, [buffer]) => creates an event channel for store actions\n**/\nfunction actionChannel(pattern, buffer) {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(pattern, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].notUndef, 'actionChannel(pattern,...): argument pattern is undefined');\n if (arguments.length > 1) {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(buffer, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].notUndef, 'actionChannel(pattern, buffer): argument buffer is undefined');\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(buffer, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].buffer, 'actionChannel(pattern, buffer): argument ' + buffer + ' is not a valid buffer');\n }\n return effect(ACTION_CHANNEL, { pattern: pattern, buffer: buffer });\n}\n\nfunction cancelled() {\n return effect(CANCELLED, {});\n}\n\nfunction flush(channel) {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(channel, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].channel, 'flush(channel): argument ' + channel + ' is not valid channel');\n return effect(FLUSH, channel);\n}\n\nfunction getContext(prop) {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(prop, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].string, 'getContext(prop): argument ' + prop + ' is not a string');\n return effect(GET_CONTEXT, prop);\n}\n\nfunction setContext(props) {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(props, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].object, Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"k\" /* createSetContextWarning */])(null, props));\n return effect(SET_CONTEXT, props);\n}\n\nfunction takeEvery(patternOrChannel, worker) {\n for (var _len8 = arguments.length, args = Array(_len8 > 2 ? _len8 - 2 : 0), _key8 = 2; _key8 < _len8; _key8++) {\n args[_key8 - 2] = arguments[_key8];\n }\n\n return fork.apply(undefined, [__WEBPACK_IMPORTED_MODULE_1__sagaHelpers__[\"b\" /* takeEveryHelper */], patternOrChannel, worker].concat(args));\n}\n\nfunction takeLatest(patternOrChannel, worker) {\n for (var _len9 = arguments.length, args = Array(_len9 > 2 ? _len9 - 2 : 0), _key9 = 2; _key9 < _len9; _key9++) {\n args[_key9 - 2] = arguments[_key9];\n }\n\n return fork.apply(undefined, [__WEBPACK_IMPORTED_MODULE_1__sagaHelpers__[\"d\" /* takeLatestHelper */], patternOrChannel, worker].concat(args));\n}\n\nfunction throttle(ms, pattern, worker) {\n for (var _len10 = arguments.length, args = Array(_len10 > 3 ? _len10 - 3 : 0), _key10 = 3; _key10 < _len10; _key10++) {\n args[_key10 - 3] = arguments[_key10];\n }\n\n return fork.apply(undefined, [__WEBPACK_IMPORTED_MODULE_1__sagaHelpers__[\"f\" /* throttleHelper */], ms, pattern, worker].concat(args));\n}\n\nvar createAsEffectType = function createAsEffectType(type) {\n return function (effect) {\n return effect && effect[IO] && effect[type];\n };\n};\n\nvar asEffect = {\n take: /*#__PURE__*/createAsEffectType(TAKE),\n put: /*#__PURE__*/createAsEffectType(PUT),\n all: /*#__PURE__*/createAsEffectType(ALL),\n race: /*#__PURE__*/createAsEffectType(RACE),\n call: /*#__PURE__*/createAsEffectType(CALL),\n cps: /*#__PURE__*/createAsEffectType(CPS),\n fork: /*#__PURE__*/createAsEffectType(FORK),\n join: /*#__PURE__*/createAsEffectType(JOIN),\n cancel: /*#__PURE__*/createAsEffectType(CANCEL),\n select: /*#__PURE__*/createAsEffectType(SELECT),\n actionChannel: /*#__PURE__*/createAsEffectType(ACTION_CHANNEL),\n cancelled: /*#__PURE__*/createAsEffectType(CANCELLED),\n flush: /*#__PURE__*/createAsEffectType(FLUSH),\n getContext: /*#__PURE__*/createAsEffectType(GET_CONTEXT),\n setContext: /*#__PURE__*/createAsEffectType(SET_CONTEXT)\n};\n\n/***/ }),\n/* 51 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__internal_io__ = __webpack_require__(50);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"take\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"s\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"takem\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"v\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"put\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"n\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"all\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"b\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"race\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"o\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"call\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"e\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"apply\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"c\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"cps\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"h\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"fork\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"k\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"spawn\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"r\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"join\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"m\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"cancel\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"f\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"select\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"p\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"actionChannel\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"cancelled\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"g\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"flush\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"j\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"getContext\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"l\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"setContext\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"q\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"takeEvery\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"t\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"takeLatest\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"u\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"throttle\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_io__[\"w\"]; });\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.onHandleShowPageUri = onHandleShowPageUri;\nexports.onRequestError = onRequestError;\nexports.onNewChannelRequest = onNewChannelRequest;\nexports.onNewAssetRequest = onNewAssetRequest;\nexports.onRequestUpdate = onRequestUpdate;\nexports.addRequestToRequestList = addRequestToRequestList;\nexports.addAssetToAssetList = addAssetToAssetList;\nexports.addNewChannelToChannelList = addNewChannelToChannelList;\nexports.onUpdateChannelClaims = onUpdateChannelClaims;\nexports.updateChannelClaims = updateChannelClaims;\nexports.fileRequested = fileRequested;\nexports.updateFileAvailability = updateFileAvailability;\nexports.updateDisplayAssetError = updateDisplayAssetError;\n\nvar _show_action_types = __webpack_require__(59);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show_request_types = __webpack_require__(189);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// basic request parsing\nfunction onHandleShowPageUri(params) {\n return {\n type: actions.HANDLE_SHOW_URI,\n data: params\n };\n};\n\nfunction onRequestError(error) {\n return {\n type: actions.REQUEST_ERROR,\n data: error\n };\n};\n\nfunction onNewChannelRequest(channelName, channelId) {\n var requestType = _show_request_types.CHANNEL;\n var requestId = 'cr#' + channelName + '#' + channelId;\n return {\n type: actions.CHANNEL_REQUEST_NEW,\n data: { requestType: requestType, requestId: requestId, channelName: channelName, channelId: channelId }\n };\n};\n\nfunction onNewAssetRequest(name, id, channelName, channelId, extension) {\n var requestType = extension ? _show_request_types.ASSET_LITE : _show_request_types.ASSET_DETAILS;\n var requestId = 'ar#' + name + '#' + id + '#' + channelName + '#' + channelId;\n return {\n type: actions.ASSET_REQUEST_NEW,\n data: {\n requestType: requestType,\n requestId: requestId,\n name: name,\n modifier: {\n id: id,\n channel: {\n name: channelName,\n id: channelId\n }\n }\n }\n };\n};\n\nfunction onRequestUpdate(requestType, requestId) {\n return {\n type: actions.REQUEST_UPDATE,\n data: {\n requestType: requestType,\n requestId: requestId\n }\n };\n};\n\nfunction addRequestToRequestList(id, error, key) {\n return {\n type: actions.REQUEST_LIST_ADD,\n data: { id: id, error: error, key: key }\n };\n};\n\n// asset actions\n\nfunction addAssetToAssetList(id, error, name, claimId, shortId, claimData) {\n return {\n type: actions.ASSET_ADD,\n data: { id: id, error: error, name: name, claimId: claimId, shortId: shortId, claimData: claimData }\n };\n}\n\n// channel actions\n\nfunction addNewChannelToChannelList(id, name, shortId, longId, claimsData) {\n return {\n type: actions.CHANNEL_ADD,\n data: { id: id, name: name, shortId: shortId, longId: longId, claimsData: claimsData }\n };\n};\n\nfunction onUpdateChannelClaims(channelKey, name, longId, page) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_ASYNC,\n data: { channelKey: channelKey, name: name, longId: longId, page: page }\n };\n};\n\nfunction updateChannelClaims(channelListId, claimsData) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_SUCCESS,\n data: { channelListId: channelListId, claimsData: claimsData }\n };\n};\n\n// display a file\n\nfunction fileRequested(name, claimId) {\n return {\n type: actions.FILE_REQUESTED,\n data: { name: name, claimId: claimId }\n };\n};\n\nfunction updateFileAvailability(status) {\n return {\n type: actions.FILE_AVAILABILITY_UPDATE,\n data: status\n };\n};\n\nfunction updateDisplayAssetError(error) {\n return {\n type: actions.DISPLAY_ASSET_ERROR,\n data: error\n };\n};\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = request;\n\n__webpack_require__(479);\n\n/**\n * Parses the JSON returned by a network request\n *\n * @param {object} response A response from a network request\n *\n * @return {object} The parsed JSON from the request\n */\nfunction parseJSON(response) {\n if (response.status === 204 || response.status === 205) {\n return null;\n }\n return response.json();\n}\n\n/**\n * Parses the status returned by a network request\n *\n * @param {object} response A response from a network request\n * @param {object} response The parsed JSON from the network request\n *\n * @return {object | undefined} Returns object with status and statusText, or undefined\n */\nfunction checkStatus(response, jsonResponse) {\n if (response.status >= 200 && response.status < 300) {\n return jsonResponse;\n }\n var error = new Error(jsonResponse.message);\n error.response = response;\n throw error;\n}\n\n/**\n * Requests a URL, returning a promise\n *\n * @param {string} url The URL we want to request\n * @param {object} [options] The options we want to pass to \"fetch\"\n *\n * @return {object} The response data\n */\n\nfunction request(url, options) {\n return fetch(url, options).then(function (response) {\n return Promise.all([response, parseJSON(response)]);\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n response = _ref2[0],\n jsonResponse = _ref2[1];\n\n return checkStatus(response, jsonResponse);\n });\n}\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _channel = __webpack_require__(128);\n\nvar _publish = __webpack_require__(24);\n\nvar _view = __webpack_require__(505);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n site = _ref.site;\n\n return {\n channelName: channel.loggedInChannel.name,\n channelShortId: channel.loggedInChannel.shortId,\n channelLongId: channel.loggedInChannel.longId,\n siteDescription: site.description\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onChannelLogin: function onChannelLogin(name, shortId, longId) {\n dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));\n dispatch((0, _publish.updateSelectedChannel)(name));\n },\n onChannelLogout: function onChannelLogout() {\n dispatch((0, _channel.updateLoggedInChannel)(null, null, null));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar def = __webpack_require__(10).f;\nvar has = __webpack_require__(15);\nvar TAG = __webpack_require__(7)('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(0);\nvar defined = __webpack_require__(30);\nvar fails = __webpack_require__(4);\nvar spaces = __webpack_require__(93);\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports) {\n\nmodule.exports = {};\n\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(5);\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// request actions\nvar HANDLE_SHOW_URI = exports.HANDLE_SHOW_URI = 'HANDLE_SHOW_URI';\nvar REQUEST_ERROR = exports.REQUEST_ERROR = 'REQUEST_ERROR';\nvar REQUEST_UPDATE = exports.REQUEST_UPDATE = 'REQUEST_UPDATE';\nvar ASSET_REQUEST_NEW = exports.ASSET_REQUEST_NEW = 'ASSET_REQUEST_NEW';\nvar CHANNEL_REQUEST_NEW = exports.CHANNEL_REQUEST_NEW = 'CHANNEL_REQUEST_NEW';\nvar REQUEST_LIST_ADD = exports.REQUEST_LIST_ADD = 'REQUEST_LIST_ADD';\n\n// asset actions\nvar ASSET_ADD = exports.ASSET_ADD = 'ASSET_ADD';\n\n// channel actions\nvar CHANNEL_ADD = exports.CHANNEL_ADD = 'CHANNEL_ADD';\n\nvar CHANNEL_CLAIMS_UPDATE_ASYNC = exports.CHANNEL_CLAIMS_UPDATE_ASYNC = 'CHANNEL_CLAIMS_UPDATE_ASYNC';\nvar CHANNEL_CLAIMS_UPDATE_SUCCESS = exports.CHANNEL_CLAIMS_UPDATE_SUCCESS = 'CHANNEL_CLAIMS_UPDATE_SUCCESS';\n\n// asset/file display actions\nvar FILE_REQUESTED = exports.FILE_REQUESTED = 'FILE_REQUESTED';\nvar FILE_AVAILABILITY_UPDATE = exports.FILE_AVAILABILITY_UPDATE = 'FILE_AVAILABILITY_UPDATE';\nvar DISPLAY_ASSET_ERROR = exports.DISPLAY_ASSET_ERROR = 'DISPLAY_ASSET_ERROR';\n\n/***/ }),\n/* 60 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return END; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return isEnd; });\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = emitter;\n/* unused harmony export INVALID_BUFFER */\n/* unused harmony export UNDEFINED_INPUT_ERROR */\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = channel;\n/* harmony export (immutable) */ __webpack_exports__[\"d\"] = eventChannel;\n/* harmony export (immutable) */ __webpack_exports__[\"f\"] = stdChannel;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__buffers__ = __webpack_require__(85);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__scheduler__ = __webpack_require__(185);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\nvar CHANNEL_END_TYPE = '@@redux-saga/CHANNEL_END';\nvar END = { type: CHANNEL_END_TYPE };\nvar isEnd = function isEnd(a) {\n return a && a.type === CHANNEL_END_TYPE;\n};\n\nfunction emitter() {\n var subscribers = [];\n\n function subscribe(sub) {\n subscribers.push(sub);\n return function () {\n return Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"w\" /* remove */])(subscribers, sub);\n };\n }\n\n function emit(item) {\n var arr = subscribers.slice();\n for (var i = 0, len = arr.length; i < len; i++) {\n arr[i](item);\n }\n }\n\n return {\n subscribe: subscribe,\n emit: emit\n };\n}\n\nvar INVALID_BUFFER = 'invalid buffer passed to channel factory function';\nvar UNDEFINED_INPUT_ERROR = 'Saga was provided with an undefined action';\n\nif (false) {\n UNDEFINED_INPUT_ERROR += '\\nHints:\\n - check that your Action Creator returns a non-undefined value\\n - if the Saga was started using runSaga, check that your subscribe source provides the action to its listeners\\n ';\n}\n\nfunction channel() {\n var buffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : __WEBPACK_IMPORTED_MODULE_1__buffers__[\"a\" /* buffers */].fixed();\n\n var closed = false;\n var takers = [];\n\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(buffer, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].buffer, INVALID_BUFFER);\n\n function checkForbiddenStates() {\n if (closed && takers.length) {\n throw Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"p\" /* internalErr */])('Cannot have a closed channel with pending takers');\n }\n if (takers.length && !buffer.isEmpty()) {\n throw Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"p\" /* internalErr */])('Cannot have pending takers with non empty buffer');\n }\n }\n\n function put(input) {\n checkForbiddenStates();\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(input, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].notUndef, UNDEFINED_INPUT_ERROR);\n if (closed) {\n return;\n }\n if (!takers.length) {\n return buffer.put(input);\n }\n for (var i = 0; i < takers.length; i++) {\n var cb = takers[i];\n if (!cb[__WEBPACK_IMPORTED_MODULE_0__utils__[\"b\" /* MATCH */]] || cb[__WEBPACK_IMPORTED_MODULE_0__utils__[\"b\" /* MATCH */]](input)) {\n takers.splice(i, 1);\n return cb(input);\n }\n }\n }\n\n function take(cb) {\n checkForbiddenStates();\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(cb, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func, \"channel.take's callback must be a function\");\n\n if (closed && buffer.isEmpty()) {\n cb(END);\n } else if (!buffer.isEmpty()) {\n cb(buffer.take());\n } else {\n takers.push(cb);\n cb.cancel = function () {\n return Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"w\" /* remove */])(takers, cb);\n };\n }\n }\n\n function flush(cb) {\n checkForbiddenStates(); // TODO: check if some new state should be forbidden now\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(cb, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func, \"channel.flush' callback must be a function\");\n if (closed && buffer.isEmpty()) {\n cb(END);\n return;\n }\n cb(buffer.flush());\n }\n\n function close() {\n checkForbiddenStates();\n if (!closed) {\n closed = true;\n if (takers.length) {\n var arr = takers;\n takers = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n arr[i](END);\n }\n }\n }\n }\n\n return {\n take: take,\n put: put,\n flush: flush,\n close: close,\n get __takers__() {\n return takers;\n },\n get __closed__() {\n return closed;\n }\n };\n}\n\nfunction eventChannel(subscribe) {\n var buffer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : __WEBPACK_IMPORTED_MODULE_1__buffers__[\"a\" /* buffers */].none();\n var matcher = arguments[2];\n\n /**\n should be if(typeof matcher !== undefined) instead?\n see PR #273 for a background discussion\n **/\n if (arguments.length > 2) {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(matcher, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func, 'Invalid match function passed to eventChannel');\n }\n\n var chan = channel(buffer);\n var close = function close() {\n if (!chan.__closed__) {\n if (unsubscribe) {\n unsubscribe();\n }\n chan.close();\n }\n };\n var unsubscribe = subscribe(function (input) {\n if (isEnd(input)) {\n close();\n return;\n }\n if (matcher && !matcher(input)) {\n return;\n }\n chan.put(input);\n });\n if (chan.__closed__) {\n unsubscribe();\n }\n\n if (!__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func(unsubscribe)) {\n throw new Error('in eventChannel: subscribe should return a function to unsubscribe');\n }\n\n return {\n take: chan.take,\n flush: chan.flush,\n close: close\n };\n}\n\nfunction stdChannel(subscribe) {\n var chan = eventChannel(function (cb) {\n return subscribe(function (input) {\n if (input[__WEBPACK_IMPORTED_MODULE_0__utils__[\"c\" /* SAGA_ACTION */]]) {\n cb(input);\n return;\n }\n Object(__WEBPACK_IMPORTED_MODULE_2__scheduler__[\"a\" /* asap */])(function () {\n return cb(input);\n });\n });\n });\n\n return _extends({}, chan, {\n take: function take(cb, matcher) {\n if (arguments.length > 1) {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(matcher, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func, \"channel.take's matcher argument must be a function\");\n cb[__WEBPACK_IMPORTED_MODULE_0__utils__[\"b\" /* MATCH */]] = matcher;\n }\n chan.take(cb);\n }\n });\n}\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _view = __webpack_require__(494);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var site = _ref.site;\n var defaultDescription = site.defaultDescription,\n defaultThumbnail = site.defaultThumbnail,\n siteDescription = site.description,\n siteHost = site.host,\n siteTitle = site.title,\n siteTwitter = site.twitter;\n\n return {\n defaultDescription: defaultDescription,\n defaultThumbnail: defaultThumbnail,\n siteDescription: siteDescription,\n siteHost: siteHost,\n siteTitle: siteTitle,\n siteTwitter: siteTwitter\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(26);\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports) {\n\nexports.f = {}.propertyIsEnumerable;\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(26);\nvar TAG = __webpack_require__(7)('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nvar addLeadingSlash = exports.addLeadingSlash = function addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n};\n\nvar stripLeadingSlash = exports.stripLeadingSlash = function stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n};\n\nvar hasBasename = exports.hasBasename = function hasBasename(path, prefix) {\n return new RegExp('^' + prefix + '(\\\\/|\\\\?|#|$)', 'i').test(path);\n};\n\nvar stripBasename = exports.stripBasename = function stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n};\n\nvar stripTrailingSlash = exports.stripTrailingSlash = function stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n};\n\nvar parsePath = exports.parsePath = function parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n\n var hashIndex = pathname.indexOf('#');\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n};\n\nvar createPath = exports.createPath = function createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n\n\n var path = pathname || '/';\n\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : '?' + search;\n\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : '#' + hash;\n\n return path;\n};\n\n/***/ }),\n/* 67 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return addLeadingSlash; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return stripLeadingSlash; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return hasBasename; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return stripBasename; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return stripTrailingSlash; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return parsePath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return createPath; });\nvar addLeadingSlash = function addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n};\n\nvar stripLeadingSlash = function stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n};\n\nvar hasBasename = function hasBasename(path, prefix) {\n return new RegExp('^' + prefix + '(\\\\/|\\\\?|#|$)', 'i').test(path);\n};\n\nvar stripBasename = function stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n};\n\nvar stripTrailingSlash = function stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n};\n\nvar parsePath = function parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n\n var hashIndex = pathname.indexOf('#');\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n};\n\nvar createPath = function createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n\n\n var path = pathname || '/';\n\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : '?' + search;\n\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : '#' + hash;\n\n return path;\n};\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar selectAsset = exports.selectAsset = function selectAsset(show) {\n var request = show.requestList[show.request.id];\n var assetKey = request.key;\n return show.assetList[assetKey];\n};\n\nvar selectShowState = exports.selectShowState = function selectShowState(state) {\n return state.show;\n};\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(3);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(19);\nvar toLength = __webpack_require__(11);\nvar toAbsoluteIndex = __webpack_require__(43);\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports) {\n\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(26);\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(5);\nvar cof = __webpack_require__(26);\nvar MATCH = __webpack_require__(7)('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar ITERATOR = __webpack_require__(7)('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(2);\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar hide = __webpack_require__(16);\nvar redefine = __webpack_require__(17);\nvar fails = __webpack_require__(4);\nvar defined = __webpack_require__(30);\nvar wks = __webpack_require__(7);\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(2);\nvar aFunction = __webpack_require__(14);\nvar SPECIES = __webpack_require__(7)('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(3);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(17);\nvar redefineAll = __webpack_require__(49);\nvar meta = __webpack_require__(37);\nvar forOf = __webpack_require__(48);\nvar anInstance = __webpack_require__(47);\nvar isObject = __webpack_require__(5);\nvar fails = __webpack_require__(4);\nvar $iterDetect = __webpack_require__(74);\nvar setToStringTag = __webpack_require__(55);\nvar inheritIfRequired = __webpack_require__(94);\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(3);\nvar hide = __webpack_require__(16);\nvar uid = __webpack_require__(40);\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// Forced replacement prototype accessors methods\nmodule.exports = __webpack_require__(41) || !__webpack_require__(4)(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete __webpack_require__(3)[K];\n});\n\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(14);\nvar ctx = __webpack_require__(25);\nvar forOf = __webpack_require__(48);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n/***/ }),\n/* 84 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return createLocation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return locationsAreEqual; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_resolve_pathname__ = __webpack_require__(175);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_value_equal__ = __webpack_require__(176);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__PathUtils__ = __webpack_require__(67);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\nvar createLocation = function createLocation(path, state, key, currentLocation) {\n var location = void 0;\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = Object(__WEBPACK_IMPORTED_MODULE_2__PathUtils__[\"d\" /* parsePath */])(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = Object(__WEBPACK_IMPORTED_MODULE_0_resolve_pathname__[\"default\"])(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n};\n\nvar locationsAreEqual = function locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && Object(__WEBPACK_IMPORTED_MODULE_1_value_equal__[\"default\"])(a.state, b.state);\n};\n\n/***/ }),\n/* 85 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export BUFFER_OVERFLOW */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return buffers; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(23);\n\n\nvar BUFFER_OVERFLOW = \"Channel's Buffer overflow!\";\n\nvar ON_OVERFLOW_THROW = 1;\nvar ON_OVERFLOW_DROP = 2;\nvar ON_OVERFLOW_SLIDE = 3;\nvar ON_OVERFLOW_EXPAND = 4;\n\nvar zeroBuffer = { isEmpty: __WEBPACK_IMPORTED_MODULE_0__utils__[\"r\" /* kTrue */], put: __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */], take: __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */] };\n\nfunction ringBuffer() {\n var limit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;\n var overflowAction = arguments[1];\n\n var arr = new Array(limit);\n var length = 0;\n var pushIndex = 0;\n var popIndex = 0;\n\n var push = function push(it) {\n arr[pushIndex] = it;\n pushIndex = (pushIndex + 1) % limit;\n length++;\n };\n\n var take = function take() {\n if (length != 0) {\n var it = arr[popIndex];\n arr[popIndex] = null;\n length--;\n popIndex = (popIndex + 1) % limit;\n return it;\n }\n };\n\n var flush = function flush() {\n var items = [];\n while (length) {\n items.push(take());\n }\n return items;\n };\n\n return {\n isEmpty: function isEmpty() {\n return length == 0;\n },\n put: function put(it) {\n if (length < limit) {\n push(it);\n } else {\n var doubledLimit = void 0;\n switch (overflowAction) {\n case ON_OVERFLOW_THROW:\n throw new Error(BUFFER_OVERFLOW);\n case ON_OVERFLOW_SLIDE:\n arr[pushIndex] = it;\n pushIndex = (pushIndex + 1) % limit;\n popIndex = pushIndex;\n break;\n case ON_OVERFLOW_EXPAND:\n doubledLimit = 2 * limit;\n\n arr = flush();\n\n length = arr.length;\n pushIndex = arr.length;\n popIndex = 0;\n\n arr.length = doubledLimit;\n limit = doubledLimit;\n\n push(it);\n break;\n default:\n // DROP\n }\n }\n },\n take: take,\n flush: flush\n };\n}\n\nvar buffers = {\n none: function none() {\n return zeroBuffer;\n },\n fixed: function fixed(limit) {\n return ringBuffer(limit, ON_OVERFLOW_THROW);\n },\n dropping: function dropping(limit) {\n return ringBuffer(limit, ON_OVERFLOW_DROP);\n },\n sliding: function sliding(limit) {\n return ringBuffer(limit, ON_OVERFLOW_SLIDE);\n },\n expanding: function expanding(initialSize) {\n return ringBuffer(initialSize, ON_OVERFLOW_EXPAND);\n }\n};\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar selectSiteState = exports.selectSiteState = function selectSiteState(state) {\n return state.site;\n};\n\nvar selectSiteHost = exports.selectSiteHost = function selectSiteHost(state) {\n return state.site.host;\n};\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(5);\nvar document = __webpack_require__(3).document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(3);\nvar core = __webpack_require__(28);\nvar LIBRARY = __webpack_require__(41);\nvar wksExt = __webpack_require__(132);\nvar defineProperty = __webpack_require__(10).f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar shared = __webpack_require__(69)('keys');\nvar uid = __webpack_require__(40);\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n\n\n/***/ }),\n/* 90 */\n/***/ (function(module, exports) {\n\n// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n/***/ }),\n/* 91 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar document = __webpack_require__(3).document;\nmodule.exports = document && document.documentElement;\n\n\n/***/ }),\n/* 92 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(5);\nvar anObject = __webpack_require__(2);\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = __webpack_require__(25)(Function.call, __webpack_require__(20).f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n\n\n/***/ }),\n/* 93 */\n/***/ (function(module, exports) {\n\nmodule.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\n\n/***/ }),\n/* 94 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(5);\nvar setPrototypeOf = __webpack_require__(92).set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n\n\n/***/ }),\n/* 95 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toInteger = __webpack_require__(31);\nvar defined = __webpack_require__(30);\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n\n\n/***/ }),\n/* 96 */\n/***/ (function(module, exports) {\n\n// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports) {\n\n// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(31);\nvar defined = __webpack_require__(30);\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar LIBRARY = __webpack_require__(41);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(17);\nvar hide = __webpack_require__(16);\nvar has = __webpack_require__(15);\nvar Iterators = __webpack_require__(57);\nvar $iterCreate = __webpack_require__(100);\nvar setToStringTag = __webpack_require__(55);\nvar getPrototypeOf = __webpack_require__(21);\nvar ITERATOR = __webpack_require__(7)('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar create = __webpack_require__(44);\nvar descriptor = __webpack_require__(39);\nvar setToStringTag = __webpack_require__(55);\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(16)(IteratorPrototype, __webpack_require__(7)('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(73);\nvar defined = __webpack_require__(30);\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar MATCH = __webpack_require__(7)('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// check on default Array iterator\nvar Iterators = __webpack_require__(57);\nvar ITERATOR = __webpack_require__(7)('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $defineProperty = __webpack_require__(10);\nvar createDesc = __webpack_require__(39);\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar classof = __webpack_require__(65);\nvar ITERATOR = __webpack_require__(7)('iterator');\nvar Iterators = __webpack_require__(57);\nmodule.exports = __webpack_require__(28).getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(292);\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n\nvar toObject = __webpack_require__(12);\nvar toAbsoluteIndex = __webpack_require__(43);\nvar toLength = __webpack_require__(11);\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar addToUnscopables = __webpack_require__(38);\nvar step = __webpack_require__(148);\nvar Iterators = __webpack_require__(57);\nvar toIObject = __webpack_require__(19);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(99)(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar ctx = __webpack_require__(25);\nvar invoke = __webpack_require__(138);\nvar html = __webpack_require__(91);\nvar cel = __webpack_require__(87);\nvar global = __webpack_require__(3);\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (__webpack_require__(26)(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n\n\n/***/ }),\n/* 110 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(3);\nvar macrotask = __webpack_require__(109).set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(26)(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n\n\n/***/ }),\n/* 111 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__(14);\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n\n\n/***/ }),\n/* 112 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(3);\nvar DESCRIPTORS = __webpack_require__(9);\nvar LIBRARY = __webpack_require__(41);\nvar $typed = __webpack_require__(79);\nvar hide = __webpack_require__(16);\nvar redefineAll = __webpack_require__(49);\nvar fails = __webpack_require__(4);\nvar anInstance = __webpack_require__(47);\nvar toInteger = __webpack_require__(31);\nvar toLength = __webpack_require__(11);\nvar toIndex = __webpack_require__(157);\nvar gOPN = __webpack_require__(45).f;\nvar dP = __webpack_require__(10).f;\nvar arrayFill = __webpack_require__(107);\nvar setToStringTag = __webpack_require__(55);\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n\n\n/***/ }),\n/* 113 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(3);\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n\n\n/***/ }),\n/* 114 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n/***/ }),\n/* 115 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = warning;\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n /* eslint-disable no-empty */\n } catch (e) {}\n /* eslint-enable no-empty */\n}\n\n/***/ }),\n/* 116 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__createStore__ = __webpack_require__(169);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__combineReducers__ = __webpack_require__(434);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__bindActionCreators__ = __webpack_require__(435);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__applyMiddleware__ = __webpack_require__(436);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__compose__ = __webpack_require__(172);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_warning__ = __webpack_require__(171);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"createStore\", function() { return __WEBPACK_IMPORTED_MODULE_0__createStore__[\"b\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"combineReducers\", function() { return __WEBPACK_IMPORTED_MODULE_1__combineReducers__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"bindActionCreators\", function() { return __WEBPACK_IMPORTED_MODULE_2__bindActionCreators__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"applyMiddleware\", function() { return __WEBPACK_IMPORTED_MODULE_3__applyMiddleware__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"compose\", function() { return __WEBPACK_IMPORTED_MODULE_4__compose__[\"a\"]; });\n\n\n\n\n\n\n\n/*\n* This is a dummy function to check if the function name has been altered by minification.\n* If the function has been minified and NODE_ENV !== 'production', warn the user.\n*/\nfunction isCrushed() {}\n\nif (false) {\n warning('You are currently using minified code outside of NODE_ENV === \\'production\\'. ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) ' + 'to ensure you have the correct code for your production build.');\n}\n\n\n\n/***/ }),\n/* 117 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__baseGetTag_js__ = __webpack_require__(423);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__getPrototype_js__ = __webpack_require__(428);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__isObjectLike_js__ = __webpack_require__(430);\n\n\n\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!Object(__WEBPACK_IMPORTED_MODULE_2__isObjectLike_js__[\"a\" /* default */])(value) || Object(__WEBPACK_IMPORTED_MODULE_0__baseGetTag_js__[\"a\" /* default */])(value) != objectTag) {\n return false;\n }\n var proto = Object(__WEBPACK_IMPORTED_MODULE_1__getPrototype_js__[\"a\" /* default */])(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (isPlainObject);\n\n\n/***/ }),\n/* 118 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.locationsAreEqual = exports.createLocation = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _resolvePathname = __webpack_require__(175);\n\nvar _resolvePathname2 = _interopRequireDefault(_resolvePathname);\n\nvar _valueEqual = __webpack_require__(176);\n\nvar _valueEqual2 = _interopRequireDefault(_valueEqual);\n\nvar _PathUtils = __webpack_require__(66);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar createLocation = exports.createLocation = function createLocation(path, state, key, currentLocation) {\n var location = void 0;\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = (0, _PathUtils.parsePath)(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = (0, _resolvePathname2.default)(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n};\n\nvar locationsAreEqual = exports.locationsAreEqual = function locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && (0, _valueEqual2.default)(a.state, b.state);\n};\n\n/***/ }),\n/* 119 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _warning = __webpack_require__(13);\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar createTransitionManager = function createTransitionManager() {\n var prompt = null;\n\n var setPrompt = function setPrompt(nextPrompt) {\n (0, _warning2.default)(prompt == null, 'A history supports only one prompt at a time');\n\n prompt = nextPrompt;\n\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n };\n\n var confirmTransitionTo = function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n (0, _warning2.default)(false, 'A history needs a getUserConfirmation function in order to use a prompt message');\n\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n };\n\n var listeners = [];\n\n var appendListener = function appendListener(fn) {\n var isActive = true;\n\n var listener = function listener() {\n if (isActive) fn.apply(undefined, arguments);\n };\n\n listeners.push(listener);\n\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n };\n\n var notifyListeners = function notifyListeners() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(undefined, args);\n });\n };\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n};\n\nexports.default = createTransitionManager;\n\n/***/ }),\n/* 120 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_router_es_Router__ = __webpack_require__(121);\n// Written in this round about way for babel-transform-imports\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0_react_router_es_Router__[\"a\" /* default */]);\n\n/***/ }),\n/* 121 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_warning__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant__ = __webpack_require__(22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_invariant__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_prop_types__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_prop_types__);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n/**\n * The public API for putting history on context.\n */\n\nvar Router = function (_React$Component) {\n _inherits(Router, _React$Component);\n\n function Router() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Router);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n match: _this.computeMatch(_this.props.history.location.pathname)\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Router.prototype.getChildContext = function getChildContext() {\n return {\n router: _extends({}, this.context.router, {\n history: this.props.history,\n route: {\n location: this.props.history.location,\n match: this.state.match\n }\n })\n };\n };\n\n Router.prototype.computeMatch = function computeMatch(pathname) {\n return {\n path: '/',\n url: '/',\n params: {},\n isExact: pathname === '/'\n };\n };\n\n Router.prototype.componentWillMount = function componentWillMount() {\n var _this2 = this;\n\n var _props = this.props,\n children = _props.children,\n history = _props.history;\n\n\n __WEBPACK_IMPORTED_MODULE_1_invariant___default()(children == null || __WEBPACK_IMPORTED_MODULE_2_react___default.a.Children.count(children) === 1, 'A may have only one child element');\n\n // Do this here so we can setState when a changes the\n // location in componentWillMount. This happens e.g. when doing\n // server rendering using a .\n this.unlisten = history.listen(function () {\n _this2.setState({\n match: _this2.computeMatch(history.location.pathname)\n });\n });\n };\n\n Router.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(this.props.history === nextProps.history, 'You cannot change ');\n };\n\n Router.prototype.componentWillUnmount = function componentWillUnmount() {\n this.unlisten();\n };\n\n Router.prototype.render = function render() {\n var children = this.props.children;\n\n return children ? __WEBPACK_IMPORTED_MODULE_2_react___default.a.Children.only(children) : null;\n };\n\n return Router;\n}(__WEBPACK_IMPORTED_MODULE_2_react___default.a.Component);\n\nRouter.propTypes = {\n history: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.object.isRequired,\n children: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.node\n};\nRouter.contextTypes = {\n router: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.object\n};\nRouter.childContextTypes = {\n router: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.object.isRequired\n};\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Router);\n\n/***/ }),\n/* 122 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_path_to_regexp__ = __webpack_require__(449);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_path_to_regexp___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_path_to_regexp__);\n\n\nvar patternCache = {};\nvar cacheLimit = 10000;\nvar cacheCount = 0;\n\nvar compilePath = function compilePath(pattern, options) {\n var cacheKey = '' + options.end + options.strict + options.sensitive;\n var cache = patternCache[cacheKey] || (patternCache[cacheKey] = {});\n\n if (cache[pattern]) return cache[pattern];\n\n var keys = [];\n var re = __WEBPACK_IMPORTED_MODULE_0_path_to_regexp___default()(pattern, keys, options);\n var compiledPattern = { re: re, keys: keys };\n\n if (cacheCount < cacheLimit) {\n cache[pattern] = compiledPattern;\n cacheCount++;\n }\n\n return compiledPattern;\n};\n\n/**\n * Public API for matching a URL pathname to a path pattern.\n */\nvar matchPath = function matchPath(pathname) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (typeof options === 'string') options = { path: options };\n\n var _options = options,\n _options$path = _options.path,\n path = _options$path === undefined ? '/' : _options$path,\n _options$exact = _options.exact,\n exact = _options$exact === undefined ? false : _options$exact,\n _options$strict = _options.strict,\n strict = _options$strict === undefined ? false : _options$strict,\n _options$sensitive = _options.sensitive,\n sensitive = _options$sensitive === undefined ? false : _options$sensitive;\n\n var _compilePath = compilePath(path, { end: exact, strict: strict, sensitive: sensitive }),\n re = _compilePath.re,\n keys = _compilePath.keys;\n\n var match = re.exec(pathname);\n\n if (!match) return null;\n\n var url = match[0],\n values = match.slice(1);\n\n var isExact = pathname === url;\n\n if (exact && !isExact) return null;\n\n return {\n path: path, // the path pattern used to match\n url: path === '/' && url === '' ? '/' : url, // the matched portion of the URL\n isExact: isExact, // whether or not we matched exactly\n params: keys.reduce(function (memo, key, index) {\n memo[key.name] = values[index];\n return memo;\n }, {})\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (matchPath);\n\n/***/ }),\n/* 123 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_warning__);\n\n\nvar createTransitionManager = function createTransitionManager() {\n var prompt = null;\n\n var setPrompt = function setPrompt(nextPrompt) {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(prompt == null, 'A history supports only one prompt at a time');\n\n prompt = nextPrompt;\n\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n };\n\n var confirmTransitionTo = function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(false, 'A history needs a getUserConfirmation function in order to use a prompt message');\n\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n };\n\n var listeners = [];\n\n var appendListener = function appendListener(fn) {\n var isActive = true;\n\n var listener = function listener() {\n if (isActive) fn.apply(undefined, arguments);\n };\n\n listeners.push(listener);\n\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n };\n\n var notifyListeners = function notifyListeners() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(undefined, args);\n });\n };\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (createTransitionManager);\n\n/***/ }),\n/* 124 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar FILE_SELECTED = exports.FILE_SELECTED = 'FILE_SELECTED';\nvar FILE_CLEAR = exports.FILE_CLEAR = 'FILE_CLEAR';\nvar METADATA_UPDATE = exports.METADATA_UPDATE = 'METADATA_UPDATE';\nvar CLAIM_UPDATE = exports.CLAIM_UPDATE = 'CLAIM_UPDATE';\nvar SET_PUBLISH_IN_CHANNEL = exports.SET_PUBLISH_IN_CHANNEL = 'SET_PUBLISH_IN_CHANNEL';\nvar PUBLISH_STATUS_UPDATE = exports.PUBLISH_STATUS_UPDATE = 'PUBLISH_STATUS_UPDATE';\nvar ERROR_UPDATE = exports.ERROR_UPDATE = 'ERROR_UPDATE';\nvar SELECTED_CHANNEL_UPDATE = exports.SELECTED_CHANNEL_UPDATE = 'SELECTED_CHANNEL_UPDATE';\nvar TOGGLE_METADATA_INPUTS = exports.TOGGLE_METADATA_INPUTS = 'TOGGLE_METADATA_INPUTS';\nvar THUMBNAIL_NEW = exports.THUMBNAIL_NEW = 'THUMBNAIL_NEW';\nvar PUBLISH_START = exports.PUBLISH_START = 'PUBLISH_START';\n\n/***/ }),\n/* 125 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction SiteConfig() {\n var _this = this;\n\n this.analytics = {\n googleId: 'default'\n };\n this.assetDefaults = {\n description: 'An asset published on Spee.ch',\n thumbnail: 'https://spee.ch/assets/img/video_thumb_default.png',\n title: 'Spee.ch'\n };\n this.auth = {\n sessionKey: 'default'\n };\n this.details = {\n description: 'Open-source, decentralized image and video sharing.',\n host: 'default',\n port: 3000,\n title: 'Spee.ch',\n twitter: '@spee_ch'\n };\n this.publishing = {\n additionalClaimAddresses: [],\n disabled: false,\n disabledMessage: 'Please check back soon.',\n primaryClaimAddress: 'default',\n thumbnailChannel: 'default',\n thumbnailChannelId: 'default',\n uploadDirectory: '/home/lbry/Uploads'\n };\n this.configure = function (config) {\n if (!config) {\n return console.log('No site config received.');\n }\n var analytics = config.analytics,\n assetDefaults = config.assetDefaults,\n auth = config.auth,\n details = config.details,\n publishing = config.publishing;\n\n _this.analytics = analytics;\n _this.assetDefaults = assetDefaults;\n _this.auth = auth;\n _this.details = details;\n _this.publishing = publishing;\n };\n};\n\nmodule.exports = new SiteConfig();\n\n/***/ }),\n/* 126 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LOCAL_CHECK = exports.LOCAL_CHECK = 'LOCAL_CHECK';\nvar UNAVAILABLE = exports.UNAVAILABLE = 'UNAVAILABLE';\nvar ERROR = exports.ERROR = 'ERROR';\nvar AVAILABLE = exports.AVAILABLE = 'AVAILABLE';\n\n/***/ }),\n/* 127 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return qEnd; });\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = safeName;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = fsmIterator;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(23);\n\n\nvar done = { done: true, value: undefined };\nvar qEnd = {};\n\nfunction safeName(patternOrChannel) {\n if (__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].channel(patternOrChannel)) {\n return 'channel';\n } else if (Array.isArray(patternOrChannel)) {\n return String(patternOrChannel.map(function (entry) {\n return String(entry);\n }));\n } else {\n return String(patternOrChannel);\n }\n}\n\nfunction fsmIterator(fsm, q0) {\n var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'iterator';\n\n var updateState = void 0,\n qNext = q0;\n\n function next(arg, error) {\n if (qNext === qEnd) {\n return done;\n }\n\n if (error) {\n qNext = qEnd;\n throw error;\n } else {\n updateState && updateState(arg);\n\n var _fsm$qNext = fsm[qNext](),\n q = _fsm$qNext[0],\n output = _fsm$qNext[1],\n _updateState = _fsm$qNext[2];\n\n qNext = q;\n updateState = _updateState;\n return qNext === qEnd ? done : output;\n }\n }\n\n return Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"t\" /* makeIterator */])(next, function (error) {\n return next(null, error);\n }, name, true);\n}\n\n/***/ }),\n/* 128 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.updateLoggedInChannel = updateLoggedInChannel;\n\nvar _channel_action_types = __webpack_require__(183);\n\nvar actions = _interopRequireWildcard(_channel_action_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// export action creators\n\nfunction updateLoggedInChannel(name, shortId, longId) {\n return {\n type: actions.CHANNEL_UPDATE,\n data: {\n name: name,\n shortId: shortId,\n longId: longId\n }\n };\n};\n\n/***/ }),\n/* 129 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(8);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _ActiveStatusBar = __webpack_require__(529);\n\nvar _ActiveStatusBar2 = _interopRequireDefault(_ActiveStatusBar);\n\nvar _InactiveStatusBar = __webpack_require__(530);\n\nvar _InactiveStatusBar2 = _interopRequireDefault(_InactiveStatusBar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ProgressBar = function (_React$Component) {\n _inherits(ProgressBar, _React$Component);\n\n function ProgressBar(props) {\n _classCallCheck(this, ProgressBar);\n\n var _this = _possibleConstructorReturn(this, (ProgressBar.__proto__ || Object.getPrototypeOf(ProgressBar)).call(this, props));\n\n _this.state = {\n bars: [],\n index: 0,\n incrementer: 1\n };\n _this.createBars = _this.createBars.bind(_this);\n _this.startProgressBar = _this.startProgressBar.bind(_this);\n _this.updateProgressBar = _this.updateProgressBar.bind(_this);\n _this.stopProgressBar = _this.stopProgressBar.bind(_this);\n return _this;\n }\n\n _createClass(ProgressBar, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.createBars();\n this.startProgressBar();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.stopProgressBar();\n }\n }, {\n key: 'createBars',\n value: function createBars() {\n var bars = [];\n for (var i = 0; i <= this.props.size; i++) {\n bars.push({ isActive: false });\n }\n this.setState({ bars: bars });\n }\n }, {\n key: 'startProgressBar',\n value: function startProgressBar() {\n this.updateInterval = setInterval(this.updateProgressBar.bind(this), 300);\n }\n }, {\n key: 'updateProgressBar',\n value: function updateProgressBar() {\n var index = this.state.index;\n var incrementer = this.state.incrementer;\n var bars = this.state.bars;\n // flip incrementer if necessary, to stay in bounds\n if (index < 0 || index > this.props.size) {\n incrementer = incrementer * -1;\n index += incrementer;\n }\n // update the indexed bar\n if (incrementer > 0) {\n bars[index].isActive = true;\n } else {\n bars[index].isActive = false;\n };\n // increment index\n index += incrementer;\n // update state\n this.setState({\n bars: bars,\n incrementer: incrementer,\n index: index\n });\n }\n }, {\n key: 'stopProgressBar',\n value: function stopProgressBar() {\n clearInterval(this.updateInterval);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n this.state.bars.map(function (bar, index) {\n return bar.isActive ? _react2.default.createElement(_ActiveStatusBar2.default, { key: index }) : _react2.default.createElement(_InactiveStatusBar2.default, { key: index });\n })\n );\n }\n }]);\n\n return ProgressBar;\n}(_react2.default.Component);\n\n;\n\nProgressBar.propTypes = {\n size: _propTypes2.default.number.isRequired\n};\n\nexports.default = ProgressBar;\n\n/***/ }),\n/* 130 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(8);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _NavBar = __webpack_require__(54);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ErrorPage = function (_React$Component) {\n _inherits(ErrorPage, _React$Component);\n\n function ErrorPage() {\n _classCallCheck(this, ErrorPage);\n\n return _possibleConstructorReturn(this, (ErrorPage.__proto__ || Object.getPrototypeOf(ErrorPage)).apply(this, arguments));\n }\n\n _createClass(ErrorPage, [{\n key: 'render',\n value: function render() {\n var error = this.props.error;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'p',\n null,\n error\n )\n )\n );\n }\n }]);\n\n return ErrorPage;\n}(_react2.default.Component);\n\n;\n\nErrorPage.propTypes = {\n error: _propTypes2.default.string.isRequired\n};\n\nexports.default = ErrorPage;\n\n/***/ }),\n/* 131 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = !__webpack_require__(9) && !__webpack_require__(4)(function () {\n return Object.defineProperty(__webpack_require__(87)('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n/* 132 */\n/***/ (function(module, exports, __webpack_require__) {\n\nexports.f = __webpack_require__(7);\n\n\n/***/ }),\n/* 133 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar has = __webpack_require__(15);\nvar toIObject = __webpack_require__(19);\nvar arrayIndexOf = __webpack_require__(70)(false);\nvar IE_PROTO = __webpack_require__(89)('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n\n/***/ }),\n/* 134 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(10);\nvar anObject = __webpack_require__(2);\nvar getKeys = __webpack_require__(42);\n\nmodule.exports = __webpack_require__(9) ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n\n\n/***/ }),\n/* 135 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(19);\nvar gOPN = __webpack_require__(45).f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n/***/ }),\n/* 136 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = __webpack_require__(42);\nvar gOPS = __webpack_require__(71);\nvar pIE = __webpack_require__(64);\nvar toObject = __webpack_require__(12);\nvar IObject = __webpack_require__(63);\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(4)(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n\n\n/***/ }),\n/* 137 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar aFunction = __webpack_require__(14);\nvar isObject = __webpack_require__(5);\nvar invoke = __webpack_require__(138);\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n\n\n/***/ }),\n/* 138 */\n/***/ (function(module, exports) {\n\n// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n\n\n/***/ }),\n/* 139 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $parseInt = __webpack_require__(3).parseInt;\nvar $trim = __webpack_require__(56).trim;\nvar ws = __webpack_require__(93);\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n\n\n/***/ }),\n/* 140 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $parseFloat = __webpack_require__(3).parseFloat;\nvar $trim = __webpack_require__(56).trim;\n\nmodule.exports = 1 / $parseFloat(__webpack_require__(93) + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n\n\n/***/ }),\n/* 141 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar cof = __webpack_require__(26);\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n\n\n/***/ }),\n/* 142 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.3 Number.isInteger(number)\nvar isObject = __webpack_require__(5);\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n\n\n/***/ }),\n/* 143 */\n/***/ (function(module, exports) {\n\n// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n\n\n/***/ }),\n/* 144 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.16 Math.fround(x)\nvar sign = __webpack_require__(96);\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n\n\n/***/ }),\n/* 145 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(2);\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n\n\n/***/ }),\n/* 146 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar aFunction = __webpack_require__(14);\nvar toObject = __webpack_require__(12);\nvar IObject = __webpack_require__(63);\nvar toLength = __webpack_require__(11);\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n\n\n/***/ }),\n/* 147 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n\nvar toObject = __webpack_require__(12);\nvar toAbsoluteIndex = __webpack_require__(43);\nvar toLength = __webpack_require__(11);\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n\n\n/***/ }),\n/* 148 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n\n\n/***/ }),\n/* 149 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 21.2.5.3 get RegExp.prototype.flags()\nif (__webpack_require__(9) && /./g.flags != 'g') __webpack_require__(10).f(RegExp.prototype, 'flags', {\n configurable: true,\n get: __webpack_require__(75)\n});\n\n\n/***/ }),\n/* 150 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n\n\n/***/ }),\n/* 151 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(2);\nvar isObject = __webpack_require__(5);\nvar newPromiseCapability = __webpack_require__(111);\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n\n\n/***/ }),\n/* 152 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar strong = __webpack_require__(153);\nvar validate = __webpack_require__(58);\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = __webpack_require__(78)(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n\n\n/***/ }),\n/* 153 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar dP = __webpack_require__(10).f;\nvar create = __webpack_require__(44);\nvar redefineAll = __webpack_require__(49);\nvar ctx = __webpack_require__(25);\nvar anInstance = __webpack_require__(47);\nvar forOf = __webpack_require__(48);\nvar $iterDefine = __webpack_require__(99);\nvar step = __webpack_require__(148);\nvar setSpecies = __webpack_require__(46);\nvar DESCRIPTORS = __webpack_require__(9);\nvar fastKey = __webpack_require__(37).fastKey;\nvar validate = __webpack_require__(58);\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n\n\n/***/ }),\n/* 154 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar strong = __webpack_require__(153);\nvar validate = __webpack_require__(58);\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = __webpack_require__(78)(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n\n\n/***/ }),\n/* 155 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar each = __webpack_require__(33)(0);\nvar redefine = __webpack_require__(17);\nvar meta = __webpack_require__(37);\nvar assign = __webpack_require__(136);\nvar weak = __webpack_require__(156);\nvar isObject = __webpack_require__(5);\nvar fails = __webpack_require__(4);\nvar validate = __webpack_require__(58);\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = __webpack_require__(78)(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n\n\n/***/ }),\n/* 156 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar redefineAll = __webpack_require__(49);\nvar getWeak = __webpack_require__(37).getWeak;\nvar anObject = __webpack_require__(2);\nvar isObject = __webpack_require__(5);\nvar anInstance = __webpack_require__(47);\nvar forOf = __webpack_require__(48);\nvar createArrayMethod = __webpack_require__(33);\nvar $has = __webpack_require__(15);\nvar validate = __webpack_require__(58);\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n\n\n/***/ }),\n/* 157 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = __webpack_require__(31);\nvar toLength = __webpack_require__(11);\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n\n\n/***/ }),\n/* 158 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(45);\nvar gOPS = __webpack_require__(71);\nvar anObject = __webpack_require__(2);\nvar Reflect = __webpack_require__(3).Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n\n\n/***/ }),\n/* 159 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = __webpack_require__(72);\nvar isObject = __webpack_require__(5);\nvar toLength = __webpack_require__(11);\nvar ctx = __webpack_require__(25);\nvar IS_CONCAT_SPREADABLE = __webpack_require__(7)('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n\n\n/***/ }),\n/* 160 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = __webpack_require__(11);\nvar repeat = __webpack_require__(95);\nvar defined = __webpack_require__(30);\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n\n\n/***/ }),\n/* 161 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar getKeys = __webpack_require__(42);\nvar toIObject = __webpack_require__(19);\nvar isEnum = __webpack_require__(64).f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n\n\n/***/ }),\n/* 162 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = __webpack_require__(65);\nvar from = __webpack_require__(163);\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + \"#toJSON isn't generic\");\n return from(this);\n };\n};\n\n\n/***/ }),\n/* 163 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar forOf = __webpack_require__(48);\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n\n\n/***/ }),\n/* 164 */\n/***/ (function(module, exports) {\n\n// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n\n\n/***/ }),\n/* 165 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar emptyObject = {};\n\nif (false) {\n Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n/***/ }),\n/* 166 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return subscriptionShape; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return storeShape; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_prop_types__);\n\n\nvar subscriptionShape = __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.shape({\n trySubscribe: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired,\n tryUnsubscribe: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired,\n notifyNestedSubs: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired,\n isSubscribed: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired\n});\n\nvar storeShape = __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.shape({\n subscribe: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired,\n dispatch: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired,\n getState: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired\n});\n\n/***/ }),\n/* 167 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = connectAdvanced;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics__ = __webpack_require__(168);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant__ = __webpack_require__(22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_invariant__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_Subscription__ = __webpack_require__(419);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils_PropTypes__ = __webpack_require__(166);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\n\n\n\n\n\n\n\nvar hotReloadingVersion = 0;\nvar dummyState = {};\nfunction noop() {}\nfunction makeSelectorStateful(sourceSelector, store) {\n // wrap the selector in an object that tracks its results between runs.\n var selector = {\n run: function runComponentSelector(props) {\n try {\n var nextProps = sourceSelector(store.getState(), props);\n if (nextProps !== selector.props || selector.error) {\n selector.shouldComponentUpdate = true;\n selector.props = nextProps;\n selector.error = null;\n }\n } catch (error) {\n selector.shouldComponentUpdate = true;\n selector.error = error;\n }\n }\n };\n\n return selector;\n}\n\nfunction connectAdvanced(\n/*\n selectorFactory is a func that is responsible for returning the selector function used to\n compute new props from state, props, and dispatch. For example:\n export default connectAdvanced((dispatch, options) => (state, props) => ({\n thing: state.things[props.thingId],\n saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),\n }))(YourComponent)\n Access to dispatch is provided to the factory so selectorFactories can bind actionCreators\n outside of their selector as an optimization. Options passed to connectAdvanced are passed to\n the selectorFactory, along with displayName and WrappedComponent, as the second argument.\n Note that selectorFactory is responsible for all caching/memoization of inbound and outbound\n props. Do not use connectAdvanced directly without memoizing results between calls to your\n selector, otherwise the Connect component will re-render on every state or props change.\n*/\nselectorFactory) {\n var _contextTypes, _childContextTypes;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$getDisplayName = _ref.getDisplayName,\n getDisplayName = _ref$getDisplayName === undefined ? function (name) {\n return 'ConnectAdvanced(' + name + ')';\n } : _ref$getDisplayName,\n _ref$methodName = _ref.methodName,\n methodName = _ref$methodName === undefined ? 'connectAdvanced' : _ref$methodName,\n _ref$renderCountProp = _ref.renderCountProp,\n renderCountProp = _ref$renderCountProp === undefined ? undefined : _ref$renderCountProp,\n _ref$shouldHandleStat = _ref.shouldHandleStateChanges,\n shouldHandleStateChanges = _ref$shouldHandleStat === undefined ? true : _ref$shouldHandleStat,\n _ref$storeKey = _ref.storeKey,\n storeKey = _ref$storeKey === undefined ? 'store' : _ref$storeKey,\n _ref$withRef = _ref.withRef,\n withRef = _ref$withRef === undefined ? false : _ref$withRef,\n connectOptions = _objectWithoutProperties(_ref, ['getDisplayName', 'methodName', 'renderCountProp', 'shouldHandleStateChanges', 'storeKey', 'withRef']);\n\n var subscriptionKey = storeKey + 'Subscription';\n var version = hotReloadingVersion++;\n\n var contextTypes = (_contextTypes = {}, _contextTypes[storeKey] = __WEBPACK_IMPORTED_MODULE_4__utils_PropTypes__[\"a\" /* storeShape */], _contextTypes[subscriptionKey] = __WEBPACK_IMPORTED_MODULE_4__utils_PropTypes__[\"b\" /* subscriptionShape */], _contextTypes);\n var childContextTypes = (_childContextTypes = {}, _childContextTypes[subscriptionKey] = __WEBPACK_IMPORTED_MODULE_4__utils_PropTypes__[\"b\" /* subscriptionShape */], _childContextTypes);\n\n return function wrapWithConnect(WrappedComponent) {\n __WEBPACK_IMPORTED_MODULE_1_invariant___default()(typeof WrappedComponent == 'function', 'You must pass a component to the function returned by ' + (methodName + '. Instead received ' + JSON.stringify(WrappedComponent)));\n\n var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n\n var displayName = getDisplayName(wrappedComponentName);\n\n var selectorFactoryOptions = _extends({}, connectOptions, {\n getDisplayName: getDisplayName,\n methodName: methodName,\n renderCountProp: renderCountProp,\n shouldHandleStateChanges: shouldHandleStateChanges,\n storeKey: storeKey,\n withRef: withRef,\n displayName: displayName,\n wrappedComponentName: wrappedComponentName,\n WrappedComponent: WrappedComponent\n });\n\n var Connect = function (_Component) {\n _inherits(Connect, _Component);\n\n function Connect(props, context) {\n _classCallCheck(this, Connect);\n\n var _this = _possibleConstructorReturn(this, _Component.call(this, props, context));\n\n _this.version = version;\n _this.state = {};\n _this.renderCount = 0;\n _this.store = props[storeKey] || context[storeKey];\n _this.propsMode = Boolean(props[storeKey]);\n _this.setWrappedInstance = _this.setWrappedInstance.bind(_this);\n\n __WEBPACK_IMPORTED_MODULE_1_invariant___default()(_this.store, 'Could not find \"' + storeKey + '\" in either the context or props of ' + ('\"' + displayName + '\". Either wrap the root component in a , ') + ('or explicitly pass \"' + storeKey + '\" as a prop to \"' + displayName + '\".'));\n\n _this.initSelector();\n _this.initSubscription();\n return _this;\n }\n\n Connect.prototype.getChildContext = function getChildContext() {\n var _ref2;\n\n // If this component received store from props, its subscription should be transparent\n // to any descendants receiving store+subscription from context; it passes along\n // subscription passed to it. Otherwise, it shadows the parent subscription, which allows\n // Connect to control ordering of notifications to flow top-down.\n var subscription = this.propsMode ? null : this.subscription;\n return _ref2 = {}, _ref2[subscriptionKey] = subscription || this.context[subscriptionKey], _ref2;\n };\n\n Connect.prototype.componentDidMount = function componentDidMount() {\n if (!shouldHandleStateChanges) return;\n\n // componentWillMount fires during server side rendering, but componentDidMount and\n // componentWillUnmount do not. Because of this, trySubscribe happens during ...didMount.\n // Otherwise, unsubscription would never take place during SSR, causing a memory leak.\n // To handle the case where a child component may have triggered a state change by\n // dispatching an action in its componentWillMount, we have to re-run the select and maybe\n // re-render.\n this.subscription.trySubscribe();\n this.selector.run(this.props);\n if (this.selector.shouldComponentUpdate) this.forceUpdate();\n };\n\n Connect.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n this.selector.run(nextProps);\n };\n\n Connect.prototype.shouldComponentUpdate = function shouldComponentUpdate() {\n return this.selector.shouldComponentUpdate;\n };\n\n Connect.prototype.componentWillUnmount = function componentWillUnmount() {\n if (this.subscription) this.subscription.tryUnsubscribe();\n this.subscription = null;\n this.notifyNestedSubs = noop;\n this.store = null;\n this.selector.run = noop;\n this.selector.shouldComponentUpdate = false;\n };\n\n Connect.prototype.getWrappedInstance = function getWrappedInstance() {\n __WEBPACK_IMPORTED_MODULE_1_invariant___default()(withRef, 'To access the wrapped instance, you need to specify ' + ('{ withRef: true } in the options argument of the ' + methodName + '() call.'));\n return this.wrappedInstance;\n };\n\n Connect.prototype.setWrappedInstance = function setWrappedInstance(ref) {\n this.wrappedInstance = ref;\n };\n\n Connect.prototype.initSelector = function initSelector() {\n var sourceSelector = selectorFactory(this.store.dispatch, selectorFactoryOptions);\n this.selector = makeSelectorStateful(sourceSelector, this.store);\n this.selector.run(this.props);\n };\n\n Connect.prototype.initSubscription = function initSubscription() {\n if (!shouldHandleStateChanges) return;\n\n // parentSub's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n var parentSub = (this.propsMode ? this.props : this.context)[subscriptionKey];\n this.subscription = new __WEBPACK_IMPORTED_MODULE_3__utils_Subscription__[\"a\" /* default */](this.store, parentSub, this.onStateChange.bind(this));\n\n // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `this.subscription` will then be null. An\n // extra null check every change can be avoided by copying the method onto `this` and then\n // replacing it with a no-op on unmount. This can probably be avoided if Subscription's\n // listeners logic is changed to not call listeners that have been unsubscribed in the\n // middle of the notification loop.\n this.notifyNestedSubs = this.subscription.notifyNestedSubs.bind(this.subscription);\n };\n\n Connect.prototype.onStateChange = function onStateChange() {\n this.selector.run(this.props);\n\n if (!this.selector.shouldComponentUpdate) {\n this.notifyNestedSubs();\n } else {\n this.componentDidUpdate = this.notifyNestedSubsOnComponentDidUpdate;\n this.setState(dummyState);\n }\n };\n\n Connect.prototype.notifyNestedSubsOnComponentDidUpdate = function notifyNestedSubsOnComponentDidUpdate() {\n // `componentDidUpdate` is conditionally implemented when `onStateChange` determines it\n // needs to notify nested subs. Once called, it unimplements itself until further state\n // changes occur. Doing it this way vs having a permanent `componentDidUpdate` that does\n // a boolean check every time avoids an extra method call most of the time, resulting\n // in some perf boost.\n this.componentDidUpdate = undefined;\n this.notifyNestedSubs();\n };\n\n Connect.prototype.isSubscribed = function isSubscribed() {\n return Boolean(this.subscription) && this.subscription.isSubscribed();\n };\n\n Connect.prototype.addExtraProps = function addExtraProps(props) {\n if (!withRef && !renderCountProp && !(this.propsMode && this.subscription)) return props;\n // make a shallow copy so that fields added don't leak to the original selector.\n // this is especially important for 'ref' since that's a reference back to the component\n // instance. a singleton memoized selector would then be holding a reference to the\n // instance, preventing the instance from being garbage collected, and that would be bad\n var withExtras = _extends({}, props);\n if (withRef) withExtras.ref = this.setWrappedInstance;\n if (renderCountProp) withExtras[renderCountProp] = this.renderCount++;\n if (this.propsMode && this.subscription) withExtras[subscriptionKey] = this.subscription;\n return withExtras;\n };\n\n Connect.prototype.render = function render() {\n var selector = this.selector;\n selector.shouldComponentUpdate = false;\n\n if (selector.error) {\n throw selector.error;\n } else {\n return Object(__WEBPACK_IMPORTED_MODULE_2_react__[\"createElement\"])(WrappedComponent, this.addExtraProps(selector.props));\n }\n };\n\n return Connect;\n }(__WEBPACK_IMPORTED_MODULE_2_react__[\"Component\"]);\n\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = displayName;\n Connect.childContextTypes = childContextTypes;\n Connect.contextTypes = contextTypes;\n Connect.propTypes = contextTypes;\n\n if (false) {\n Connect.prototype.componentWillUpdate = function componentWillUpdate() {\n var _this2 = this;\n\n // We are hot reloading!\n if (this.version !== version) {\n this.version = version;\n this.initSelector();\n\n // If any connected descendants don't hot reload (and resubscribe in the process), their\n // listeners will be lost when we unsubscribe. Unfortunately, by copying over all\n // listeners, this does mean that the old versions of connected descendants will still be\n // notified of state changes; however, their onStateChange function is a no-op so this\n // isn't a huge deal.\n var oldListeners = [];\n\n if (this.subscription) {\n oldListeners = this.subscription.listeners.get();\n this.subscription.tryUnsubscribe();\n }\n this.initSubscription();\n if (shouldHandleStateChanges) {\n this.subscription.trySubscribe();\n oldListeners.forEach(function (listener) {\n return _this2.subscription.listeners.subscribe(listener);\n });\n }\n }\n };\n }\n\n return __WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics___default()(Connect, WrappedComponent);\n };\n}\n\n/***/ }),\n/* 168 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n(function (global, factory) {\n true ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.hoistNonReactStatics = factory());\n}(this, (function () {\n 'use strict';\n \n var REACT_STATICS = {\n childContextTypes: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n };\n \n var KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n };\n \n var defineProperty = Object.defineProperty;\n var getOwnPropertyNames = Object.getOwnPropertyNames;\n var getOwnPropertySymbols = Object.getOwnPropertySymbols;\n var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n var getPrototypeOf = Object.getPrototypeOf;\n var objectPrototype = getPrototypeOf && getPrototypeOf(Object);\n \n return function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components\n \n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n \n var keys = getOwnPropertyNames(sourceComponent);\n \n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n \n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (!REACT_STATICS[key] && !KNOWN_STATICS[key] && (!blacklist || !blacklist[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n try { // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n \n return targetComponent;\n }\n \n return targetComponent;\n };\n})));\n\n\n/***/ }),\n/* 169 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ActionTypes; });\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = createStore;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__ = __webpack_require__(117);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_symbol_observable__ = __webpack_require__(431);\n\n\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar ActionTypes = {\n INIT: '@@redux/INIT'\n\n /**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n};function createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error('Expected the enhancer to be a function.');\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error('Expected the reducer to be a function.');\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n function getState() {\n return currentState;\n }\n\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Expected listener to be a function.');\n }\n\n var isSubscribed = true;\n\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n isSubscribed = false;\n\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n };\n }\n\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n function dispatch(action) {\n if (!Object(__WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__[\"a\" /* default */])(action)) {\n throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n }\n\n if (isDispatching) {\n throw new Error('Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error('Expected the nextReducer to be a function.');\n }\n\n currentReducer = nextReducer;\n dispatch({ type: ActionTypes.INIT });\n }\n\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object') {\n throw new TypeError('Expected the observer to be an object.');\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return { unsubscribe: unsubscribe };\n }\n }, _ref[__WEBPACK_IMPORTED_MODULE_1_symbol_observable__[\"a\" /* default */]] = function () {\n return this;\n }, _ref;\n }\n\n // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n dispatch({ type: ActionTypes.INIT });\n\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[__WEBPACK_IMPORTED_MODULE_1_symbol_observable__[\"a\" /* default */]] = observable, _ref2;\n}\n\n/***/ }),\n/* 170 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__root_js__ = __webpack_require__(424);\n\n\n/** Built-in value references. */\nvar Symbol = __WEBPACK_IMPORTED_MODULE_0__root_js__[\"a\" /* default */].Symbol;\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Symbol);\n\n\n/***/ }),\n/* 171 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export default */\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n /* eslint-disable no-empty */\n } catch (e) {}\n /* eslint-enable no-empty */\n}\n\n/***/ }),\n/* 172 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = compose;\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\n\nfunction compose() {\n for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(undefined, arguments));\n };\n });\n}\n\n/***/ }),\n/* 173 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = wrapMapToPropsConstant;\n/* unused harmony export getDependsOnOwnProps */\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = wrapMapToPropsFunc;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_verifyPlainObject__ = __webpack_require__(174);\n\n\nfunction wrapMapToPropsConstant(getConstant) {\n return function initConstantSelector(dispatch, options) {\n var constant = getConstant(dispatch, options);\n\n function constantSelector() {\n return constant;\n }\n constantSelector.dependsOnOwnProps = false;\n return constantSelector;\n };\n}\n\n// dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n// \n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\nfunction getDependsOnOwnProps(mapToProps) {\n return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n}\n\n// Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n// \n// * Detects whether the mapToProps function being called depends on props, which\n// is used by selectorFactory to decide if it should reinvoke on props changes.\n// \n// * On first call, handles mapToProps if returns another function, and treats that\n// new function as the true mapToProps for subsequent calls.\n// \n// * On first call, verifies the first result is a plain object, in order to warn\n// the developer that their mapToProps function is not returning a valid result.\n// \nfunction wrapMapToPropsFunc(mapToProps, methodName) {\n return function initProxySelector(dispatch, _ref) {\n var displayName = _ref.displayName;\n\n var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);\n };\n\n // allow detectFactoryAndVerify to get ownProps\n proxy.dependsOnOwnProps = true;\n\n proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n proxy.mapToProps = mapToProps;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n var props = proxy(stateOrDispatch, ownProps);\n\n if (typeof props === 'function') {\n proxy.mapToProps = props;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n props = proxy(stateOrDispatch, ownProps);\n }\n\n if (false) verifyPlainObject(props, displayName, methodName);\n\n return props;\n };\n\n return proxy;\n };\n}\n\n/***/ }),\n/* 174 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export default */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__ = __webpack_require__(117);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__warning__ = __webpack_require__(115);\n\n\n\nfunction verifyPlainObject(value, displayName, methodName) {\n if (!Object(__WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__[\"a\" /* default */])(value)) {\n Object(__WEBPACK_IMPORTED_MODULE_1__warning__[\"a\" /* default */])(methodName + '() in ' + displayName + ' must return a plain object. Instead received ' + value + '.');\n }\n}\n\n/***/ }),\n/* 175 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\nfunction isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to) {\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n var toParts = to && to.split('/') || [];\n var fromParts = from && from.split('/') || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash = void 0;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) {\n fromParts.unshift('..');\n }if (mustEndAbs && fromParts[0] !== '' && (!fromParts[0] || !isAbsolute(fromParts[0]))) fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (resolvePathname);\n\n/***/ }),\n/* 176 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction valueEqual(a, b) {\n if (a === b) return true;\n\n if (a == null || b == null) return false;\n\n if (Array.isArray(a)) {\n return Array.isArray(b) && a.length === b.length && a.every(function (item, index) {\n return valueEqual(item, b[index]);\n });\n }\n\n var aType = typeof a === 'undefined' ? 'undefined' : _typeof(a);\n var bType = typeof b === 'undefined' ? 'undefined' : _typeof(b);\n\n if (aType !== bType) return false;\n\n if (aType === 'object') {\n var aValue = a.valueOf();\n var bValue = b.valueOf();\n\n if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n\n var aKeys = Object.keys(a);\n var bKeys = Object.keys(b);\n\n if (aKeys.length !== bKeys.length) return false;\n\n return aKeys.every(function (key) {\n return valueEqual(a[key], b[key]);\n });\n }\n\n return false;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (valueEqual);\n\n/***/ }),\n/* 177 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nvar canUseDOM = exports.canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nvar addEventListener = exports.addEventListener = function addEventListener(node, event, listener) {\n return node.addEventListener ? node.addEventListener(event, listener, false) : node.attachEvent('on' + event, listener);\n};\n\nvar removeEventListener = exports.removeEventListener = function removeEventListener(node, event, listener) {\n return node.removeEventListener ? node.removeEventListener(event, listener, false) : node.detachEvent('on' + event, listener);\n};\n\nvar getConfirmation = exports.getConfirmation = function getConfirmation(message, callback) {\n return callback(window.confirm(message));\n}; // eslint-disable-line no-alert\n\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\nvar supportsHistory = exports.supportsHistory = function supportsHistory() {\n var ua = window.navigator.userAgent;\n\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n\n return window.history && 'pushState' in window.history;\n};\n\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\nvar supportsPopStateOnHashChange = exports.supportsPopStateOnHashChange = function supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n};\n\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\nvar supportsGoWithoutReloadUsingHash = exports.supportsGoWithoutReloadUsingHash = function supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n};\n\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\nvar isExtraneousPopstateEvent = exports.isExtraneousPopstateEvent = function isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n};\n\n/***/ }),\n/* 178 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_invariant__ = __webpack_require__(22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_invariant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_invariant__);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\nvar isModifiedEvent = function isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n};\n\n/**\n * The public API for rendering a history-aware .\n */\n\nvar Link = function (_React$Component) {\n _inherits(Link, _React$Component);\n\n function Link() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Link);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.handleClick = function (event) {\n if (_this.props.onClick) _this.props.onClick(event);\n\n if (!event.defaultPrevented && // onClick prevented default\n event.button === 0 && // ignore right clicks\n !_this.props.target && // let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // ignore clicks with modifier keys\n ) {\n event.preventDefault();\n\n var history = _this.context.router.history;\n var _this$props = _this.props,\n replace = _this$props.replace,\n to = _this$props.to;\n\n\n if (replace) {\n history.replace(to);\n } else {\n history.push(to);\n }\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Link.prototype.render = function render() {\n var _props = this.props,\n replace = _props.replace,\n to = _props.to,\n innerRef = _props.innerRef,\n props = _objectWithoutProperties(_props, ['replace', 'to', 'innerRef']); // eslint-disable-line no-unused-vars\n\n __WEBPACK_IMPORTED_MODULE_2_invariant___default()(this.context.router, 'You should not use outside a ');\n\n var href = this.context.router.history.createHref(typeof to === 'string' ? { pathname: to } : to);\n\n return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement('a', _extends({}, props, { onClick: this.handleClick, href: href, ref: innerRef }));\n };\n\n return Link;\n}(__WEBPACK_IMPORTED_MODULE_0_react___default.a.Component);\n\nLink.propTypes = {\n onClick: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func,\n target: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string,\n replace: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool,\n to: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([__WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object]).isRequired,\n innerRef: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([__WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func])\n};\nLink.defaultProps = {\n replace: false\n};\nLink.contextTypes = {\n router: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.shape({\n history: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.shape({\n push: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func.isRequired,\n replace: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func.isRequired,\n createHref: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func.isRequired\n }).isRequired\n }).isRequired\n};\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Link);\n\n/***/ }),\n/* 179 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_router_es_Route__ = __webpack_require__(180);\n// Written in this round about way for babel-transform-imports\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0_react_router_es_Route__[\"a\" /* default */]);\n\n/***/ }),\n/* 180 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_warning__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant__ = __webpack_require__(22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_invariant__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_prop_types__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_prop_types__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__matchPath__ = __webpack_require__(122);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n\nvar isEmptyChildren = function isEmptyChildren(children) {\n return __WEBPACK_IMPORTED_MODULE_2_react___default.a.Children.count(children) === 0;\n};\n\n/**\n * The public API for matching a single path and rendering.\n */\n\nvar Route = function (_React$Component) {\n _inherits(Route, _React$Component);\n\n function Route() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Route);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n match: _this.computeMatch(_this.props, _this.context.router)\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Route.prototype.getChildContext = function getChildContext() {\n return {\n router: _extends({}, this.context.router, {\n route: {\n location: this.props.location || this.context.router.route.location,\n match: this.state.match\n }\n })\n };\n };\n\n Route.prototype.computeMatch = function computeMatch(_ref, router) {\n var computedMatch = _ref.computedMatch,\n location = _ref.location,\n path = _ref.path,\n strict = _ref.strict,\n exact = _ref.exact,\n sensitive = _ref.sensitive;\n\n if (computedMatch) return computedMatch; // already computed the match for us\n\n __WEBPACK_IMPORTED_MODULE_1_invariant___default()(router, 'You should not use or withRouter() outside a ');\n\n var route = router.route;\n\n var pathname = (location || route.location).pathname;\n\n return path ? Object(__WEBPACK_IMPORTED_MODULE_4__matchPath__[\"a\" /* default */])(pathname, { path: path, strict: strict, exact: exact, sensitive: sensitive }) : route.match;\n };\n\n Route.prototype.componentWillMount = function componentWillMount() {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(!(this.props.component && this.props.render), 'You should not use and in the same route; will be ignored');\n\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(!(this.props.component && this.props.children && !isEmptyChildren(this.props.children)), 'You should not use and in the same route; will be ignored');\n\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(!(this.props.render && this.props.children && !isEmptyChildren(this.props.children)), 'You should not use and in the same route; will be ignored');\n };\n\n Route.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps, nextContext) {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(!(nextProps.location && !this.props.location), ' elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.');\n\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(!(!nextProps.location && this.props.location), ' elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.');\n\n this.setState({\n match: this.computeMatch(nextProps, nextContext.router)\n });\n };\n\n Route.prototype.render = function render() {\n var match = this.state.match;\n var _props = this.props,\n children = _props.children,\n component = _props.component,\n render = _props.render;\n var _context$router = this.context.router,\n history = _context$router.history,\n route = _context$router.route,\n staticContext = _context$router.staticContext;\n\n var location = this.props.location || route.location;\n var props = { match: match, location: location, history: history, staticContext: staticContext };\n\n return component ? // component prop gets first priority, only called if there's a match\n match ? __WEBPACK_IMPORTED_MODULE_2_react___default.a.createElement(component, props) : null : render ? // render prop is next, only called if there's a match\n match ? render(props) : null : children ? // children come last, always called\n typeof children === 'function' ? children(props) : !isEmptyChildren(children) ? __WEBPACK_IMPORTED_MODULE_2_react___default.a.Children.only(children) : null : null;\n };\n\n return Route;\n}(__WEBPACK_IMPORTED_MODULE_2_react___default.a.Component);\n\nRoute.propTypes = {\n computedMatch: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.object, // private, from \n path: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.string,\n exact: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.bool,\n strict: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.bool,\n sensitive: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.bool,\n component: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.func,\n render: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.func,\n children: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.oneOfType([__WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.func, __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.node]),\n location: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.object\n};\nRoute.contextTypes = {\n router: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.shape({\n history: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.object.isRequired,\n route: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.object.isRequired,\n staticContext: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.object\n })\n};\nRoute.childContextTypes = {\n router: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.object.isRequired\n};\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Route);\n\n/***/ }),\n/* 181 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return canUseDOM; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return addEventListener; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return removeEventListener; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return getConfirmation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return supportsHistory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return supportsPopStateOnHashChange; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return supportsGoWithoutReloadUsingHash; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return isExtraneousPopstateEvent; });\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nvar addEventListener = function addEventListener(node, event, listener) {\n return node.addEventListener ? node.addEventListener(event, listener, false) : node.attachEvent('on' + event, listener);\n};\n\nvar removeEventListener = function removeEventListener(node, event, listener) {\n return node.removeEventListener ? node.removeEventListener(event, listener, false) : node.detachEvent('on' + event, listener);\n};\n\nvar getConfirmation = function getConfirmation(message, callback) {\n return callback(window.confirm(message));\n}; // eslint-disable-line no-alert\n\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\nvar supportsHistory = function supportsHistory() {\n var ua = window.navigator.userAgent;\n\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n\n return window.history && 'pushState' in window.history;\n};\n\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\nvar supportsPopStateOnHashChange = function supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n};\n\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\nvar supportsGoWithoutReloadUsingHash = function supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n};\n\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\nvar isExtraneousPopstateEvent = function isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n};\n\n/***/ }),\n/* 182 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LOGIN = exports.LOGIN = 'Existing';\nvar CREATE = exports.CREATE = 'New';\n\n/***/ }),\n/* 183 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CHANNEL_UPDATE = exports.CHANNEL_UPDATE = 'CHANNEL_UPDATE';\n\n/***/ }),\n/* 184 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__internal_middleware__ = __webpack_require__(471);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__internal_runSaga__ = __webpack_require__(186);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"runSaga\", function() { return __WEBPACK_IMPORTED_MODULE_1__internal_runSaga__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__internal_channel__ = __webpack_require__(60);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"END\", function() { return __WEBPACK_IMPORTED_MODULE_2__internal_channel__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"eventChannel\", function() { return __WEBPACK_IMPORTED_MODULE_2__internal_channel__[\"d\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"channel\", function() { return __WEBPACK_IMPORTED_MODULE_2__internal_channel__[\"b\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__internal_buffers__ = __webpack_require__(85);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"buffers\", function() { return __WEBPACK_IMPORTED_MODULE_3__internal_buffers__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__internal_sagaHelpers__ = __webpack_require__(188);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"takeEvery\", function() { return __WEBPACK_IMPORTED_MODULE_4__internal_sagaHelpers__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"takeLatest\", function() { return __WEBPACK_IMPORTED_MODULE_4__internal_sagaHelpers__[\"c\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"throttle\", function() { return __WEBPACK_IMPORTED_MODULE_4__internal_sagaHelpers__[\"e\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__internal_utils__ = __webpack_require__(23);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"delay\", function() { return __WEBPACK_IMPORTED_MODULE_5__internal_utils__[\"m\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"CANCEL\", function() { return __WEBPACK_IMPORTED_MODULE_5__internal_utils__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__internal_io__ = __webpack_require__(50);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"detach\", function() { return __WEBPACK_IMPORTED_MODULE_6__internal_io__[\"i\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__effects__ = __webpack_require__(51);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__utils__ = __webpack_require__(475);\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"effects\", function() { return __WEBPACK_IMPORTED_MODULE_7__effects__; });\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"utils\", function() { return __WEBPACK_IMPORTED_MODULE_8__utils__; });\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__WEBPACK_IMPORTED_MODULE_0__internal_middleware__[\"a\" /* default */]);\n\n\n\n\n\n\n\n\n\n\n\n\n\n/***/ }),\n/* 185 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = asap;\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = suspend;\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = flush;\nvar queue = [];\n/**\n Variable to hold a counting semaphore\n - Incrementing adds a lock and puts the scheduler in a `suspended` state (if it's not\n already suspended)\n - Decrementing releases a lock. Zero locks puts the scheduler in a `released` state. This\n triggers flushing the queued tasks.\n**/\nvar semaphore = 0;\n\n/**\n Executes a task 'atomically'. Tasks scheduled during this execution will be queued\n and flushed after this task has finished (assuming the scheduler endup in a released\n state).\n**/\nfunction exec(task) {\n try {\n suspend();\n task();\n } finally {\n release();\n }\n}\n\n/**\n Executes or queues a task depending on the state of the scheduler (`suspended` or `released`)\n**/\nfunction asap(task) {\n queue.push(task);\n\n if (!semaphore) {\n suspend();\n flush();\n }\n}\n\n/**\n Puts the scheduler in a `suspended` state. Scheduled tasks will be queued until the\n scheduler is released.\n**/\nfunction suspend() {\n semaphore++;\n}\n\n/**\n Puts the scheduler in a `released` state.\n**/\nfunction release() {\n semaphore--;\n}\n\n/**\n Releases the current lock. Executes all queued tasks if the scheduler is in the released state.\n**/\nfunction flush() {\n release();\n\n var task = void 0;\n while (!semaphore && (task = queue.shift()) !== undefined) {\n exec(task);\n }\n}\n\n/***/ }),\n/* 186 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = runSaga;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__proc__ = __webpack_require__(187);\n\n\n\nvar RUN_SAGA_SIGNATURE = 'runSaga(storeInterface, saga, ...args)';\nvar NON_GENERATOR_ERR = RUN_SAGA_SIGNATURE + ': saga argument must be a Generator function!';\n\nfunction runSaga(storeInterface, saga) {\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var iterator = void 0;\n\n if (__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].iterator(storeInterface)) {\n if (false) {\n log('warn', 'runSaga(iterator, storeInterface) has been deprecated in favor of ' + RUN_SAGA_SIGNATURE);\n }\n iterator = storeInterface;\n storeInterface = saga;\n } else {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(saga, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func, NON_GENERATOR_ERR);\n iterator = saga.apply(undefined, args);\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(iterator, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].iterator, NON_GENERATOR_ERR);\n }\n\n var _storeInterface = storeInterface,\n subscribe = _storeInterface.subscribe,\n dispatch = _storeInterface.dispatch,\n getState = _storeInterface.getState,\n context = _storeInterface.context,\n sagaMonitor = _storeInterface.sagaMonitor,\n logger = _storeInterface.logger,\n onError = _storeInterface.onError;\n\n\n var effectId = Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"y\" /* uid */])();\n\n if (sagaMonitor) {\n // monitors are expected to have a certain interface, let's fill-in any missing ones\n sagaMonitor.effectTriggered = sagaMonitor.effectTriggered || __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */];\n sagaMonitor.effectResolved = sagaMonitor.effectResolved || __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */];\n sagaMonitor.effectRejected = sagaMonitor.effectRejected || __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */];\n sagaMonitor.effectCancelled = sagaMonitor.effectCancelled || __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */];\n sagaMonitor.actionDispatched = sagaMonitor.actionDispatched || __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */];\n\n sagaMonitor.effectTriggered({ effectId: effectId, root: true, parentEffectId: 0, effect: { root: true, saga: saga, args: args } });\n }\n\n var task = Object(__WEBPACK_IMPORTED_MODULE_1__proc__[\"b\" /* default */])(iterator, subscribe, Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"A\" /* wrapSagaDispatch */])(dispatch), getState, context, { sagaMonitor: sagaMonitor, logger: logger, onError: onError }, effectId, saga.name);\n\n if (sagaMonitor) {\n sagaMonitor.effectResolved(effectId, task);\n }\n\n return task;\n}\n\n/***/ }),\n/* 187 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export NOT_ITERATOR_ERROR */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return CHANNEL_END; });\n/* unused harmony export TASK_CANCEL */\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = proc;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__scheduler__ = __webpack_require__(185);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__io__ = __webpack_require__(50);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__channel__ = __webpack_require__(60);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__buffers__ = __webpack_require__(85);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _defineEnumerableProperties(obj, descs) { for (var key in descs) { var desc = descs[key]; desc.configurable = desc.enumerable = true; if (\"value\" in desc) desc.writable = true; Object.defineProperty(obj, key, desc); } return obj; }\n\n\n\n\n\n\n\nvar NOT_ITERATOR_ERROR = 'proc first argument (Saga function result) must be an iterator';\n\nvar CHANNEL_END = {\n toString: function toString() {\n return '@@redux-saga/CHANNEL_END';\n }\n};\nvar TASK_CANCEL = {\n toString: function toString() {\n return '@@redux-saga/TASK_CANCEL';\n }\n};\n\nvar matchers = {\n wildcard: function wildcard() {\n return __WEBPACK_IMPORTED_MODULE_0__utils__[\"r\" /* kTrue */];\n },\n default: function _default(pattern) {\n return (typeof pattern === 'undefined' ? 'undefined' : _typeof(pattern)) === 'symbol' ? function (input) {\n return input.type === pattern;\n } : function (input) {\n return input.type === String(pattern);\n };\n },\n array: function array(patterns) {\n return function (input) {\n return patterns.some(function (p) {\n return matcher(p)(input);\n });\n };\n },\n predicate: function predicate(_predicate) {\n return function (input) {\n return _predicate(input);\n };\n }\n};\n\nfunction matcher(pattern) {\n // prettier-ignore\n return (pattern === '*' ? matchers.wildcard : __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].array(pattern) ? matchers.array : __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].stringableFunc(pattern) ? matchers.default : __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func(pattern) ? matchers.predicate : matchers.default)(pattern);\n}\n\n/**\n Used to track a parent task and its forks\n In the new fork model, forked tasks are attached by default to their parent\n We model this using the concept of Parent task && main Task\n main task is the main flow of the current Generator, the parent tasks is the\n aggregation of the main tasks + all its forked tasks.\n Thus the whole model represents an execution tree with multiple branches (vs the\n linear execution tree in sequential (non parallel) programming)\n\n A parent tasks has the following semantics\n - It completes if all its forks either complete or all cancelled\n - If it's cancelled, all forks are cancelled as well\n - It aborts if any uncaught error bubbles up from forks\n - If it completes, the return value is the one returned by the main task\n**/\nfunction forkQueue(name, mainTask, cb) {\n var tasks = [],\n result = void 0,\n completed = false;\n addTask(mainTask);\n\n function abort(err) {\n cancelAll();\n cb(err, true);\n }\n\n function addTask(task) {\n tasks.push(task);\n task.cont = function (res, isErr) {\n if (completed) {\n return;\n }\n\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"w\" /* remove */])(tasks, task);\n task.cont = __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */];\n if (isErr) {\n abort(res);\n } else {\n if (task === mainTask) {\n result = res;\n }\n if (!tasks.length) {\n completed = true;\n cb(result);\n }\n }\n };\n // task.cont.cancel = task.cancel\n }\n\n function cancelAll() {\n if (completed) {\n return;\n }\n completed = true;\n tasks.forEach(function (t) {\n t.cont = __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */];\n t.cancel();\n });\n tasks = [];\n }\n\n return {\n addTask: addTask,\n cancelAll: cancelAll,\n abort: abort,\n getTasks: function getTasks() {\n return tasks;\n },\n taskNames: function taskNames() {\n return tasks.map(function (t) {\n return t.name;\n });\n }\n };\n}\n\nfunction createTaskIterator(_ref) {\n var context = _ref.context,\n fn = _ref.fn,\n args = _ref.args;\n\n if (__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].iterator(fn)) {\n return fn;\n }\n\n // catch synchronous failures; see #152 and #441\n var result = void 0,\n error = void 0;\n try {\n result = fn.apply(context, args);\n } catch (err) {\n error = err;\n }\n\n // i.e. a generator function returns an iterator\n if (__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].iterator(result)) {\n return result;\n }\n\n // do not bubble up synchronous failures for detached forks\n // instead create a failed task. See #152 and #441\n return error ? Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"t\" /* makeIterator */])(function () {\n throw error;\n }) : Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"t\" /* makeIterator */])(function () {\n var pc = void 0;\n var eff = { done: false, value: result };\n var ret = function ret(value) {\n return { done: true, value: value };\n };\n return function (arg) {\n if (!pc) {\n pc = true;\n return eff;\n } else {\n return ret(arg);\n }\n };\n }());\n}\n\nvar wrapHelper = function wrapHelper(helper) {\n return { fn: helper };\n};\n\nfunction proc(iterator) {\n var subscribe = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {\n return __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */];\n };\n var dispatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */];\n var getState = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */];\n var parentContext = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n var parentEffectId = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n var name = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 'anonymous';\n var cont = arguments[8];\n\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(iterator, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].iterator, NOT_ITERATOR_ERROR);\n\n var effectsString = '[...effects]';\n var runParallelEffect = Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"n\" /* deprecate */])(runAllEffect, Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"z\" /* updateIncentive */])(effectsString, 'all(' + effectsString + ')'));\n\n var sagaMonitor = options.sagaMonitor,\n logger = options.logger,\n onError = options.onError;\n\n var log = logger || __WEBPACK_IMPORTED_MODULE_0__utils__[\"s\" /* log */];\n var logError = function logError(err) {\n var message = err.sagaStack;\n\n if (!message && err.stack) {\n message = err.stack.split('\\n')[0].indexOf(err.message) !== -1 ? err.stack : 'Error: ' + err.message + '\\n' + err.stack;\n }\n\n log('error', 'uncaught at ' + name, message || err.message || err);\n };\n var stdChannel = Object(__WEBPACK_IMPORTED_MODULE_3__channel__[\"f\" /* stdChannel */])(subscribe);\n var taskContext = Object.create(parentContext);\n /**\n Tracks the current effect cancellation\n Each time the generator progresses. calling runEffect will set a new value\n on it. It allows propagating cancellation to child effects\n **/\n next.cancel = __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */];\n\n /**\n Creates a new task descriptor for this generator, We'll also create a main task\n to track the main flow (besides other forked tasks)\n **/\n var task = newTask(parentEffectId, name, iterator, cont);\n var mainTask = { name: name, cancel: cancelMain, isRunning: true };\n var taskQueue = forkQueue(name, mainTask, end);\n\n /**\n cancellation of the main task. We'll simply resume the Generator with a Cancel\n **/\n function cancelMain() {\n if (mainTask.isRunning && !mainTask.isCancelled) {\n mainTask.isCancelled = true;\n next(TASK_CANCEL);\n }\n }\n\n /**\n This may be called by a parent generator to trigger/propagate cancellation\n cancel all pending tasks (including the main task), then end the current task.\n Cancellation propagates down to the whole execution tree holded by this Parent task\n It's also propagated to all joiners of this task and their execution tree/joiners\n Cancellation is noop for terminated/Cancelled tasks tasks\n **/\n function cancel() {\n /**\n We need to check both Running and Cancelled status\n Tasks can be Cancelled but still Running\n **/\n if (iterator._isRunning && !iterator._isCancelled) {\n iterator._isCancelled = true;\n taskQueue.cancelAll();\n /**\n Ending with a Never result will propagate the Cancellation to all joiners\n **/\n end(TASK_CANCEL);\n }\n }\n /**\n attaches cancellation logic to this task's continuation\n this will permit cancellation to propagate down the call chain\n **/\n cont && (cont.cancel = cancel);\n\n // tracks the running status\n iterator._isRunning = true;\n\n // kicks up the generator\n next();\n\n // then return the task descriptor to the caller\n return task;\n\n /**\n This is the generator driver\n It's a recursive async/continuation function which calls itself\n until the generator terminates or throws\n **/\n function next(arg, isErr) {\n // Preventive measure. If we end up here, then there is really something wrong\n if (!mainTask.isRunning) {\n throw new Error('Trying to resume an already finished generator');\n }\n\n try {\n var result = void 0;\n if (isErr) {\n result = iterator.throw(arg);\n } else if (arg === TASK_CANCEL) {\n /**\n getting TASK_CANCEL automatically cancels the main task\n We can get this value here\n - By cancelling the parent task manually\n - By joining a Cancelled task\n **/\n mainTask.isCancelled = true;\n /**\n Cancels the current effect; this will propagate the cancellation down to any called tasks\n **/\n next.cancel();\n /**\n If this Generator has a `return` method then invokes it\n This will jump to the finally block\n **/\n result = __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func(iterator.return) ? iterator.return(TASK_CANCEL) : { done: true, value: TASK_CANCEL };\n } else if (arg === CHANNEL_END) {\n // We get CHANNEL_END by taking from a channel that ended using `take` (and not `takem` used to trap End of channels)\n result = __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func(iterator.return) ? iterator.return() : { done: true };\n } else {\n result = iterator.next(arg);\n }\n\n if (!result.done) {\n runEffect(result.value, parentEffectId, '', next);\n } else {\n /**\n This Generator has ended, terminate the main task and notify the fork queue\n **/\n mainTask.isMainRunning = false;\n mainTask.cont && mainTask.cont(result.value);\n }\n } catch (error) {\n if (mainTask.isCancelled) {\n logError(error);\n }\n mainTask.isMainRunning = false;\n mainTask.cont(error, true);\n }\n }\n\n function end(result, isErr) {\n iterator._isRunning = false;\n stdChannel.close();\n if (!isErr) {\n iterator._result = result;\n iterator._deferredEnd && iterator._deferredEnd.resolve(result);\n } else {\n if (result instanceof Error) {\n Object.defineProperty(result, 'sagaStack', {\n value: 'at ' + name + ' \\n ' + (result.sagaStack || result.stack),\n configurable: true\n });\n }\n if (!task.cont) {\n if (result instanceof Error && onError) {\n onError(result);\n } else {\n logError(result);\n }\n }\n iterator._error = result;\n iterator._isAborted = true;\n iterator._deferredEnd && iterator._deferredEnd.reject(result);\n }\n task.cont && task.cont(result, isErr);\n task.joiners.forEach(function (j) {\n return j.cb(result, isErr);\n });\n task.joiners = null;\n }\n\n function runEffect(effect, parentEffectId) {\n var label = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var cb = arguments[3];\n\n var effectId = Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"y\" /* uid */])();\n sagaMonitor && sagaMonitor.effectTriggered({ effectId: effectId, parentEffectId: parentEffectId, label: label, effect: effect });\n\n /**\n completion callback and cancel callback are mutually exclusive\n We can't cancel an already completed effect\n And We can't complete an already cancelled effectId\n **/\n var effectSettled = void 0;\n\n // Completion callback passed to the appropriate effect runner\n function currCb(res, isErr) {\n if (effectSettled) {\n return;\n }\n\n effectSettled = true;\n cb.cancel = __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */]; // defensive measure\n if (sagaMonitor) {\n isErr ? sagaMonitor.effectRejected(effectId, res) : sagaMonitor.effectResolved(effectId, res);\n }\n cb(res, isErr);\n }\n // tracks down the current cancel\n currCb.cancel = __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */];\n\n // setup cancellation logic on the parent cb\n cb.cancel = function () {\n // prevents cancelling an already completed effect\n if (effectSettled) {\n return;\n }\n\n effectSettled = true;\n /**\n propagates cancel downward\n catch uncaught cancellations errors; since we can no longer call the completion\n callback, log errors raised during cancellations into the console\n **/\n try {\n currCb.cancel();\n } catch (err) {\n logError(err);\n }\n currCb.cancel = __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */]; // defensive measure\n\n sagaMonitor && sagaMonitor.effectCancelled(effectId);\n };\n\n /**\n each effect runner must attach its own logic of cancellation to the provided callback\n it allows this generator to propagate cancellation downward.\n ATTENTION! effect runners must setup the cancel logic by setting cb.cancel = [cancelMethod]\n And the setup must occur before calling the callback\n This is a sort of inversion of control: called async functions are responsible\n for completing the flow by calling the provided continuation; while caller functions\n are responsible for aborting the current flow by calling the attached cancel function\n Library users can attach their own cancellation logic to promises by defining a\n promise[CANCEL] method in their returned promises\n ATTENTION! calling cancel must have no effect on an already completed or cancelled effect\n **/\n var data = void 0;\n // prettier-ignore\n return (\n // Non declarative effect\n __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].promise(effect) ? resolvePromise(effect, currCb) : __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].helper(effect) ? runForkEffect(wrapHelper(effect), effectId, currCb) : __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].iterator(effect) ? resolveIterator(effect, effectId, name, currCb)\n\n // declarative effects\n : __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].array(effect) ? runParallelEffect(effect, effectId, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__[\"d\" /* asEffect */].take(effect)) ? runTakeEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__[\"d\" /* asEffect */].put(effect)) ? runPutEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__[\"d\" /* asEffect */].all(effect)) ? runAllEffect(data, effectId, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__[\"d\" /* asEffect */].race(effect)) ? runRaceEffect(data, effectId, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__[\"d\" /* asEffect */].call(effect)) ? runCallEffect(data, effectId, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__[\"d\" /* asEffect */].cps(effect)) ? runCPSEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__[\"d\" /* asEffect */].fork(effect)) ? runForkEffect(data, effectId, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__[\"d\" /* asEffect */].join(effect)) ? runJoinEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__[\"d\" /* asEffect */].cancel(effect)) ? runCancelEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__[\"d\" /* asEffect */].select(effect)) ? runSelectEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__[\"d\" /* asEffect */].actionChannel(effect)) ? runChannelEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__[\"d\" /* asEffect */].flush(effect)) ? runFlushEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__[\"d\" /* asEffect */].cancelled(effect)) ? runCancelledEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__[\"d\" /* asEffect */].getContext(effect)) ? runGetContextEffect(data, currCb) : (data = __WEBPACK_IMPORTED_MODULE_2__io__[\"d\" /* asEffect */].setContext(effect)) ? runSetContextEffect(data, currCb) : /* anything else returned as is */currCb(effect)\n );\n }\n\n function resolvePromise(promise, cb) {\n var cancelPromise = promise[__WEBPACK_IMPORTED_MODULE_0__utils__[\"a\" /* CANCEL */]];\n if (__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func(cancelPromise)) {\n cb.cancel = cancelPromise;\n } else if (__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func(promise.abort)) {\n cb.cancel = function () {\n return promise.abort();\n };\n // TODO: add support for the fetch API, whenever they get around to\n // adding cancel support\n }\n promise.then(cb, function (error) {\n return cb(error, true);\n });\n }\n\n function resolveIterator(iterator, effectId, name, cb) {\n proc(iterator, subscribe, dispatch, getState, taskContext, options, effectId, name, cb);\n }\n\n function runTakeEffect(_ref2, cb) {\n var channel = _ref2.channel,\n pattern = _ref2.pattern,\n maybe = _ref2.maybe;\n\n channel = channel || stdChannel;\n var takeCb = function takeCb(inp) {\n return inp instanceof Error ? cb(inp, true) : Object(__WEBPACK_IMPORTED_MODULE_3__channel__[\"e\" /* isEnd */])(inp) && !maybe ? cb(CHANNEL_END) : cb(inp);\n };\n try {\n channel.take(takeCb, matcher(pattern));\n } catch (err) {\n return cb(err, true);\n }\n cb.cancel = takeCb.cancel;\n }\n\n function runPutEffect(_ref3, cb) {\n var channel = _ref3.channel,\n action = _ref3.action,\n resolve = _ref3.resolve;\n\n /**\n Schedule the put in case another saga is holding a lock.\n The put will be executed atomically. ie nested puts will execute after\n this put has terminated.\n **/\n Object(__WEBPACK_IMPORTED_MODULE_1__scheduler__[\"a\" /* asap */])(function () {\n var result = void 0;\n try {\n result = (channel ? channel.put : dispatch)(action);\n } catch (error) {\n // If we have a channel or `put.resolve` was used then bubble up the error.\n if (channel || resolve) return cb(error, true);\n logError(error);\n }\n\n if (resolve && __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].promise(result)) {\n resolvePromise(result, cb);\n } else {\n return cb(result);\n }\n });\n // Put effects are non cancellables\n }\n\n function runCallEffect(_ref4, effectId, cb) {\n var context = _ref4.context,\n fn = _ref4.fn,\n args = _ref4.args;\n\n var result = void 0;\n // catch synchronous failures; see #152\n try {\n result = fn.apply(context, args);\n } catch (error) {\n return cb(error, true);\n }\n return __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].promise(result) ? resolvePromise(result, cb) : __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].iterator(result) ? resolveIterator(result, effectId, fn.name, cb) : cb(result);\n }\n\n function runCPSEffect(_ref5, cb) {\n var context = _ref5.context,\n fn = _ref5.fn,\n args = _ref5.args;\n\n // CPS (ie node style functions) can define their own cancellation logic\n // by setting cancel field on the cb\n\n // catch synchronous failures; see #152\n try {\n var cpsCb = function cpsCb(err, res) {\n return __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].undef(err) ? cb(res) : cb(err, true);\n };\n fn.apply(context, args.concat(cpsCb));\n if (cpsCb.cancel) {\n cb.cancel = function () {\n return cpsCb.cancel();\n };\n }\n } catch (error) {\n return cb(error, true);\n }\n }\n\n function runForkEffect(_ref6, effectId, cb) {\n var context = _ref6.context,\n fn = _ref6.fn,\n args = _ref6.args,\n detached = _ref6.detached;\n\n var taskIterator = createTaskIterator({ context: context, fn: fn, args: args });\n\n try {\n Object(__WEBPACK_IMPORTED_MODULE_1__scheduler__[\"c\" /* suspend */])();\n var _task = proc(taskIterator, subscribe, dispatch, getState, taskContext, options, effectId, fn.name, detached ? null : __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */]);\n\n if (detached) {\n cb(_task);\n } else {\n if (taskIterator._isRunning) {\n taskQueue.addTask(_task);\n cb(_task);\n } else if (taskIterator._error) {\n taskQueue.abort(taskIterator._error);\n } else {\n cb(_task);\n }\n }\n } finally {\n Object(__WEBPACK_IMPORTED_MODULE_1__scheduler__[\"b\" /* flush */])();\n }\n // Fork effects are non cancellables\n }\n\n function runJoinEffect(t, cb) {\n if (t.isRunning()) {\n var joiner = { task: task, cb: cb };\n cb.cancel = function () {\n return Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"w\" /* remove */])(t.joiners, joiner);\n };\n t.joiners.push(joiner);\n } else {\n t.isAborted() ? cb(t.error(), true) : cb(t.result());\n }\n }\n\n function runCancelEffect(taskToCancel, cb) {\n if (taskToCancel === __WEBPACK_IMPORTED_MODULE_0__utils__[\"d\" /* SELF_CANCELLATION */]) {\n taskToCancel = task;\n }\n if (taskToCancel.isRunning()) {\n taskToCancel.cancel();\n }\n cb();\n // cancel effects are non cancellables\n }\n\n function runAllEffect(effects, effectId, cb) {\n var keys = Object.keys(effects);\n\n if (!keys.length) {\n return cb(__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].array(effects) ? [] : {});\n }\n\n var completedCount = 0;\n var completed = void 0;\n var results = {};\n var childCbs = {};\n\n function checkEffectEnd() {\n if (completedCount === keys.length) {\n completed = true;\n cb(__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].array(effects) ? __WEBPACK_IMPORTED_MODULE_0__utils__[\"f\" /* array */].from(_extends({}, results, { length: keys.length })) : results);\n }\n }\n\n keys.forEach(function (key) {\n var chCbAtKey = function chCbAtKey(res, isErr) {\n if (completed) {\n return;\n }\n if (isErr || Object(__WEBPACK_IMPORTED_MODULE_3__channel__[\"e\" /* isEnd */])(res) || res === CHANNEL_END || res === TASK_CANCEL) {\n cb.cancel();\n cb(res, isErr);\n } else {\n results[key] = res;\n completedCount++;\n checkEffectEnd();\n }\n };\n chCbAtKey.cancel = __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */];\n childCbs[key] = chCbAtKey;\n });\n\n cb.cancel = function () {\n if (!completed) {\n completed = true;\n keys.forEach(function (key) {\n return childCbs[key].cancel();\n });\n }\n };\n\n keys.forEach(function (key) {\n return runEffect(effects[key], effectId, key, childCbs[key]);\n });\n }\n\n function runRaceEffect(effects, effectId, cb) {\n var completed = void 0;\n var keys = Object.keys(effects);\n var childCbs = {};\n\n keys.forEach(function (key) {\n var chCbAtKey = function chCbAtKey(res, isErr) {\n if (completed) {\n return;\n }\n\n if (isErr) {\n // Race Auto cancellation\n cb.cancel();\n cb(res, true);\n } else if (!Object(__WEBPACK_IMPORTED_MODULE_3__channel__[\"e\" /* isEnd */])(res) && res !== CHANNEL_END && res !== TASK_CANCEL) {\n var _response;\n\n cb.cancel();\n completed = true;\n var response = (_response = {}, _response[key] = res, _response);\n cb(__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].array(effects) ? [].slice.call(_extends({}, response, { length: keys.length })) : response);\n }\n };\n chCbAtKey.cancel = __WEBPACK_IMPORTED_MODULE_0__utils__[\"u\" /* noop */];\n childCbs[key] = chCbAtKey;\n });\n\n cb.cancel = function () {\n // prevents unnecessary cancellation\n if (!completed) {\n completed = true;\n keys.forEach(function (key) {\n return childCbs[key].cancel();\n });\n }\n };\n keys.forEach(function (key) {\n if (completed) {\n return;\n }\n runEffect(effects[key], effectId, key, childCbs[key]);\n });\n }\n\n function runSelectEffect(_ref7, cb) {\n var selector = _ref7.selector,\n args = _ref7.args;\n\n try {\n var state = selector.apply(undefined, [getState()].concat(args));\n cb(state);\n } catch (error) {\n cb(error, true);\n }\n }\n\n function runChannelEffect(_ref8, cb) {\n var pattern = _ref8.pattern,\n buffer = _ref8.buffer;\n\n var match = matcher(pattern);\n match.pattern = pattern;\n cb(Object(__WEBPACK_IMPORTED_MODULE_3__channel__[\"d\" /* eventChannel */])(subscribe, buffer || __WEBPACK_IMPORTED_MODULE_4__buffers__[\"a\" /* buffers */].fixed(), match));\n }\n\n function runCancelledEffect(data, cb) {\n cb(!!mainTask.isCancelled);\n }\n\n function runFlushEffect(channel, cb) {\n channel.flush(cb);\n }\n\n function runGetContextEffect(prop, cb) {\n cb(taskContext[prop]);\n }\n\n function runSetContextEffect(props, cb) {\n __WEBPACK_IMPORTED_MODULE_0__utils__[\"v\" /* object */].assign(taskContext, props);\n cb();\n }\n\n function newTask(id, name, iterator, cont) {\n var _done, _ref9, _mutatorMap;\n\n iterator._deferredEnd = null;\n return _ref9 = {}, _ref9[__WEBPACK_IMPORTED_MODULE_0__utils__[\"e\" /* TASK */]] = true, _ref9.id = id, _ref9.name = name, _done = 'done', _mutatorMap = {}, _mutatorMap[_done] = _mutatorMap[_done] || {}, _mutatorMap[_done].get = function () {\n if (iterator._deferredEnd) {\n return iterator._deferredEnd.promise;\n } else {\n var def = Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"l\" /* deferred */])();\n iterator._deferredEnd = def;\n if (!iterator._isRunning) {\n iterator._error ? def.reject(iterator._error) : def.resolve(iterator._result);\n }\n return def.promise;\n }\n }, _ref9.cont = cont, _ref9.joiners = [], _ref9.cancel = cancel, _ref9.isRunning = function isRunning() {\n return iterator._isRunning;\n }, _ref9.isCancelled = function isCancelled() {\n return iterator._isCancelled;\n }, _ref9.isAborted = function isAborted() {\n return iterator._isAborted;\n }, _ref9.result = function result() {\n return iterator._result;\n }, _ref9.error = function error() {\n return iterator._error;\n }, _ref9.setContext = function setContext(props) {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(props, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].object, Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"k\" /* createSetContextWarning */])('task', props));\n __WEBPACK_IMPORTED_MODULE_0__utils__[\"v\" /* object */].assign(taskContext, props);\n }, _defineEnumerableProperties(_ref9, _mutatorMap), _ref9;\n }\n}\n\n/***/ }),\n/* 188 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return takeEvery; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return takeLatest; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return throttle; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__takeEvery__ = __webpack_require__(472);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__takeLatest__ = __webpack_require__(473);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__throttle__ = __webpack_require__(474);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils__ = __webpack_require__(23);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return __WEBPACK_IMPORTED_MODULE_0__takeEvery__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return __WEBPACK_IMPORTED_MODULE_1__takeLatest__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return __WEBPACK_IMPORTED_MODULE_2__throttle__[\"a\"]; });\n\n\n\n\n\n\nvar deprecationWarning = function deprecationWarning(helperName) {\n return 'import { ' + helperName + ' } from \\'redux-saga\\' has been deprecated in favor of import { ' + helperName + ' } from \\'redux-saga/effects\\'.\\nThe latter will not work with yield*, as helper effects are wrapped automatically for you in fork effect.\\nTherefore yield ' + helperName + ' will return task descriptor to your saga and execute next lines of code.';\n};\n\nvar takeEvery = /*#__PURE__*/Object(__WEBPACK_IMPORTED_MODULE_3__utils__[\"n\" /* deprecate */])(__WEBPACK_IMPORTED_MODULE_0__takeEvery__[\"a\" /* default */], /*#__PURE__*/deprecationWarning('takeEvery'));\nvar takeLatest = /*#__PURE__*/Object(__WEBPACK_IMPORTED_MODULE_3__utils__[\"n\" /* deprecate */])(__WEBPACK_IMPORTED_MODULE_1__takeLatest__[\"a\" /* default */], /*#__PURE__*/deprecationWarning('takeLatest'));\nvar throttle = /*#__PURE__*/Object(__WEBPACK_IMPORTED_MODULE_3__utils__[\"n\" /* deprecate */])(__WEBPACK_IMPORTED_MODULE_2__throttle__[\"a\" /* default */], /*#__PURE__*/deprecationWarning('throttle'));\n\n\n\n/***/ }),\n/* 189 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CHANNEL = exports.CHANNEL = 'CHANNEL';\nvar ASSET_LITE = exports.ASSET_LITE = 'ASSET_LITE';\nvar ASSET_DETAILS = exports.ASSET_DETAILS = 'ASSET_DETAILS';\n\n/***/ }),\n/* 190 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.newAssetRequest = newAssetRequest;\nexports.watchNewAssetRequest = watchNewAssetRequest;\n\nvar _effects = __webpack_require__(51);\n\nvar _show_action_types = __webpack_require__(59);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(52);\n\nvar _assetApi = __webpack_require__(478);\n\nvar _show2 = __webpack_require__(68);\n\nvar _site = __webpack_require__(86);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(newAssetRequest),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewAssetRequest);\n\nfunction newAssetRequest(action) {\n var _action$data, requestType, requestId, name, modifier, state, host, longId, _ref, assetKey, shortId, _ref2, claimData, _ref3;\n\n return regeneratorRuntime.wrap(function newAssetRequest$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, name = _action$data.name, modifier = _action$data.modifier;\n // put an action to update the request in redux\n\n _context.next = 3;\n return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId));\n\n case 3:\n _context.next = 5;\n return (0, _effects.select)(_show2.selectShowState);\n\n case 5:\n state = _context.sent;\n _context.next = 8;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 8:\n host = _context.sent;\n\n if (!state.requestList[requestId]) {\n _context.next = 11;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 11:\n // get long id && add request to request list\n longId = void 0;\n _context.prev = 12;\n _context.next = 15;\n return (0, _effects.call)(_assetApi.getLongClaimId, host, name, modifier);\n\n case 15:\n _ref = _context.sent;\n longId = _ref.data;\n _context.next = 24;\n break;\n\n case 19:\n _context.prev = 19;\n _context.t0 = _context['catch'](12);\n _context.next = 23;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));\n\n case 23:\n return _context.abrupt('return', _context.sent);\n\n case 24:\n assetKey = 'a#' + name + '#' + longId;\n _context.next = 27;\n return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, assetKey));\n\n case 27:\n if (!state.assetList[assetKey]) {\n _context.next = 29;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 29:\n // get short Id\n shortId = void 0;\n _context.prev = 30;\n _context.next = 33;\n return (0, _effects.call)(_assetApi.getShortId, host, name, longId);\n\n case 33:\n _ref2 = _context.sent;\n shortId = _ref2.data;\n _context.next = 42;\n break;\n\n case 37:\n _context.prev = 37;\n _context.t1 = _context['catch'](30);\n _context.next = 41;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message));\n\n case 41:\n return _context.abrupt('return', _context.sent);\n\n case 42:\n // get asset claim data\n claimData = void 0;\n _context.prev = 43;\n _context.next = 46;\n return (0, _effects.call)(_assetApi.getClaimData, host, name, longId);\n\n case 46:\n _ref3 = _context.sent;\n claimData = _ref3.data;\n _context.next = 55;\n break;\n\n case 50:\n _context.prev = 50;\n _context.t2 = _context['catch'](43);\n _context.next = 54;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t2.message));\n\n case 54:\n return _context.abrupt('return', _context.sent);\n\n case 55:\n _context.next = 57;\n return (0, _effects.put)((0, _show.addAssetToAssetList)(assetKey, null, name, longId, shortId, claimData));\n\n case 57:\n _context.next = 59;\n return (0, _effects.put)((0, _show.onRequestError)(null));\n\n case 59:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[12, 19], [30, 37], [43, 50]]);\n};\n\nfunction watchNewAssetRequest() {\n return regeneratorRuntime.wrap(function watchNewAssetRequest$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return (0, _effects.takeLatest)(actions.ASSET_REQUEST_NEW, newAssetRequest);\n\n case 2:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this);\n};\n\n/***/ }),\n/* 191 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.newChannelRequest = newChannelRequest;\nexports.watchNewChannelRequest = watchNewChannelRequest;\nexports.watchUpdateChannelClaims = watchUpdateChannelClaims;\n\nvar _effects = __webpack_require__(51);\n\nvar _show_action_types = __webpack_require__(59);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(52);\n\nvar _channelApi = __webpack_require__(480);\n\nvar _show2 = __webpack_require__(68);\n\nvar _site = __webpack_require__(86);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(newChannelRequest),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewChannelRequest),\n _marked3 = /*#__PURE__*/regeneratorRuntime.mark(getNewClaimsAndUpdateChannel),\n _marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchUpdateChannelClaims);\n\nfunction newChannelRequest(action) {\n var _action$data, requestType, requestId, channelName, channelId, state, host, longId, shortId, _ref, _ref$data, channelKey, claimsData, _ref2;\n\n return regeneratorRuntime.wrap(function newChannelRequest$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, channelName = _action$data.channelName, channelId = _action$data.channelId;\n // put an action to update the request in redux\n\n _context.next = 3;\n return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId));\n\n case 3:\n _context.next = 5;\n return (0, _effects.select)(_show2.selectShowState);\n\n case 5:\n state = _context.sent;\n _context.next = 8;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 8:\n host = _context.sent;\n\n if (!state.requestList[requestId]) {\n _context.next = 11;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 11:\n // get channel long id\n longId = void 0, shortId = void 0;\n _context.prev = 12;\n _context.next = 15;\n return (0, _effects.call)(_channelApi.getChannelData, host, channelName, channelId);\n\n case 15:\n _ref = _context.sent;\n _ref$data = _ref.data;\n longId = _ref$data.longChannelClaimId;\n shortId = _ref$data.shortChannelClaimId;\n _context.next = 26;\n break;\n\n case 21:\n _context.prev = 21;\n _context.t0 = _context['catch'](12);\n _context.next = 25;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));\n\n case 25:\n return _context.abrupt('return', _context.sent);\n\n case 26:\n // store the request in the channel requests list\n channelKey = 'c#' + channelName + '#' + longId;\n _context.next = 29;\n return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, channelKey));\n\n case 29:\n if (!state.channelList[channelKey]) {\n _context.next = 31;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 31:\n // get channel claims data\n claimsData = void 0;\n _context.prev = 32;\n _context.next = 35;\n return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, channelName, 1);\n\n case 35:\n _ref2 = _context.sent;\n claimsData = _ref2.data;\n _context.next = 44;\n break;\n\n case 39:\n _context.prev = 39;\n _context.t1 = _context['catch'](32);\n _context.next = 43;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message));\n\n case 43:\n return _context.abrupt('return', _context.sent);\n\n case 44:\n _context.next = 46;\n return (0, _effects.put)((0, _show.addNewChannelToChannelList)(channelKey, channelName, shortId, longId, claimsData));\n\n case 46:\n _context.next = 48;\n return (0, _effects.put)((0, _show.onRequestError)(null));\n\n case 48:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[12, 21], [32, 39]]);\n}\n\nfunction watchNewChannelRequest() {\n return regeneratorRuntime.wrap(function watchNewChannelRequest$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return (0, _effects.takeLatest)(actions.CHANNEL_REQUEST_NEW, newChannelRequest);\n\n case 2:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this);\n};\n\nfunction getNewClaimsAndUpdateChannel(action) {\n var _action$data2, channelKey, name, longId, page, host, claimsData, _ref3;\n\n return regeneratorRuntime.wrap(function getNewClaimsAndUpdateChannel$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _action$data2 = action.data, channelKey = _action$data2.channelKey, name = _action$data2.name, longId = _action$data2.longId, page = _action$data2.page;\n _context3.next = 3;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 3:\n host = _context3.sent;\n claimsData = void 0;\n _context3.prev = 5;\n _context3.next = 8;\n return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, name, page);\n\n case 8:\n _ref3 = _context3.sent;\n claimsData = _ref3.data;\n _context3.next = 17;\n break;\n\n case 12:\n _context3.prev = 12;\n _context3.t0 = _context3['catch'](5);\n _context3.next = 16;\n return (0, _effects.put)((0, _show.onRequestError)(_context3.t0.message));\n\n case 16:\n return _context3.abrupt('return', _context3.sent);\n\n case 17:\n _context3.next = 19;\n return (0, _effects.put)((0, _show.updateChannelClaims)(channelKey, claimsData));\n\n case 19:\n case 'end':\n return _context3.stop();\n }\n }\n }, _marked3, this, [[5, 12]]);\n}\n\nfunction watchUpdateChannelClaims() {\n return regeneratorRuntime.wrap(function watchUpdateChannelClaims$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _context4.next = 2;\n return (0, _effects.takeLatest)(actions.CHANNEL_CLAIMS_UPDATE_ASYNC, getNewClaimsAndUpdateChannel);\n\n case 2:\n case 'end':\n return _context4.stop();\n }\n }\n }, _marked4, this);\n}\n\n/***/ }),\n/* 192 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LOAD_START = exports.LOAD_START = 'LOAD_START';\nvar LOADING = exports.LOADING = 'LOADING';\nvar PUBLISHING = exports.PUBLISHING = 'PUBLISHING';\nvar SUCCESS = exports.SUCCESS = 'SUCCESS';\nvar FAILED = exports.FAILED = 'FAILED';\n\n/***/ }),\n/* 193 */\n/***/ (function(module, exports, __webpack_require__) {\n\nexports.__esModule = true;\nexports.Helmet = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(8);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactSideEffect = __webpack_require__(495);\n\nvar _reactSideEffect2 = _interopRequireDefault(_reactSideEffect);\n\nvar _deepEqual = __webpack_require__(498);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _HelmetUtils = __webpack_require__(501);\n\nvar _HelmetConstants = __webpack_require__(194);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Helmet = function Helmet(Component) {\n var _class, _temp;\n\n return _temp = _class = function (_React$Component) {\n _inherits(HelmetWrapper, _React$Component);\n\n function HelmetWrapper() {\n _classCallCheck(this, HelmetWrapper);\n\n return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !(0, _deepEqual2.default)(this.props, nextProps);\n };\n\n HelmetWrapper.prototype.mapNestedChildrenToProps = function mapNestedChildrenToProps(child, nestedChildren) {\n if (!nestedChildren) {\n return null;\n }\n\n switch (child.type) {\n case _HelmetConstants.TAG_NAMES.SCRIPT:\n case _HelmetConstants.TAG_NAMES.NOSCRIPT:\n return {\n innerHTML: nestedChildren\n };\n\n case _HelmetConstants.TAG_NAMES.STYLE:\n return {\n cssText: nestedChildren\n };\n }\n\n throw new Error(\"<\" + child.type + \" /> elements are self-closing and can not contain children. Refer to our API for more information.\");\n };\n\n HelmetWrapper.prototype.flattenArrayTypeChildren = function flattenArrayTypeChildren(_ref) {\n var _extends2;\n\n var child = _ref.child,\n arrayTypeChildren = _ref.arrayTypeChildren,\n newChildProps = _ref.newChildProps,\n nestedChildren = _ref.nestedChildren;\n\n return _extends({}, arrayTypeChildren, (_extends2 = {}, _extends2[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _extends2));\n };\n\n HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) {\n var _extends3, _extends4;\n\n var child = _ref2.child,\n newProps = _ref2.newProps,\n newChildProps = _ref2.newChildProps,\n nestedChildren = _ref2.nestedChildren;\n\n switch (child.type) {\n case _HelmetConstants.TAG_NAMES.TITLE:\n return _extends({}, newProps, (_extends3 = {}, _extends3[child.type] = nestedChildren, _extends3.titleAttributes = _extends({}, newChildProps), _extends3));\n\n case _HelmetConstants.TAG_NAMES.BODY:\n return _extends({}, newProps, {\n bodyAttributes: _extends({}, newChildProps)\n });\n\n case _HelmetConstants.TAG_NAMES.HTML:\n return _extends({}, newProps, {\n htmlAttributes: _extends({}, newChildProps)\n });\n }\n\n return _extends({}, newProps, (_extends4 = {}, _extends4[child.type] = _extends({}, newChildProps), _extends4));\n };\n\n HelmetWrapper.prototype.mapArrayTypeChildrenToProps = function mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n var newFlattenedProps = _extends({}, newProps);\n\n Object.keys(arrayTypeChildren).forEach(function (arrayChildName) {\n var _extends5;\n\n newFlattenedProps = _extends({}, newFlattenedProps, (_extends5 = {}, _extends5[arrayChildName] = arrayTypeChildren[arrayChildName], _extends5));\n });\n\n return newFlattenedProps;\n };\n\n HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) {\n if (false) {\n if (!_HelmetConstants.VALID_TAG_NAMES.some(function (name) {\n return child.type === name;\n })) {\n if (typeof child.type === \"function\") {\n return (0, _HelmetUtils.warn)(\"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.\");\n }\n\n return (0, _HelmetUtils.warn)(\"Only elements types \" + _HelmetConstants.VALID_TAG_NAMES.join(\", \") + \" are allowed. Helmet does not support rendering <\" + child.type + \"> elements. Refer to our API for more information.\");\n }\n\n if (nestedChildren && typeof nestedChildren !== \"string\" && (!Array.isArray(nestedChildren) || nestedChildren.some(function (nestedChild) {\n return typeof nestedChild !== \"string\";\n }))) {\n throw new Error(\"Helmet expects a string as a child of <\" + child.type + \">. Did you forget to wrap your children in braces? ( <\" + child.type + \">{``} ) Refer to our API for more information.\");\n }\n }\n\n return true;\n };\n\n HelmetWrapper.prototype.mapChildrenToProps = function mapChildrenToProps(children, newProps) {\n var _this2 = this;\n\n var arrayTypeChildren = {};\n\n _react2.default.Children.forEach(children, function (child) {\n if (!child || !child.props) {\n return;\n }\n\n var _child$props = child.props,\n nestedChildren = _child$props.children,\n childProps = _objectWithoutProperties(_child$props, [\"children\"]);\n\n var newChildProps = (0, _HelmetUtils.convertReactPropstoHtmlAttributes)(childProps);\n\n _this2.warnOnInvalidChildren(child, nestedChildren);\n\n switch (child.type) {\n case _HelmetConstants.TAG_NAMES.LINK:\n case _HelmetConstants.TAG_NAMES.META:\n case _HelmetConstants.TAG_NAMES.NOSCRIPT:\n case _HelmetConstants.TAG_NAMES.SCRIPT:\n case _HelmetConstants.TAG_NAMES.STYLE:\n arrayTypeChildren = _this2.flattenArrayTypeChildren({\n child: child,\n arrayTypeChildren: arrayTypeChildren,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n\n default:\n newProps = _this2.mapObjectTypeChildren({\n child: child,\n newProps: newProps,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n }\n });\n\n newProps = this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n return newProps;\n };\n\n HelmetWrapper.prototype.render = function render() {\n var _props = this.props,\n children = _props.children,\n props = _objectWithoutProperties(_props, [\"children\"]);\n\n var newProps = _extends({}, props);\n\n if (children) {\n newProps = this.mapChildrenToProps(children, newProps);\n }\n\n return _react2.default.createElement(Component, newProps);\n };\n\n _createClass(HelmetWrapper, null, [{\n key: \"canUseDOM\",\n\n\n // Component.peek comes from react-side-effect:\n // For testing, you may use a static peek() method available on the returned component.\n // It lets you get the current state without resetting the mounted instance stack.\n // Don’t use it for anything other than testing.\n\n /**\n * @param {Object} base: {\"target\": \"_blank\", \"href\": \"http://mysite.com/\"}\n * @param {Object} bodyAttributes: {\"className\": \"root\"}\n * @param {String} defaultTitle: \"Default Title\"\n * @param {Boolean} defer: true\n * @param {Boolean} encodeSpecialCharacters: true\n * @param {Object} htmlAttributes: {\"lang\": \"en\", \"amp\": undefined}\n * @param {Array} link: [{\"rel\": \"canonical\", \"href\": \"http://mysite.com/example\"}]\n * @param {Array} meta: [{\"name\": \"description\", \"content\": \"Test description\"}]\n * @param {Array} noscript: [{\"innerHTML\": \" console.log(newState)\"\n * @param {Array} script: [{\"type\": \"text/javascript\", \"src\": \"http://mysite.com/js/test.js\"}]\n * @param {Array} style: [{\"type\": \"text/css\", \"cssText\": \"div { display: block; color: blue; }\"}]\n * @param {String} title: \"Title\"\n * @param {Object} titleAttributes: {\"itemprop\": \"name\"}\n * @param {String} titleTemplate: \"MySite.com - %s\"\n */\n set: function set(canUseDOM) {\n Component.canUseDOM = canUseDOM;\n }\n }]);\n\n return HelmetWrapper;\n }(_react2.default.Component), _class.propTypes = {\n base: _propTypes2.default.object,\n bodyAttributes: _propTypes2.default.object,\n children: _propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.node), _propTypes2.default.node]),\n defaultTitle: _propTypes2.default.string,\n defer: _propTypes2.default.bool,\n encodeSpecialCharacters: _propTypes2.default.bool,\n htmlAttributes: _propTypes2.default.object,\n link: _propTypes2.default.arrayOf(_propTypes2.default.object),\n meta: _propTypes2.default.arrayOf(_propTypes2.default.object),\n noscript: _propTypes2.default.arrayOf(_propTypes2.default.object),\n onChangeClientState: _propTypes2.default.func,\n script: _propTypes2.default.arrayOf(_propTypes2.default.object),\n style: _propTypes2.default.arrayOf(_propTypes2.default.object),\n title: _propTypes2.default.string,\n titleAttributes: _propTypes2.default.object,\n titleTemplate: _propTypes2.default.string\n }, _class.defaultProps = {\n defer: true,\n encodeSpecialCharacters: true\n }, _class.peek = Component.peek, _class.rewind = function () {\n var mappedState = Component.rewind();\n if (!mappedState) {\n // provide fallback if mappedState is undefined\n mappedState = (0, _HelmetUtils.mapStateOnServer)({\n baseTag: [],\n bodyAttributes: {},\n encodeSpecialCharacters: true,\n htmlAttributes: {},\n linkTags: [],\n metaTags: [],\n noscriptTags: [],\n scriptTags: [],\n styleTags: [],\n title: \"\",\n titleAttributes: {}\n });\n }\n\n return mappedState;\n }, _temp;\n};\n\nvar NullComponent = function NullComponent() {\n return null;\n};\n\nvar HelmetSideEffects = (0, _reactSideEffect2.default)(_HelmetUtils.reducePropsToState, _HelmetUtils.handleClientStateChange, _HelmetUtils.mapStateOnServer)(NullComponent);\n\nvar HelmetExport = Helmet(HelmetSideEffects);\nHelmetExport.renderStatic = HelmetExport.rewind;\n\nexports.Helmet = HelmetExport;\nexports.default = HelmetExport;\n\n/***/ }),\n/* 194 */\n/***/ (function(module, exports) {\n\nexports.__esModule = true;\nvar ATTRIBUTE_NAMES = exports.ATTRIBUTE_NAMES = {\n BODY: \"bodyAttributes\",\n HTML: \"htmlAttributes\",\n TITLE: \"titleAttributes\"\n};\n\nvar TAG_NAMES = exports.TAG_NAMES = {\n BASE: \"base\",\n BODY: \"body\",\n HEAD: \"head\",\n HTML: \"html\",\n LINK: \"link\",\n META: \"meta\",\n NOSCRIPT: \"noscript\",\n SCRIPT: \"script\",\n STYLE: \"style\",\n TITLE: \"title\"\n};\n\nvar VALID_TAG_NAMES = exports.VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(function (name) {\n return TAG_NAMES[name];\n});\n\nvar TAG_PROPERTIES = exports.TAG_PROPERTIES = {\n CHARSET: \"charset\",\n CSS_TEXT: \"cssText\",\n HREF: \"href\",\n HTTPEQUIV: \"http-equiv\",\n INNER_HTML: \"innerHTML\",\n ITEM_PROP: \"itemprop\",\n NAME: \"name\",\n PROPERTY: \"property\",\n REL: \"rel\",\n SRC: \"src\"\n};\n\nvar REACT_TAG_MAP = exports.REACT_TAG_MAP = {\n accesskey: \"accessKey\",\n charset: \"charSet\",\n class: \"className\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n \"http-equiv\": \"httpEquiv\",\n itemprop: \"itemProp\",\n tabindex: \"tabIndex\"\n};\n\nvar HELMET_PROPS = exports.HELMET_PROPS = {\n DEFAULT_TITLE: \"defaultTitle\",\n DEFER: \"defer\",\n ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n TITLE_TEMPLATE: \"titleTemplate\"\n};\n\nvar HTML_TAG_MAP = exports.HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key]] = key;\n return obj;\n}, {});\n\nvar SELF_CLOSING_TAGS = exports.SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\n\nvar HELMET_ATTRIBUTE = exports.HELMET_ATTRIBUTE = \"data-react-helmet\";\n\n/***/ }),\n/* 195 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _publish = __webpack_require__(24);\n\nvar _view = __webpack_require__(510);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n file: publish.file,\n thumbnail: publish.thumbnail,\n fileError: publish.error.file\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n selectFile: function selectFile(file) {\n dispatch((0, _publish.selectFile)(file));\n },\n setFileError: function setFileError(value) {\n dispatch((0, _publish.clearFile)());\n dispatch((0, _publish.updateError)('file', value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 196 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _channel = __webpack_require__(128);\n\nvar _view = __webpack_require__(527);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _publish = __webpack_require__(24);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onChannelLogin: function onChannelLogin(name, shortId, longId) {\n dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));\n dispatch((0, _publish.updateSelectedChannel)(name));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(null, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 197 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _channel = __webpack_require__(128);\n\nvar _view = __webpack_require__(528);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _publish = __webpack_require__(24);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onChannelLogin: function onChannelLogin(name, shortId, longId) {\n dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));\n dispatch((0, _publish.updateSelectedChannel)(name));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(null, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 198 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _view = __webpack_require__(542);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _show = __webpack_require__(52);\n\nvar _show2 = __webpack_require__(68);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select error and status\n var error = show.displayAsset.error;\n var status = show.displayAsset.status;\n // select asset\n var asset = (0, _show2.selectAsset)(show);\n // return props\n return {\n error: error,\n status: status,\n asset: asset\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onFileRequest: function onFileRequest(name, claimId) {\n dispatch((0, _show.fileRequested)(name, claimId));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 199 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(200);\n__webpack_require__(402);\nmodule.exports = __webpack_require__(403);\n\n\n/***/ }),\n/* 200 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\n\n__webpack_require__(201);\n\n__webpack_require__(398);\n\n__webpack_require__(399);\n\nif (global._babelPolyfill) {\n throw new Error(\"only one instance of babel-polyfill is allowed\");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = \"defineProperty\";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, \"padLeft\", \"\".padStart);\ndefine(String.prototype, \"padRight\", \"\".padEnd);\n\n\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(62)))\n\n/***/ }),\n/* 201 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(202);\n__webpack_require__(204);\n__webpack_require__(205);\n__webpack_require__(206);\n__webpack_require__(207);\n__webpack_require__(208);\n__webpack_require__(209);\n__webpack_require__(210);\n__webpack_require__(211);\n__webpack_require__(212);\n__webpack_require__(213);\n__webpack_require__(214);\n__webpack_require__(215);\n__webpack_require__(216);\n__webpack_require__(217);\n__webpack_require__(218);\n__webpack_require__(220);\n__webpack_require__(221);\n__webpack_require__(222);\n__webpack_require__(223);\n__webpack_require__(224);\n__webpack_require__(225);\n__webpack_require__(226);\n__webpack_require__(227);\n__webpack_require__(228);\n__webpack_require__(229);\n__webpack_require__(230);\n__webpack_require__(231);\n__webpack_require__(232);\n__webpack_require__(233);\n__webpack_require__(234);\n__webpack_require__(235);\n__webpack_require__(236);\n__webpack_require__(237);\n__webpack_require__(238);\n__webpack_require__(239);\n__webpack_require__(240);\n__webpack_require__(241);\n__webpack_require__(242);\n__webpack_require__(243);\n__webpack_require__(244);\n__webpack_require__(245);\n__webpack_require__(246);\n__webpack_require__(247);\n__webpack_require__(248);\n__webpack_require__(249);\n__webpack_require__(250);\n__webpack_require__(251);\n__webpack_require__(252);\n__webpack_require__(253);\n__webpack_require__(254);\n__webpack_require__(255);\n__webpack_require__(256);\n__webpack_require__(257);\n__webpack_require__(258);\n__webpack_require__(259);\n__webpack_require__(260);\n__webpack_require__(261);\n__webpack_require__(262);\n__webpack_require__(263);\n__webpack_require__(264);\n__webpack_require__(265);\n__webpack_require__(266);\n__webpack_require__(267);\n__webpack_require__(268);\n__webpack_require__(269);\n__webpack_require__(270);\n__webpack_require__(271);\n__webpack_require__(272);\n__webpack_require__(273);\n__webpack_require__(274);\n__webpack_require__(275);\n__webpack_require__(276);\n__webpack_require__(277);\n__webpack_require__(278);\n__webpack_require__(279);\n__webpack_require__(280);\n__webpack_require__(282);\n__webpack_require__(283);\n__webpack_require__(285);\n__webpack_require__(286);\n__webpack_require__(287);\n__webpack_require__(288);\n__webpack_require__(289);\n__webpack_require__(290);\n__webpack_require__(291);\n__webpack_require__(293);\n__webpack_require__(294);\n__webpack_require__(295);\n__webpack_require__(296);\n__webpack_require__(297);\n__webpack_require__(298);\n__webpack_require__(299);\n__webpack_require__(300);\n__webpack_require__(301);\n__webpack_require__(302);\n__webpack_require__(303);\n__webpack_require__(304);\n__webpack_require__(305);\n__webpack_require__(108);\n__webpack_require__(306);\n__webpack_require__(307);\n__webpack_require__(149);\n__webpack_require__(308);\n__webpack_require__(309);\n__webpack_require__(310);\n__webpack_require__(311);\n__webpack_require__(312);\n__webpack_require__(152);\n__webpack_require__(154);\n__webpack_require__(155);\n__webpack_require__(313);\n__webpack_require__(314);\n__webpack_require__(315);\n__webpack_require__(316);\n__webpack_require__(317);\n__webpack_require__(318);\n__webpack_require__(319);\n__webpack_require__(320);\n__webpack_require__(321);\n__webpack_require__(322);\n__webpack_require__(323);\n__webpack_require__(324);\n__webpack_require__(325);\n__webpack_require__(326);\n__webpack_require__(327);\n__webpack_require__(328);\n__webpack_require__(329);\n__webpack_require__(330);\n__webpack_require__(331);\n__webpack_require__(332);\n__webpack_require__(333);\n__webpack_require__(334);\n__webpack_require__(335);\n__webpack_require__(336);\n__webpack_require__(337);\n__webpack_require__(338);\n__webpack_require__(339);\n__webpack_require__(340);\n__webpack_require__(341);\n__webpack_require__(342);\n__webpack_require__(343);\n__webpack_require__(344);\n__webpack_require__(345);\n__webpack_require__(346);\n__webpack_require__(347);\n__webpack_require__(348);\n__webpack_require__(349);\n__webpack_require__(350);\n__webpack_require__(351);\n__webpack_require__(352);\n__webpack_require__(353);\n__webpack_require__(354);\n__webpack_require__(355);\n__webpack_require__(356);\n__webpack_require__(357);\n__webpack_require__(358);\n__webpack_require__(359);\n__webpack_require__(360);\n__webpack_require__(361);\n__webpack_require__(362);\n__webpack_require__(363);\n__webpack_require__(364);\n__webpack_require__(365);\n__webpack_require__(366);\n__webpack_require__(367);\n__webpack_require__(368);\n__webpack_require__(369);\n__webpack_require__(370);\n__webpack_require__(371);\n__webpack_require__(372);\n__webpack_require__(373);\n__webpack_require__(374);\n__webpack_require__(375);\n__webpack_require__(376);\n__webpack_require__(377);\n__webpack_require__(378);\n__webpack_require__(379);\n__webpack_require__(380);\n__webpack_require__(381);\n__webpack_require__(382);\n__webpack_require__(383);\n__webpack_require__(384);\n__webpack_require__(385);\n__webpack_require__(386);\n__webpack_require__(387);\n__webpack_require__(388);\n__webpack_require__(389);\n__webpack_require__(390);\n__webpack_require__(391);\n__webpack_require__(392);\n__webpack_require__(393);\n__webpack_require__(394);\n__webpack_require__(395);\n__webpack_require__(396);\n__webpack_require__(397);\nmodule.exports = __webpack_require__(28);\n\n\n/***/ }),\n/* 202 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(3);\nvar has = __webpack_require__(15);\nvar DESCRIPTORS = __webpack_require__(9);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(17);\nvar META = __webpack_require__(37).KEY;\nvar $fails = __webpack_require__(4);\nvar shared = __webpack_require__(69);\nvar setToStringTag = __webpack_require__(55);\nvar uid = __webpack_require__(40);\nvar wks = __webpack_require__(7);\nvar wksExt = __webpack_require__(132);\nvar wksDefine = __webpack_require__(88);\nvar enumKeys = __webpack_require__(203);\nvar isArray = __webpack_require__(72);\nvar anObject = __webpack_require__(2);\nvar isObject = __webpack_require__(5);\nvar toIObject = __webpack_require__(19);\nvar toPrimitive = __webpack_require__(29);\nvar createDesc = __webpack_require__(39);\nvar _create = __webpack_require__(44);\nvar gOPNExt = __webpack_require__(135);\nvar $GOPD = __webpack_require__(20);\nvar $DP = __webpack_require__(10);\nvar $keys = __webpack_require__(42);\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n __webpack_require__(45).f = gOPNExt.f = $getOwnPropertyNames;\n __webpack_require__(64).f = $propertyIsEnumerable;\n __webpack_require__(71).f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !__webpack_require__(41)) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(16)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n/***/ }),\n/* 203 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(42);\nvar gOPS = __webpack_require__(71);\nvar pIE = __webpack_require__(64);\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n\n\n/***/ }),\n/* 204 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(0);\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: __webpack_require__(44) });\n\n\n/***/ }),\n/* 205 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(0);\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !__webpack_require__(9), 'Object', { defineProperty: __webpack_require__(10).f });\n\n\n/***/ }),\n/* 206 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(0);\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !__webpack_require__(9), 'Object', { defineProperties: __webpack_require__(134) });\n\n\n/***/ }),\n/* 207 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = __webpack_require__(19);\nvar $getOwnPropertyDescriptor = __webpack_require__(20).f;\n\n__webpack_require__(32)('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n\n\n/***/ }),\n/* 208 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = __webpack_require__(12);\nvar $getPrototypeOf = __webpack_require__(21);\n\n__webpack_require__(32)('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n\n\n/***/ }),\n/* 209 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(12);\nvar $keys = __webpack_require__(42);\n\n__webpack_require__(32)('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n\n\n/***/ }),\n/* 210 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.7 Object.getOwnPropertyNames(O)\n__webpack_require__(32)('getOwnPropertyNames', function () {\n return __webpack_require__(135).f;\n});\n\n\n/***/ }),\n/* 211 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.5 Object.freeze(O)\nvar isObject = __webpack_require__(5);\nvar meta = __webpack_require__(37).onFreeze;\n\n__webpack_require__(32)('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n\n\n/***/ }),\n/* 212 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.17 Object.seal(O)\nvar isObject = __webpack_require__(5);\nvar meta = __webpack_require__(37).onFreeze;\n\n__webpack_require__(32)('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n\n\n/***/ }),\n/* 213 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = __webpack_require__(5);\nvar meta = __webpack_require__(37).onFreeze;\n\n__webpack_require__(32)('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n\n\n/***/ }),\n/* 214 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.12 Object.isFrozen(O)\nvar isObject = __webpack_require__(5);\n\n__webpack_require__(32)('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n\n\n/***/ }),\n/* 215 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.13 Object.isSealed(O)\nvar isObject = __webpack_require__(5);\n\n__webpack_require__(32)('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n\n\n/***/ }),\n/* 216 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.11 Object.isExtensible(O)\nvar isObject = __webpack_require__(5);\n\n__webpack_require__(32)('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n\n\n/***/ }),\n/* 217 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(0);\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(136) });\n\n\n/***/ }),\n/* 218 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.3.10 Object.is(value1, value2)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { is: __webpack_require__(219) });\n\n\n/***/ }),\n/* 219 */\n/***/ (function(module, exports) {\n\n// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n\n\n/***/ }),\n/* 220 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(92).set });\n\n\n/***/ }),\n/* 221 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 19.1.3.6 Object.prototype.toString()\nvar classof = __webpack_require__(65);\nvar test = {};\ntest[__webpack_require__(7)('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n __webpack_require__(17)(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n\n\n/***/ }),\n/* 222 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Function', { bind: __webpack_require__(137) });\n\n\n/***/ }),\n/* 223 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(10).f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || __webpack_require__(9) && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n\n\n/***/ }),\n/* 224 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar isObject = __webpack_require__(5);\nvar getPrototypeOf = __webpack_require__(21);\nvar HAS_INSTANCE = __webpack_require__(7)('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(10).f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n\n\n/***/ }),\n/* 225 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(139);\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n\n\n/***/ }),\n/* 226 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(140);\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n\n\n/***/ }),\n/* 227 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(3);\nvar has = __webpack_require__(15);\nvar cof = __webpack_require__(26);\nvar inheritIfRequired = __webpack_require__(94);\nvar toPrimitive = __webpack_require__(29);\nvar fails = __webpack_require__(4);\nvar gOPN = __webpack_require__(45).f;\nvar gOPD = __webpack_require__(20).f;\nvar dP = __webpack_require__(10).f;\nvar $trim = __webpack_require__(56).trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(__webpack_require__(44)(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = __webpack_require__(9) ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n __webpack_require__(17)(global, NUMBER, $Number);\n}\n\n\n/***/ }),\n/* 228 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar toInteger = __webpack_require__(31);\nvar aNumberValue = __webpack_require__(141);\nvar repeat = __webpack_require__(95);\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !__webpack_require__(4)(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n\n\n/***/ }),\n/* 229 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar $fails = __webpack_require__(4);\nvar aNumberValue = __webpack_require__(141);\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n\n\n/***/ }),\n/* 230 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.1 Number.EPSILON\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n\n\n/***/ }),\n/* 231 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.2 Number.isFinite(number)\nvar $export = __webpack_require__(0);\nvar _isFinite = __webpack_require__(3).isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n\n\n/***/ }),\n/* 232 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.3 Number.isInteger(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { isInteger: __webpack_require__(142) });\n\n\n/***/ }),\n/* 233 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.4 Number.isNaN(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n\n\n/***/ }),\n/* 234 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = __webpack_require__(0);\nvar isInteger = __webpack_require__(142);\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n\n\n/***/ }),\n/* 235 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n\n\n/***/ }),\n/* 236 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n\n\n/***/ }),\n/* 237 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(140);\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n\n\n/***/ }),\n/* 238 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(139);\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n\n\n/***/ }),\n/* 239 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.3 Math.acosh(x)\nvar $export = __webpack_require__(0);\nvar log1p = __webpack_require__(143);\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n\n\n/***/ }),\n/* 240 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.5 Math.asinh(x)\nvar $export = __webpack_require__(0);\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n\n\n/***/ }),\n/* 241 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.7 Math.atanh(x)\nvar $export = __webpack_require__(0);\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n\n\n/***/ }),\n/* 242 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.9 Math.cbrt(x)\nvar $export = __webpack_require__(0);\nvar sign = __webpack_require__(96);\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n\n\n/***/ }),\n/* 243 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.11 Math.clz32(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n\n\n/***/ }),\n/* 244 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.12 Math.cosh(x)\nvar $export = __webpack_require__(0);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n\n\n/***/ }),\n/* 245 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.14 Math.expm1(x)\nvar $export = __webpack_require__(0);\nvar $expm1 = __webpack_require__(97);\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n\n\n/***/ }),\n/* 246 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.16 Math.fround(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { fround: __webpack_require__(144) });\n\n\n/***/ }),\n/* 247 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = __webpack_require__(0);\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n\n\n/***/ }),\n/* 248 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.18 Math.imul(x, y)\nvar $export = __webpack_require__(0);\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * __webpack_require__(4)(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n\n\n/***/ }),\n/* 249 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.21 Math.log10(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n\n\n/***/ }),\n/* 250 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.20 Math.log1p(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { log1p: __webpack_require__(143) });\n\n\n/***/ }),\n/* 251 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.22 Math.log2(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n\n\n/***/ }),\n/* 252 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.28 Math.sign(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { sign: __webpack_require__(96) });\n\n\n/***/ }),\n/* 253 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.30 Math.sinh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(97);\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * __webpack_require__(4)(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n\n\n/***/ }),\n/* 254 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.33 Math.tanh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(97);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n\n\n/***/ }),\n/* 255 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.2.2.34 Math.trunc(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n\n\n/***/ }),\n/* 256 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(0);\nvar toAbsoluteIndex = __webpack_require__(43);\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n\n\n/***/ }),\n/* 257 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(19);\nvar toLength = __webpack_require__(11);\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n\n\n/***/ }),\n/* 258 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 21.1.3.25 String.prototype.trim()\n__webpack_require__(56)('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n\n\n/***/ }),\n/* 259 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $at = __webpack_require__(98)(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(99)(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n\n\n/***/ }),\n/* 260 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(98)(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n\n\n/***/ }),\n/* 261 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(11);\nvar context = __webpack_require__(101);\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(102)(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n\n\n/***/ }),\n/* 262 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\nvar $export = __webpack_require__(0);\nvar context = __webpack_require__(101);\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(102)(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n/***/ }),\n/* 263 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: __webpack_require__(95)\n});\n\n\n/***/ }),\n/* 264 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(11);\nvar context = __webpack_require__(101);\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(102)(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n\n\n/***/ }),\n/* 265 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// B.2.3.2 String.prototype.anchor(name)\n__webpack_require__(18)('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n\n\n/***/ }),\n/* 266 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// B.2.3.3 String.prototype.big()\n__webpack_require__(18)('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n\n\n/***/ }),\n/* 267 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// B.2.3.4 String.prototype.blink()\n__webpack_require__(18)('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n\n\n/***/ }),\n/* 268 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// B.2.3.5 String.prototype.bold()\n__webpack_require__(18)('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n\n\n/***/ }),\n/* 269 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// B.2.3.6 String.prototype.fixed()\n__webpack_require__(18)('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n\n\n/***/ }),\n/* 270 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// B.2.3.7 String.prototype.fontcolor(color)\n__webpack_require__(18)('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n\n\n/***/ }),\n/* 271 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// B.2.3.8 String.prototype.fontsize(size)\n__webpack_require__(18)('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n\n\n/***/ }),\n/* 272 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// B.2.3.9 String.prototype.italics()\n__webpack_require__(18)('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n\n\n/***/ }),\n/* 273 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// B.2.3.10 String.prototype.link(url)\n__webpack_require__(18)('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n\n\n/***/ }),\n/* 274 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// B.2.3.11 String.prototype.small()\n__webpack_require__(18)('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n\n\n/***/ }),\n/* 275 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// B.2.3.12 String.prototype.strike()\n__webpack_require__(18)('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n\n\n/***/ }),\n/* 276 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// B.2.3.13 String.prototype.sub()\n__webpack_require__(18)('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n\n\n/***/ }),\n/* 277 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// B.2.3.14 String.prototype.sup()\n__webpack_require__(18)('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n\n\n/***/ }),\n/* 278 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n\n\n/***/ }),\n/* 279 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(12);\nvar toPrimitive = __webpack_require__(29);\n\n$export($export.P + $export.F * __webpack_require__(4)(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n\n\n/***/ }),\n/* 280 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = __webpack_require__(0);\nvar toISOString = __webpack_require__(281);\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n\n\n/***/ }),\n/* 281 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = __webpack_require__(4);\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n\n\n/***/ }),\n/* 282 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n __webpack_require__(17)(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n\n\n/***/ }),\n/* 283 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar TO_PRIMITIVE = __webpack_require__(7)('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) __webpack_require__(16)(proto, TO_PRIMITIVE, __webpack_require__(284));\n\n\n/***/ }),\n/* 284 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar anObject = __webpack_require__(2);\nvar toPrimitive = __webpack_require__(29);\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n\n\n/***/ }),\n/* 285 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Array', { isArray: __webpack_require__(72) });\n\n\n/***/ }),\n/* 286 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ctx = __webpack_require__(25);\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(12);\nvar call = __webpack_require__(145);\nvar isArrayIter = __webpack_require__(103);\nvar toLength = __webpack_require__(11);\nvar createProperty = __webpack_require__(104);\nvar getIterFn = __webpack_require__(105);\n\n$export($export.S + $export.F * !__webpack_require__(74)(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n\n\n/***/ }),\n/* 287 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar createProperty = __webpack_require__(104);\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * __webpack_require__(4)(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n\n\n/***/ }),\n/* 288 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(19);\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (__webpack_require__(63) != Object || !__webpack_require__(27)(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n\n\n/***/ }),\n/* 289 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar html = __webpack_require__(91);\nvar cof = __webpack_require__(26);\nvar toAbsoluteIndex = __webpack_require__(43);\nvar toLength = __webpack_require__(11);\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * __webpack_require__(4)(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n\n\n/***/ }),\n/* 290 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(14);\nvar toObject = __webpack_require__(12);\nvar fails = __webpack_require__(4);\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !__webpack_require__(27)($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n\n\n/***/ }),\n/* 291 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar $forEach = __webpack_require__(33)(0);\nvar STRICT = __webpack_require__(27)([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n\n\n/***/ }),\n/* 292 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(5);\nvar isArray = __webpack_require__(72);\nvar SPECIES = __webpack_require__(7)('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n\n\n/***/ }),\n/* 293 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar $map = __webpack_require__(33)(1);\n\n$export($export.P + $export.F * !__webpack_require__(27)([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n\n\n/***/ }),\n/* 294 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar $filter = __webpack_require__(33)(2);\n\n$export($export.P + $export.F * !__webpack_require__(27)([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n\n\n/***/ }),\n/* 295 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar $some = __webpack_require__(33)(3);\n\n$export($export.P + $export.F * !__webpack_require__(27)([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n\n\n/***/ }),\n/* 296 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar $every = __webpack_require__(33)(4);\n\n$export($export.P + $export.F * !__webpack_require__(27)([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n\n\n/***/ }),\n/* 297 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(146);\n\n$export($export.P + $export.F * !__webpack_require__(27)([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n\n\n/***/ }),\n/* 298 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(146);\n\n$export($export.P + $export.F * !__webpack_require__(27)([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n\n\n/***/ }),\n/* 299 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar $indexOf = __webpack_require__(70)(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(27)($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n\n\n/***/ }),\n/* 300 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(19);\nvar toInteger = __webpack_require__(31);\nvar toLength = __webpack_require__(11);\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(27)($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n\n\n/***/ }),\n/* 301 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { copyWithin: __webpack_require__(147) });\n\n__webpack_require__(38)('copyWithin');\n\n\n/***/ }),\n/* 302 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { fill: __webpack_require__(107) });\n\n__webpack_require__(38)('fill');\n\n\n/***/ }),\n/* 303 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(33)(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(38)(KEY);\n\n\n/***/ }),\n/* 304 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(33)(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(38)(KEY);\n\n\n/***/ }),\n/* 305 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(46)('Array');\n\n\n/***/ }),\n/* 306 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(3);\nvar inheritIfRequired = __webpack_require__(94);\nvar dP = __webpack_require__(10).f;\nvar gOPN = __webpack_require__(45).f;\nvar isRegExp = __webpack_require__(73);\nvar $flags = __webpack_require__(75);\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (__webpack_require__(9) && (!CORRECT_NEW || __webpack_require__(4)(function () {\n re2[__webpack_require__(7)('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n __webpack_require__(17)(global, 'RegExp', $RegExp);\n}\n\n__webpack_require__(46)('RegExp');\n\n\n/***/ }),\n/* 307 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n__webpack_require__(149);\nvar anObject = __webpack_require__(2);\nvar $flags = __webpack_require__(75);\nvar DESCRIPTORS = __webpack_require__(9);\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n __webpack_require__(17)(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (__webpack_require__(4)(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n\n\n/***/ }),\n/* 308 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// @@match logic\n__webpack_require__(76)('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n\n\n/***/ }),\n/* 309 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// @@replace logic\n__webpack_require__(76)('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n\n\n/***/ }),\n/* 310 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// @@search logic\n__webpack_require__(76)('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n\n\n/***/ }),\n/* 311 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// @@split logic\n__webpack_require__(76)('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = __webpack_require__(73);\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n\n\n/***/ }),\n/* 312 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar LIBRARY = __webpack_require__(41);\nvar global = __webpack_require__(3);\nvar ctx = __webpack_require__(25);\nvar classof = __webpack_require__(65);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(5);\nvar aFunction = __webpack_require__(14);\nvar anInstance = __webpack_require__(47);\nvar forOf = __webpack_require__(48);\nvar speciesConstructor = __webpack_require__(77);\nvar task = __webpack_require__(109).set;\nvar microtask = __webpack_require__(110)();\nvar newPromiseCapabilityModule = __webpack_require__(111);\nvar perform = __webpack_require__(150);\nvar promiseResolve = __webpack_require__(151);\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[__webpack_require__(7)('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = __webpack_require__(49)($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__webpack_require__(55)($Promise, PROMISE);\n__webpack_require__(46)(PROMISE);\nWrapper = __webpack_require__(28)[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(74)(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n\n\n/***/ }),\n/* 313 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar weak = __webpack_require__(156);\nvar validate = __webpack_require__(58);\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\n__webpack_require__(78)(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n\n\n/***/ }),\n/* 314 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar $typed = __webpack_require__(79);\nvar buffer = __webpack_require__(112);\nvar anObject = __webpack_require__(2);\nvar toAbsoluteIndex = __webpack_require__(43);\nvar toLength = __webpack_require__(11);\nvar isObject = __webpack_require__(5);\nvar ArrayBuffer = __webpack_require__(3).ArrayBuffer;\nvar speciesConstructor = __webpack_require__(77);\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * __webpack_require__(4)(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\n__webpack_require__(46)(ARRAY_BUFFER);\n\n\n/***/ }),\n/* 315 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(0);\n$export($export.G + $export.W + $export.F * !__webpack_require__(79).ABV, {\n DataView: __webpack_require__(112).DataView\n});\n\n\n/***/ }),\n/* 316 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(35)('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n/* 317 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(35)('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n/* 318 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(35)('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n\n\n/***/ }),\n/* 319 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(35)('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n/* 320 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(35)('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n/* 321 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(35)('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n/* 322 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(35)('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n/* 323 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(35)('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n/* 324 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(35)('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n/* 325 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(14);\nvar anObject = __webpack_require__(2);\nvar rApply = (__webpack_require__(3).Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !__webpack_require__(4)(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n\n\n/***/ }),\n/* 326 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = __webpack_require__(0);\nvar create = __webpack_require__(44);\nvar aFunction = __webpack_require__(14);\nvar anObject = __webpack_require__(2);\nvar isObject = __webpack_require__(5);\nvar fails = __webpack_require__(4);\nvar bind = __webpack_require__(137);\nvar rConstruct = (__webpack_require__(3).Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n\n\n/***/ }),\n/* 327 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = __webpack_require__(10);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(2);\nvar toPrimitive = __webpack_require__(29);\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * __webpack_require__(4)(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n\n\n/***/ }),\n/* 328 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = __webpack_require__(0);\nvar gOPD = __webpack_require__(20).f;\nvar anObject = __webpack_require__(2);\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n\n\n/***/ }),\n/* 329 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 26.1.5 Reflect.enumerate(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(2);\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\n__webpack_require__(100)(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n\n\n/***/ }),\n/* 330 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = __webpack_require__(20);\nvar getPrototypeOf = __webpack_require__(21);\nvar has = __webpack_require__(15);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(5);\nvar anObject = __webpack_require__(2);\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n\n\n/***/ }),\n/* 331 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = __webpack_require__(20);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(2);\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n\n\n/***/ }),\n/* 332 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = __webpack_require__(0);\nvar getProto = __webpack_require__(21);\nvar anObject = __webpack_require__(2);\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n\n\n/***/ }),\n/* 333 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n\n\n/***/ }),\n/* 334 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 26.1.10 Reflect.isExtensible(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(2);\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n\n\n/***/ }),\n/* 335 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 26.1.11 Reflect.ownKeys(target)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', { ownKeys: __webpack_require__(158) });\n\n\n/***/ }),\n/* 336 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 26.1.12 Reflect.preventExtensions(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(2);\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n\n\n/***/ }),\n/* 337 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = __webpack_require__(10);\nvar gOPD = __webpack_require__(20);\nvar getPrototypeOf = __webpack_require__(21);\nvar has = __webpack_require__(15);\nvar $export = __webpack_require__(0);\nvar createDesc = __webpack_require__(39);\nvar anObject = __webpack_require__(2);\nvar isObject = __webpack_require__(5);\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n\n\n/***/ }),\n/* 338 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = __webpack_require__(0);\nvar setProto = __webpack_require__(92);\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n\n\n/***/ }),\n/* 339 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://github.com/tc39/Array.prototype.includes\nvar $export = __webpack_require__(0);\nvar $includes = __webpack_require__(70)(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n__webpack_require__(38)('includes');\n\n\n/***/ }),\n/* 340 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(159);\nvar toObject = __webpack_require__(12);\nvar toLength = __webpack_require__(11);\nvar aFunction = __webpack_require__(14);\nvar arraySpeciesCreate = __webpack_require__(106);\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\n__webpack_require__(38)('flatMap');\n\n\n/***/ }),\n/* 341 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(159);\nvar toObject = __webpack_require__(12);\nvar toLength = __webpack_require__(11);\nvar toInteger = __webpack_require__(31);\nvar arraySpeciesCreate = __webpack_require__(106);\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\n__webpack_require__(38)('flatten');\n\n\n/***/ }),\n/* 342 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(98)(true);\n\n$export($export.P, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n\n\n/***/ }),\n/* 343 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(160);\nvar userAgent = __webpack_require__(113);\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n\n\n/***/ }),\n/* 344 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(160);\nvar userAgent = __webpack_require__(113);\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n\n\n/***/ }),\n/* 345 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(56)('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n\n\n/***/ }),\n/* 346 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(56)('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n\n\n/***/ }),\n/* 347 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = __webpack_require__(0);\nvar defined = __webpack_require__(30);\nvar toLength = __webpack_require__(11);\nvar isRegExp = __webpack_require__(73);\nvar getFlags = __webpack_require__(75);\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\n__webpack_require__(100)($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n\n\n/***/ }),\n/* 348 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(88)('asyncIterator');\n\n\n/***/ }),\n/* 349 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(88)('observable');\n\n\n/***/ }),\n/* 350 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = __webpack_require__(0);\nvar ownKeys = __webpack_require__(158);\nvar toIObject = __webpack_require__(19);\nvar gOPD = __webpack_require__(20);\nvar createProperty = __webpack_require__(104);\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n\n\n/***/ }),\n/* 351 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $values = __webpack_require__(161)(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n\n\n/***/ }),\n/* 352 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $entries = __webpack_require__(161)(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n\n\n/***/ }),\n/* 353 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(12);\nvar aFunction = __webpack_require__(14);\nvar $defineProperty = __webpack_require__(10);\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\n__webpack_require__(9) && $export($export.P + __webpack_require__(80), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n\n\n/***/ }),\n/* 354 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(12);\nvar aFunction = __webpack_require__(14);\nvar $defineProperty = __webpack_require__(10);\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\n__webpack_require__(9) && $export($export.P + __webpack_require__(80), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n\n\n/***/ }),\n/* 355 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(12);\nvar toPrimitive = __webpack_require__(29);\nvar getPrototypeOf = __webpack_require__(21);\nvar getOwnPropertyDescriptor = __webpack_require__(20).f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\n__webpack_require__(9) && $export($export.P + __webpack_require__(80), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n\n\n/***/ }),\n/* 356 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(12);\nvar toPrimitive = __webpack_require__(29);\nvar getPrototypeOf = __webpack_require__(21);\nvar getOwnPropertyDescriptor = __webpack_require__(20).f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\n__webpack_require__(9) && $export($export.P + __webpack_require__(80), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n\n\n/***/ }),\n/* 357 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Map', { toJSON: __webpack_require__(162)('Map') });\n\n\n/***/ }),\n/* 358 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(162)('Set') });\n\n\n/***/ }),\n/* 359 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\n__webpack_require__(81)('Map');\n\n\n/***/ }),\n/* 360 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\n__webpack_require__(81)('Set');\n\n\n/***/ }),\n/* 361 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\n__webpack_require__(81)('WeakMap');\n\n\n/***/ }),\n/* 362 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\n__webpack_require__(81)('WeakSet');\n\n\n/***/ }),\n/* 363 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\n__webpack_require__(82)('Map');\n\n\n/***/ }),\n/* 364 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\n__webpack_require__(82)('Set');\n\n\n/***/ }),\n/* 365 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\n__webpack_require__(82)('WeakMap');\n\n\n/***/ }),\n/* 366 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\n__webpack_require__(82)('WeakSet');\n\n\n/***/ }),\n/* 367 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.G, { global: __webpack_require__(3) });\n\n\n/***/ }),\n/* 368 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'System', { global: __webpack_require__(3) });\n\n\n/***/ }),\n/* 369 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/ljharb/proposal-is-error\nvar $export = __webpack_require__(0);\nvar cof = __webpack_require__(26);\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n\n\n/***/ }),\n/* 370 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n\n\n/***/ }),\n/* 371 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n\n\n/***/ }),\n/* 372 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n\n\n/***/ }),\n/* 373 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar scale = __webpack_require__(164);\nvar fround = __webpack_require__(144);\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n\n\n/***/ }),\n/* 374 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n\n\n/***/ }),\n/* 375 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n\n\n/***/ }),\n/* 376 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n\n\n/***/ }),\n/* 377 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n\n\n/***/ }),\n/* 378 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n\n\n/***/ }),\n/* 379 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { scale: __webpack_require__(164) });\n\n\n/***/ }),\n/* 380 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n\n\n/***/ }),\n/* 381 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n\n\n/***/ }),\n/* 382 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// https://github.com/tc39/proposal-promise-finally\n\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(28);\nvar global = __webpack_require__(3);\nvar speciesConstructor = __webpack_require__(77);\nvar promiseResolve = __webpack_require__(151);\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n\n\n/***/ }),\n/* 383 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://github.com/tc39/proposal-promise-try\nvar $export = __webpack_require__(0);\nvar newPromiseCapability = __webpack_require__(111);\nvar perform = __webpack_require__(150);\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n\n\n/***/ }),\n/* 384 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar metadata = __webpack_require__(36);\nvar anObject = __webpack_require__(2);\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n\n\n/***/ }),\n/* 385 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar metadata = __webpack_require__(36);\nvar anObject = __webpack_require__(2);\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n\n\n/***/ }),\n/* 386 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar metadata = __webpack_require__(36);\nvar anObject = __webpack_require__(2);\nvar getPrototypeOf = __webpack_require__(21);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n\n\n/***/ }),\n/* 387 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Set = __webpack_require__(154);\nvar from = __webpack_require__(163);\nvar metadata = __webpack_require__(36);\nvar anObject = __webpack_require__(2);\nvar getPrototypeOf = __webpack_require__(21);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n\n\n/***/ }),\n/* 388 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar metadata = __webpack_require__(36);\nvar anObject = __webpack_require__(2);\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n\n\n/***/ }),\n/* 389 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar metadata = __webpack_require__(36);\nvar anObject = __webpack_require__(2);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n\n\n/***/ }),\n/* 390 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar metadata = __webpack_require__(36);\nvar anObject = __webpack_require__(2);\nvar getPrototypeOf = __webpack_require__(21);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n\n\n/***/ }),\n/* 391 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar metadata = __webpack_require__(36);\nvar anObject = __webpack_require__(2);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n\n\n/***/ }),\n/* 392 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $metadata = __webpack_require__(36);\nvar anObject = __webpack_require__(2);\nvar aFunction = __webpack_require__(14);\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n\n\n/***/ }),\n/* 393 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = __webpack_require__(0);\nvar microtask = __webpack_require__(110)();\nvar process = __webpack_require__(3).process;\nvar isNode = __webpack_require__(26)(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n\n\n/***/ }),\n/* 394 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://github.com/zenparsing/es-observable\nvar $export = __webpack_require__(0);\nvar global = __webpack_require__(3);\nvar core = __webpack_require__(28);\nvar microtask = __webpack_require__(110)();\nvar OBSERVABLE = __webpack_require__(7)('observable');\nvar aFunction = __webpack_require__(14);\nvar anObject = __webpack_require__(2);\nvar anInstance = __webpack_require__(47);\nvar redefineAll = __webpack_require__(49);\nvar hide = __webpack_require__(16);\nvar forOf = __webpack_require__(48);\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\n__webpack_require__(46)('Observable');\n\n\n/***/ }),\n/* 395 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// ie9- setTimeout & setInterval additional parameters fix\nvar global = __webpack_require__(3);\nvar $export = __webpack_require__(0);\nvar userAgent = __webpack_require__(113);\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n\n\n/***/ }),\n/* 396 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(0);\nvar $task = __webpack_require__(109);\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n\n\n/***/ }),\n/* 397 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $iterators = __webpack_require__(108);\nvar getKeys = __webpack_require__(42);\nvar redefine = __webpack_require__(17);\nvar global = __webpack_require__(3);\nvar hide = __webpack_require__(16);\nvar Iterators = __webpack_require__(57);\nvar wks = __webpack_require__(7);\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n\n\n/***/ }),\n/* 398 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(62)))\n\n/***/ }),\n/* 399 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(400);\nmodule.exports = __webpack_require__(28).RegExp.escape;\n\n\n/***/ }),\n/* 400 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/benjamingr/RexExp.escape\nvar $export = __webpack_require__(0);\nvar $re = __webpack_require__(401)(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n\n\n/***/ }),\n/* 401 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n\n\n/***/ }),\n/* 402 */\n/***/ (function(module, exports) {\n\n(function(self) {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob()\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isDataView = function(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue+','+value : value\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n }\n\n Headers.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) { items.push(name) })\n return iteratorFor(items)\n }\n\n Headers.prototype.values = function() {\n var items = []\n this.forEach(function(value) { items.push(value) })\n return iteratorFor(items)\n }\n\n Headers.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) { items.push([name, value]) })\n return iteratorFor(items)\n }\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n Request.prototype.clone = function() {\n return new Request(this, { body: this._bodyInit })\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers()\n rawHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = 'status' in options ? options.status : 200\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = 'statusText' in options ? options.statusText : 'OK'\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n }\n\n Body.call(Response.prototype)\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n }\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n }\n\n var redirectStatuses = [301, 302, 303, 307, 308]\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n }\n\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n var xhr = new XMLHttpRequest()\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n\n\n/***/ }),\n/* 403 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = __webpack_require__(405);\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _redux = __webpack_require__(116);\n\nvar _reactRouterDom = __webpack_require__(34);\n\nvar _reducers = __webpack_require__(466);\n\nvar _reducers2 = _interopRequireDefault(_reducers);\n\nvar _reduxSaga = __webpack_require__(184);\n\nvar _reduxSaga2 = _interopRequireDefault(_reduxSaga);\n\nvar _sagas = __webpack_require__(476);\n\nvar _sagas2 = _interopRequireDefault(_sagas);\n\nvar _GAListener = __webpack_require__(490);\n\nvar _GAListener2 = _interopRequireDefault(_GAListener);\n\nvar _app = __webpack_require__(492);\n\nvar _app2 = _interopRequireDefault(_app);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// get the state from a global variable injected into the server-generated HTML\nvar preloadedState = window.__PRELOADED_STATE__ || null;\n\n// Allow the passed state to be garbage-collected\ndelete window.__PRELOADED_STATE__;\n\n// create and apply middleware\nvar sagaMiddleware = (0, _reduxSaga2.default)();\nvar middleware = (0, _redux.applyMiddleware)(sagaMiddleware);\nvar reduxMiddleware = window.__REDUX_DEVTOOLS_EXTENSION__ ? (0, _redux.compose)(middleware, window.__REDUX_DEVTOOLS_EXTENSION__()) : middleware;\n\n// create teh store\nvar store = void 0;\nif (preloadedState) {\n store = (0, _redux.createStore)(_reducers2.default, preloadedState, reduxMiddleware);\n} else {\n store = (0, _redux.createStore)(_reducers2.default, reduxMiddleware);\n}\n\n// run the saga middlweare\nsagaMiddleware.run(_sagas2.default);\n\n// render the app\n(0, _reactDom.hydrate)(_react2.default.createElement(\n _reactRedux.Provider,\n { store: store },\n _react2.default.createElement(\n _reactRouterDom.BrowserRouter,\n null,\n _react2.default.createElement(\n _GAListener2.default,\n null,\n _react2.default.createElement(_app2.default, null)\n )\n )\n), document.getElementById('react-app'));\n\n/***/ }),\n/* 404 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/** @license React v16.2.0\n * react.production.min.js\n *\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar m=__webpack_require__(114),n=__webpack_require__(165),p=__webpack_require__(83),q=\"function\"===typeof Symbol&&Symbol[\"for\"],r=q?Symbol[\"for\"](\"react.element\"):60103,t=q?Symbol[\"for\"](\"react.call\"):60104,u=q?Symbol[\"for\"](\"react.return\"):60105,v=q?Symbol[\"for\"](\"react.portal\"):60106,w=q?Symbol[\"for\"](\"react.fragment\"):60107,x=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction y(a){for(var b=arguments.length-1,e=\"Minified React error #\"+a+\"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\\x3d\"+a,c=0;cM.length&&M.push(a)}\nfunction P(a,b,e,c){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case r:case t:case u:case v:g=!0}}if(g)return e(c,a,\"\"===b?\".\"+Q(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k=g.hasBooleanValue+g.hasNumericValue+g.hasOverloadedBooleanValue?void 0:E(\"50\",f);e.hasOwnProperty(f)&&(g.attributeName=e[f]);d.hasOwnProperty(f)&&(g.attributeNamespace=d[f]);a.hasOwnProperty(f)&&(g.mutationMethod=a[f]);ua[f]=g}}},ua={};\nfunction va(a,b){if(oa.hasOwnProperty(a)||2this.eventPool.length&&this.eventPool.push(a)}function Jb(a){a.eventPool=[];a.getPooled=Kb;a.release=Lb}function Mb(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Mb,{data:null});function Nb(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Nb,{data:null});var Pb=[9,13,27,32],Vb=l.canUseDOM&&\"CompositionEvent\"in window,Wb=null;l.canUseDOM&&\"documentMode\"in document&&(Wb=document.documentMode);var Xb;\nif(Xb=l.canUseDOM&&\"TextEvent\"in window&&!Wb){var Yb=window.opera;Xb=!(\"object\"===typeof Yb&&\"function\"===typeof Yb.version&&12>=parseInt(Yb.version(),10))}\nvar Zb=Xb,$b=l.canUseDOM&&(!Vb||Wb&&8=Wb),ac=String.fromCharCode(32),bc={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"topCompositionEnd\",\"topKeyPress\",\"topTextInput\",\"topPaste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"topBlur topCompositionEnd topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"topBlur topCompositionStart topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"topBlur topCompositionUpdate topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")}},cc=!1;\nfunction dc(a,b){switch(a){case \"topKeyUp\":return-1!==Pb.indexOf(b.keyCode);case \"topKeyDown\":return 229!==b.keyCode;case \"topKeyPress\":case \"topMouseDown\":case \"topBlur\":return!0;default:return!1}}function ec(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var fc=!1;function gc(a,b){switch(a){case \"topCompositionEnd\":return ec(b);case \"topKeyPress\":if(32!==b.which)return null;cc=!0;return ac;case \"topTextInput\":return a=b.data,a===ac&&cc?null:a;default:return null}}\nfunction hc(a,b){if(fc)return\"topCompositionEnd\"===a||!Vb&&dc(a,b)?(a=Fb(),S._root=null,S._startText=null,S._fallbackText=null,fc=!1,a):null;switch(a){case \"topPaste\":return null;case \"topKeyPress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1qd.length&&qd.push(a)}}}\nvar xd=Object.freeze({get _enabled(){return td},get _handleTopLevel(){return sd},setHandleTopLevel:function(a){sd=a},setEnabled:ud,isEnabled:function(){return td},trapBubbledEvent:U,trapCapturedEvent:wd,dispatchEvent:vd});function yd(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;c[\"ms\"+a]=\"MS\"+b;c[\"O\"+a]=\"o\"+b.toLowerCase();return c}\nvar zd={animationend:yd(\"Animation\",\"AnimationEnd\"),animationiteration:yd(\"Animation\",\"AnimationIteration\"),animationstart:yd(\"Animation\",\"AnimationStart\"),transitionend:yd(\"Transition\",\"TransitionEnd\")},Ad={},Bd={};l.canUseDOM&&(Bd=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete zd.animationend.animation,delete zd.animationiteration.animation,delete zd.animationstart.animation),\"TransitionEvent\"in window||delete zd.transitionend.transition);\nfunction Cd(a){if(Ad[a])return Ad[a];if(!zd[a])return a;var b=zd[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Bd)return Ad[a]=b[c];return\"\"}\nvar Dd={topAbort:\"abort\",topAnimationEnd:Cd(\"animationend\")||\"animationend\",topAnimationIteration:Cd(\"animationiteration\")||\"animationiteration\",topAnimationStart:Cd(\"animationstart\")||\"animationstart\",topBlur:\"blur\",topCancel:\"cancel\",topCanPlay:\"canplay\",topCanPlayThrough:\"canplaythrough\",topChange:\"change\",topClick:\"click\",topClose:\"close\",topCompositionEnd:\"compositionend\",topCompositionStart:\"compositionstart\",topCompositionUpdate:\"compositionupdate\",topContextMenu:\"contextmenu\",topCopy:\"copy\",\ntopCut:\"cut\",topDoubleClick:\"dblclick\",topDrag:\"drag\",topDragEnd:\"dragend\",topDragEnter:\"dragenter\",topDragExit:\"dragexit\",topDragLeave:\"dragleave\",topDragOver:\"dragover\",topDragStart:\"dragstart\",topDrop:\"drop\",topDurationChange:\"durationchange\",topEmptied:\"emptied\",topEncrypted:\"encrypted\",topEnded:\"ended\",topError:\"error\",topFocus:\"focus\",topInput:\"input\",topKeyDown:\"keydown\",topKeyPress:\"keypress\",topKeyUp:\"keyup\",topLoadedData:\"loadeddata\",topLoad:\"load\",topLoadedMetadata:\"loadedmetadata\",topLoadStart:\"loadstart\",\ntopMouseDown:\"mousedown\",topMouseMove:\"mousemove\",topMouseOut:\"mouseout\",topMouseOver:\"mouseover\",topMouseUp:\"mouseup\",topPaste:\"paste\",topPause:\"pause\",topPlay:\"play\",topPlaying:\"playing\",topProgress:\"progress\",topRateChange:\"ratechange\",topScroll:\"scroll\",topSeeked:\"seeked\",topSeeking:\"seeking\",topSelectionChange:\"selectionchange\",topStalled:\"stalled\",topSuspend:\"suspend\",topTextInput:\"textInput\",topTimeUpdate:\"timeupdate\",topToggle:\"toggle\",topTouchCancel:\"touchcancel\",topTouchEnd:\"touchend\",topTouchMove:\"touchmove\",\ntopTouchStart:\"touchstart\",topTransitionEnd:Cd(\"transitionend\")||\"transitionend\",topVolumeChange:\"volumechange\",topWaiting:\"waiting\",topWheel:\"wheel\"},Ed={},Fd=0,Gd=\"_reactListenersID\"+(\"\"+Math.random()).slice(2);function Hd(a){Object.prototype.hasOwnProperty.call(a,Gd)||(a[Gd]=Fd++,Ed[a[Gd]]={});return Ed[a[Gd]]}function Id(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Jd(a,b){var c=Id(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Id(c)}}function Kd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&\"text\"===a.type||\"textarea\"===b||\"true\"===a.contentEditable)}\nvar Ld=l.canUseDOM&&\"documentMode\"in document&&11>=document.documentMode,Md={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"topBlur topContextMenu topFocus topKeyDown topKeyUp topMouseDown topMouseUp topSelectionChange\".split(\" \")}},Nd=null,Od=null,Pd=null,Qd=!1;\nfunction Rd(a,b){if(Qd||null==Nd||Nd!==da())return null;var c=Nd;\"selectionStart\"in c&&Kd(c)?c={start:c.selectionStart,end:c.selectionEnd}:window.getSelection?(c=window.getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}):c=void 0;return Pd&&ea(Pd,c)?null:(Pd=c,a=T.getPooled(Md.select,Od,a,b),a.type=\"select\",a.target=Nd,Ab(a),a)}\nvar Sd={eventTypes:Md,extractEvents:function(a,b,c,d){var e=d.window===d?d.document:9===d.nodeType?d:d.ownerDocument,f;if(!(f=!e)){a:{e=Hd(e);f=Sa.onSelect;for(var g=0;ghe||(a.current=ge[he],ge[he]=null,he--)}function W(a,b){he++;ge[he]=a.current;a.current=b}new Set;var ie={current:D},X={current:!1},je=D;function ke(a){return le(a)?je:ie.current}\nfunction me(a,b){var c=a.type.contextTypes;if(!c)return D;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function le(a){return 2===a.tag&&null!=a.type.childContextTypes}function ne(a){le(a)&&(V(X,a),V(ie,a))}\nfunction oe(a,b,c){null!=ie.cursor?E(\"168\"):void 0;W(ie,b,a);W(X,c,a)}function pe(a,b){var c=a.stateNode,d=a.type.childContextTypes;if(\"function\"!==typeof c.getChildContext)return b;c=c.getChildContext();for(var e in c)e in d?void 0:E(\"108\",jd(a)||\"Unknown\",e);return B({},b,c)}function qe(a){if(!le(a))return!1;var b=a.stateNode;b=b&&b.__reactInternalMemoizedMergedChildContext||D;je=ie.current;W(ie,b,a);W(X,X.current,a);return!0}\nfunction re(a,b){var c=a.stateNode;c?void 0:E(\"169\");if(b){var d=pe(a,je);c.__reactInternalMemoizedMergedChildContext=d;V(X,a);V(ie,a);W(ie,d,a)}else V(X,a);W(X,b,a)}\nfunction Y(a,b,c){this.tag=a;this.key=b;this.stateNode=this.type=null;this.sibling=this.child=this[\"return\"]=null;this.index=0;this.memoizedState=this.updateQueue=this.memoizedProps=this.pendingProps=this.ref=null;this.internalContextTag=c;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.expirationTime=0;this.alternate=null}\nfunction se(a,b,c){var d=a.alternate;null===d?(d=new Y(a.tag,a.key,a.internalContextTag),d.type=a.type,d.stateNode=a.stateNode,d.alternate=a,a.alternate=d):(d.effectTag=0,d.nextEffect=null,d.firstEffect=null,d.lastEffect=null);d.expirationTime=c;d.pendingProps=b;d.child=a.child;d.memoizedProps=a.memoizedProps;d.memoizedState=a.memoizedState;d.updateQueue=a.updateQueue;d.sibling=a.sibling;d.index=a.index;d.ref=a.ref;return d}\nfunction te(a,b,c){var d=void 0,e=a.type,f=a.key;\"function\"===typeof e?(d=e.prototype&&e.prototype.isReactComponent?new Y(2,f,b):new Y(0,f,b),d.type=e,d.pendingProps=a.props):\"string\"===typeof e?(d=new Y(5,f,b),d.type=e,d.pendingProps=a.props):\"object\"===typeof e&&null!==e&&\"number\"===typeof e.tag?(d=e,d.pendingProps=a.props):E(\"130\",null==e?e:typeof e,\"\");d.expirationTime=c;return d}function ue(a,b,c,d){b=new Y(10,d,b);b.pendingProps=a;b.expirationTime=c;return b}\nfunction ve(a,b,c){b=new Y(6,null,b);b.pendingProps=a;b.expirationTime=c;return b}function we(a,b,c){b=new Y(7,a.key,b);b.type=a.handler;b.pendingProps=a;b.expirationTime=c;return b}function xe(a,b,c){a=new Y(9,null,b);a.expirationTime=c;return a}function ye(a,b,c){b=new Y(4,a.key,b);b.pendingProps=a.children||[];b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}var ze=null,Ae=null;\nfunction Be(a){return function(b){try{return a(b)}catch(c){}}}function Ce(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);ze=Be(function(a){return b.onCommitFiberRoot(c,a)});Ae=Be(function(a){return b.onCommitFiberUnmount(c,a)})}catch(d){}return!0}function De(a){\"function\"===typeof ze&&ze(a)}function Ee(a){\"function\"===typeof Ae&&Ae(a)}\nfunction Fe(a){return{baseState:a,expirationTime:0,first:null,last:null,callbackList:null,hasForceUpdate:!1,isInitialized:!1}}function Ge(a,b){null===a.last?a.first=a.last=b:(a.last.next=b,a.last=b);if(0===a.expirationTime||a.expirationTime>b.expirationTime)a.expirationTime=b.expirationTime}\nfunction He(a,b){var c=a.alternate,d=a.updateQueue;null===d&&(d=a.updateQueue=Fe(null));null!==c?(a=c.updateQueue,null===a&&(a=c.updateQueue=Fe(null))):a=null;a=a!==d?a:null;null===a?Ge(d,b):null===d.last||null===a.last?(Ge(d,b),Ge(a,b)):(Ge(d,b),a.last=b)}function Ie(a,b,c,d){a=a.partialState;return\"function\"===typeof a?a.call(b,c,d):a}\nfunction Je(a,b,c,d,e,f){null!==a&&a.updateQueue===c&&(c=b.updateQueue={baseState:c.baseState,expirationTime:c.expirationTime,first:c.first,last:c.last,isInitialized:c.isInitialized,callbackList:null,hasForceUpdate:!1});c.expirationTime=0;c.isInitialized?a=c.baseState:(a=c.baseState=b.memoizedState,c.isInitialized=!0);for(var g=!0,h=c.first,k=!1;null!==h;){var q=h.expirationTime;if(q>f){var v=c.expirationTime;if(0===v||v>q)c.expirationTime=q;k||(k=!0,c.baseState=a)}else{k||(c.first=h.next,null===\nc.first&&(c.last=null));if(h.isReplace)a=Ie(h,d,a,e),g=!0;else if(q=Ie(h,d,a,e))a=g?B({},a,q):B(a,q),g=!1;h.isForced&&(c.hasForceUpdate=!0);null!==h.callback&&(q=c.callbackList,null===q&&(q=c.callbackList=[]),q.push(h))}h=h.next}null!==c.callbackList?b.effectTag|=32:null!==c.first||c.hasForceUpdate||(b.updateQueue=null);k||(c.baseState=a);return a}\nfunction Ke(a,b){var c=a.callbackList;if(null!==c)for(a.callbackList=null,a=0;aw?(k=n,n=null):k=n.sibling;var x=G(e,n,m[w],A);if(null===x){null===n&&(n=k);break}a&&n&&null===x.alternate&&b(e,n);g=f(x,g,w);null===r?h=x:r.sibling=x;r=x;n=k}if(w===m.length)return c(e,n),h;if(null===n){for(;ww?(k=n,n=null):k=n.sibling;var J=G(e,n,x.value,A);if(null===J){n||(n=k);break}a&&n&&null===J.alternate&&b(e,n);g=f(J,\ng,w);null===r?h=J:r.sibling=J;r=J;n=k}if(x.done)return c(e,n),h;if(null===n){for(;!x.done;w++,x=m.next())x=z(e,x.value,A),null!==x&&(g=f(x,g,w),null===r?h=x:r.sibling=x,r=x);return h}for(n=d(e,n);!x.done;w++,x=m.next())if(x=I(n,e,w,x.value,A),null!==x){if(a&&null!==x.alternate)n[\"delete\"](null===x.key?w:x.key);g=f(x,g,w);null===r?h=x:r.sibling=x;r=x}a&&n.forEach(function(a){return b(e,a)});return h}return function(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===Ve&&null===f.key&&(f=f.props.children);\nvar m=\"object\"===typeof f&&null!==f;if(m)switch(f.$$typeof){case Re:a:{var r=f.key;for(m=d;null!==m;){if(m.key===r)if(10===m.tag?f.type===Ve:m.type===f.type){c(a,m.sibling);d=e(m,f.type===Ve?f.props.children:f.props,h);d.ref=Ze(m,f);d[\"return\"]=a;a=d;break a}else{c(a,m);break}else b(a,m);m=m.sibling}f.type===Ve?(d=ue(f.props.children,a.internalContextTag,h,f.key),d[\"return\"]=a,a=d):(h=te(f,a.internalContextTag,h),h.ref=Ze(d,f),h[\"return\"]=a,a=h)}return g(a);case Se:a:{for(m=f.key;null!==d;){if(d.key===\nm)if(7===d.tag){c(a,d.sibling);d=e(d,f,h);d[\"return\"]=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=we(f,a.internalContextTag,h);d[\"return\"]=a;a=d}return g(a);case Te:a:{if(null!==d)if(9===d.tag){c(a,d.sibling);d=e(d,null,h);d.type=f.value;d[\"return\"]=a;a=d;break a}else c(a,d);d=xe(f,a.internalContextTag,h);d.type=f.value;d[\"return\"]=a;a=d}return g(a);case Ue:a:{for(m=f.key;null!==d;){if(d.key===m)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===\nf.implementation){c(a,d.sibling);d=e(d,f.children||[],h);d[\"return\"]=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=ye(f,a.internalContextTag,h);d[\"return\"]=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f,h)):(c(a,d),d=ve(f,a.internalContextTag,h)),d[\"return\"]=a,a=d,g(a);if(Ye(f))return L(a,d,f,h);if(Xe(f))return N(a,d,f,h);m&&$e(a,f);if(\"undefined\"===typeof f)switch(a.tag){case 2:case 1:h=a.type,E(\"152\",h.displayName||\nh.name||\"Component\")}return c(a,d)}}var bf=af(!0),cf=af(!1);\nfunction df(a,b,c,d,e){function f(a,b,c){var d=b.expirationTime;b.child=null===a?cf(b,null,c,d):bf(b,a.child,c,d)}function g(a,b){var c=b.ref;null===c||a&&a.ref===c||(b.effectTag|=128)}function h(a,b,c,d){g(a,b);if(!c)return d&&re(b,!1),q(a,b);c=b.stateNode;id.current=b;var e=c.render();b.effectTag|=1;f(a,b,e);b.memoizedState=c.state;b.memoizedProps=c.props;d&&re(b,!0);return b.child}function k(a){var b=a.stateNode;b.pendingContext?oe(a,b.pendingContext,b.pendingContext!==b.context):b.context&&oe(a,\nb.context,!1);I(a,b.containerInfo)}function q(a,b){null!==a&&b.child!==a.child?E(\"153\"):void 0;if(null!==b.child){a=b.child;var c=se(a,a.pendingProps,a.expirationTime);b.child=c;for(c[\"return\"]=b;null!==a.sibling;)a=a.sibling,c=c.sibling=se(a,a.pendingProps,a.expirationTime),c[\"return\"]=b;c.sibling=null}return b.child}function v(a,b){switch(b.tag){case 3:k(b);break;case 2:qe(b);break;case 4:I(b,b.stateNode.containerInfo)}return null}var y=a.shouldSetTextContent,u=a.useSyncScheduling,z=a.shouldDeprioritizeSubtree,\nG=b.pushHostContext,I=b.pushHostContainer,L=c.enterHydrationState,N=c.resetHydrationState,J=c.tryToClaimNextHydratableInstance;a=Le(d,e,function(a,b){a.memoizedProps=b},function(a,b){a.memoizedState=b});var w=a.adoptClassInstance,m=a.constructClassInstance,A=a.mountClassInstance,Ob=a.updateClassInstance;return{beginWork:function(a,b,c){if(0===b.expirationTime||b.expirationTime>c)return v(a,b);switch(b.tag){case 0:null!==a?E(\"155\"):void 0;var d=b.type,e=b.pendingProps,r=ke(b);r=me(b,r);d=d(e,r);b.effectTag|=\n1;\"object\"===typeof d&&null!==d&&\"function\"===typeof d.render?(b.tag=2,e=qe(b),w(b,d),A(b,c),b=h(a,b,!0,e)):(b.tag=1,f(a,b,d),b.memoizedProps=e,b=b.child);return b;case 1:a:{e=b.type;c=b.pendingProps;d=b.memoizedProps;if(X.current)null===c&&(c=d);else if(null===c||d===c){b=q(a,b);break a}d=ke(b);d=me(b,d);e=e(c,d);b.effectTag|=1;f(a,b,e);b.memoizedProps=c;b=b.child}return b;case 2:return e=qe(b),d=void 0,null===a?b.stateNode?E(\"153\"):(m(b,b.pendingProps),A(b,c),d=!0):d=Ob(a,b,c),h(a,b,d,e);case 3:return k(b),\ne=b.updateQueue,null!==e?(d=b.memoizedState,e=Je(a,b,e,null,null,c),d===e?(N(),b=q(a,b)):(d=e.element,r=b.stateNode,(null===a||null===a.child)&&r.hydrate&&L(b)?(b.effectTag|=2,b.child=cf(b,null,d,c)):(N(),f(a,b,d)),b.memoizedState=e,b=b.child)):(N(),b=q(a,b)),b;case 5:G(b);null===a&&J(b);e=b.type;var n=b.memoizedProps;d=b.pendingProps;null===d&&(d=n,null===d?E(\"154\"):void 0);r=null!==a?a.memoizedProps:null;X.current||null!==d&&n!==d?(n=d.children,y(e,d)?n=null:r&&y(e,r)&&(b.effectTag|=16),g(a,b),\n2147483647!==c&&!u&&z(e,d)?(b.expirationTime=2147483647,b=null):(f(a,b,n),b.memoizedProps=d,b=b.child)):b=q(a,b);return b;case 6:return null===a&&J(b),a=b.pendingProps,null===a&&(a=b.memoizedProps),b.memoizedProps=a,null;case 8:b.tag=7;case 7:e=b.pendingProps;if(X.current)null===e&&(e=a&&a.memoizedProps,null===e?E(\"154\"):void 0);else if(null===e||b.memoizedProps===e)e=b.memoizedProps;d=e.children;b.stateNode=null===a?cf(b,b.stateNode,d,c):bf(b,b.stateNode,d,c);b.memoizedProps=e;return b.stateNode;\ncase 9:return null;case 4:a:{I(b,b.stateNode.containerInfo);e=b.pendingProps;if(X.current)null===e&&(e=a&&a.memoizedProps,null==e?E(\"154\"):void 0);else if(null===e||b.memoizedProps===e){b=q(a,b);break a}null===a?b.child=bf(b,null,e,c):f(a,b,e);b.memoizedProps=e;b=b.child}return b;case 10:a:{c=b.pendingProps;if(X.current)null===c&&(c=b.memoizedProps);else if(null===c||b.memoizedProps===c){b=q(a,b);break a}f(a,b,c);b.memoizedProps=c;b=b.child}return b;default:E(\"156\")}},beginFailedWork:function(a,b,\nc){switch(b.tag){case 2:qe(b);break;case 3:k(b);break;default:E(\"157\")}b.effectTag|=64;null===a?b.child=null:b.child!==a.child&&(b.child=a.child);if(0===b.expirationTime||b.expirationTime>c)return v(a,b);b.firstEffect=null;b.lastEffect=null;b.child=null===a?cf(b,null,null,c):bf(b,a.child,null,c);2===b.tag&&(a=b.stateNode,b.memoizedProps=a.props,b.memoizedState=a.state);return b.child}}}\nfunction ef(a,b,c){function d(a){a.effectTag|=4}var e=a.createInstance,f=a.createTextInstance,g=a.appendInitialChild,h=a.finalizeInitialChildren,k=a.prepareUpdate,q=a.persistence,v=b.getRootHostContainer,y=b.popHostContext,u=b.getHostContext,z=b.popHostContainer,G=c.prepareToHydrateHostInstance,I=c.prepareToHydrateHostTextInstance,L=c.popHydrationState,N=void 0,J=void 0,w=void 0;a.mutation?(N=function(){},J=function(a,b,c){(b.updateQueue=c)&&d(b)},w=function(a,b,c,e){c!==e&&d(b)}):q?E(\"235\"):E(\"236\");\nreturn{completeWork:function(a,b,c){var m=b.pendingProps;if(null===m)m=b.memoizedProps;else if(2147483647!==b.expirationTime||2147483647===c)b.pendingProps=null;switch(b.tag){case 1:return null;case 2:return ne(b),null;case 3:z(b);V(X,b);V(ie,b);m=b.stateNode;m.pendingContext&&(m.context=m.pendingContext,m.pendingContext=null);if(null===a||null===a.child)L(b),b.effectTag&=-3;N(b);return null;case 5:y(b);c=v();var A=b.type;if(null!==a&&null!=b.stateNode){var p=a.memoizedProps,q=b.stateNode,x=u();q=\nk(q,A,p,m,c,x);J(a,b,q,A,p,m,c);a.ref!==b.ref&&(b.effectTag|=128)}else{if(!m)return null===b.stateNode?E(\"166\"):void 0,null;a=u();if(L(b))G(b,c,a)&&d(b);else{a=e(A,m,c,a,b);a:for(p=b.child;null!==p;){if(5===p.tag||6===p.tag)g(a,p.stateNode);else if(4!==p.tag&&null!==p.child){p.child[\"return\"]=p;p=p.child;continue}if(p===b)break;for(;null===p.sibling;){if(null===p[\"return\"]||p[\"return\"]===b)break a;p=p[\"return\"]}p.sibling[\"return\"]=p[\"return\"];p=p.sibling}h(a,A,m,c)&&d(b);b.stateNode=a}null!==b.ref&&\n(b.effectTag|=128)}return null;case 6:if(a&&null!=b.stateNode)w(a,b,a.memoizedProps,m);else{if(\"string\"!==typeof m)return null===b.stateNode?E(\"166\"):void 0,null;a=v();c=u();L(b)?I(b)&&d(b):b.stateNode=f(m,a,c,b)}return null;case 7:(m=b.memoizedProps)?void 0:E(\"165\");b.tag=8;A=[];a:for((p=b.stateNode)&&(p[\"return\"]=b);null!==p;){if(5===p.tag||6===p.tag||4===p.tag)E(\"247\");else if(9===p.tag)A.push(p.type);else if(null!==p.child){p.child[\"return\"]=p;p=p.child;continue}for(;null===p.sibling;){if(null===\np[\"return\"]||p[\"return\"]===b)break a;p=p[\"return\"]}p.sibling[\"return\"]=p[\"return\"];p=p.sibling}p=m.handler;m=p(m.props,A);b.child=bf(b,null!==a?a.child:null,m,c);return b.child;case 8:return b.tag=7,null;case 9:return null;case 10:return null;case 4:return z(b),N(b),null;case 0:E(\"167\");default:E(\"156\")}}}}\nfunction ff(a,b){function c(a){var c=a.ref;if(null!==c)try{c(null)}catch(A){b(a,A)}}function d(a){\"function\"===typeof Ee&&Ee(a);switch(a.tag){case 2:c(a);var d=a.stateNode;if(\"function\"===typeof d.componentWillUnmount)try{d.props=a.memoizedProps,d.state=a.memoizedState,d.componentWillUnmount()}catch(A){b(a,A)}break;case 5:c(a);break;case 7:e(a.stateNode);break;case 4:k&&g(a)}}function e(a){for(var b=a;;)if(d(b),null===b.child||k&&4===b.tag){if(b===a)break;for(;null===b.sibling;){if(null===b[\"return\"]||\nb[\"return\"]===a)return;b=b[\"return\"]}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}else b.child[\"return\"]=b,b=b.child}function f(a){return 5===a.tag||3===a.tag||4===a.tag}function g(a){for(var b=a,c=!1,f=void 0,g=void 0;;){if(!c){c=b[\"return\"];a:for(;;){null===c?E(\"160\"):void 0;switch(c.tag){case 5:f=c.stateNode;g=!1;break a;case 3:f=c.stateNode.containerInfo;g=!0;break a;case 4:f=c.stateNode.containerInfo;g=!0;break a}c=c[\"return\"]}c=!0}if(5===b.tag||6===b.tag)e(b),g?J(f,b.stateNode):N(f,b.stateNode);\nelse if(4===b.tag?f=b.stateNode.containerInfo:d(b),null!==b.child){b.child[\"return\"]=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b[\"return\"]||b[\"return\"]===a)return;b=b[\"return\"];4===b.tag&&(c=!1)}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}}var h=a.getPublicInstance,k=a.mutation;a=a.persistence;k||(a?E(\"235\"):E(\"236\"));var q=k.commitMount,v=k.commitUpdate,y=k.resetTextContent,u=k.commitTextUpdate,z=k.appendChild,G=k.appendChildToContainer,I=k.insertBefore,L=k.insertInContainerBefore,\nN=k.removeChild,J=k.removeChildFromContainer;return{commitResetTextContent:function(a){y(a.stateNode)},commitPlacement:function(a){a:{for(var b=a[\"return\"];null!==b;){if(f(b)){var c=b;break a}b=b[\"return\"]}E(\"160\");c=void 0}var d=b=void 0;switch(c.tag){case 5:b=c.stateNode;d=!1;break;case 3:b=c.stateNode.containerInfo;d=!0;break;case 4:b=c.stateNode.containerInfo;d=!0;break;default:E(\"161\")}c.effectTag&16&&(y(b),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c[\"return\"]||f(c[\"return\"])){c=\nnull;break a}c=c[\"return\"]}c.sibling[\"return\"]=c[\"return\"];for(c=c.sibling;5!==c.tag&&6!==c.tag;){if(c.effectTag&2)continue b;if(null===c.child||4===c.tag)continue b;else c.child[\"return\"]=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}for(var e=a;;){if(5===e.tag||6===e.tag)c?d?L(b,e.stateNode,c):I(b,e.stateNode,c):d?G(b,e.stateNode):z(b,e.stateNode);else if(4!==e.tag&&null!==e.child){e.child[\"return\"]=e;e=e.child;continue}if(e===a)break;for(;null===e.sibling;){if(null===e[\"return\"]||e[\"return\"]===\na)return;e=e[\"return\"]}e.sibling[\"return\"]=e[\"return\"];e=e.sibling}},commitDeletion:function(a){g(a);a[\"return\"]=null;a.child=null;a.alternate&&(a.alternate.child=null,a.alternate[\"return\"]=null)},commitWork:function(a,b){switch(b.tag){case 2:break;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps;a=null!==a?a.memoizedProps:d;var e=b.type,f=b.updateQueue;b.updateQueue=null;null!==f&&v(c,f,e,a,d,b)}break;case 6:null===b.stateNode?E(\"162\"):void 0;c=b.memoizedProps;u(b.stateNode,null!==a?a.memoizedProps:\nc,c);break;case 3:break;default:E(\"163\")}},commitLifeCycles:function(a,b){switch(b.tag){case 2:var c=b.stateNode;if(b.effectTag&4)if(null===a)c.props=b.memoizedProps,c.state=b.memoizedState,c.componentDidMount();else{var d=a.memoizedProps;a=a.memoizedState;c.props=b.memoizedProps;c.state=b.memoizedState;c.componentDidUpdate(d,a)}b=b.updateQueue;null!==b&&Ke(b,c);break;case 3:c=b.updateQueue;null!==c&&Ke(c,null!==b.child?b.child.stateNode:null);break;case 5:c=b.stateNode;null===a&&b.effectTag&4&&q(c,\nb.type,b.memoizedProps,b);break;case 6:break;case 4:break;default:E(\"163\")}},commitAttachRef:function(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:b(h(c));break;default:b(c)}}},commitDetachRef:function(a){a=a.ref;null!==a&&a(null)}}}var gf={};\nfunction hf(a){function b(a){a===gf?E(\"174\"):void 0;return a}var c=a.getChildHostContext,d=a.getRootHostContext,e={current:gf},f={current:gf},g={current:gf};return{getHostContext:function(){return b(e.current)},getRootHostContainer:function(){return b(g.current)},popHostContainer:function(a){V(e,a);V(f,a);V(g,a)},popHostContext:function(a){f.current===a&&(V(e,a),V(f,a))},pushHostContainer:function(a,b){W(g,b,a);b=d(b);W(f,a,a);W(e,b,a)},pushHostContext:function(a){var d=b(g.current),h=b(e.current);\nd=c(h,a.type,d);h!==d&&(W(f,a,a),W(e,d,a))},resetHostContainer:function(){e.current=gf;g.current=gf}}}\nfunction jf(a){function b(a,b){var c=new Y(5,null,0);c.type=\"DELETED\";c.stateNode=b;c[\"return\"]=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function c(a,b){switch(a.tag){case 5:return b=f(b,a.type,a.pendingProps),null!==b?(a.stateNode=b,!0):!1;case 6:return b=g(b,a.pendingProps),null!==b?(a.stateNode=b,!0):!1;default:return!1}}function d(a){for(a=a[\"return\"];null!==a&&5!==a.tag&&3!==a.tag;)a=a[\"return\"];y=a}var e=a.shouldSetTextContent;\na=a.hydration;if(!a)return{enterHydrationState:function(){return!1},resetHydrationState:function(){},tryToClaimNextHydratableInstance:function(){},prepareToHydrateHostInstance:function(){E(\"175\")},prepareToHydrateHostTextInstance:function(){E(\"176\")},popHydrationState:function(){return!1}};var f=a.canHydrateInstance,g=a.canHydrateTextInstance,h=a.getNextHydratableSibling,k=a.getFirstHydratableChild,q=a.hydrateInstance,v=a.hydrateTextInstance,y=null,u=null,z=!1;return{enterHydrationState:function(a){u=\nk(a.stateNode.containerInfo);y=a;return z=!0},resetHydrationState:function(){u=y=null;z=!1},tryToClaimNextHydratableInstance:function(a){if(z){var d=u;if(d){if(!c(a,d)){d=h(d);if(!d||!c(a,d)){a.effectTag|=2;z=!1;y=a;return}b(y,u)}y=a;u=k(d)}else a.effectTag|=2,z=!1,y=a}},prepareToHydrateHostInstance:function(a,b,c){b=q(a.stateNode,a.type,a.memoizedProps,b,c,a);a.updateQueue=b;return null!==b?!0:!1},prepareToHydrateHostTextInstance:function(a){return v(a.stateNode,a.memoizedProps,a)},popHydrationState:function(a){if(a!==\ny)return!1;if(!z)return d(a),z=!0,!1;var c=a.type;if(5!==a.tag||\"head\"!==c&&\"body\"!==c&&!e(c,a.memoizedProps))for(c=u;c;)b(a,c),c=h(c);d(a);u=y?h(a.stateNode):null;return!0}}}\nfunction kf(a){function b(a){Qb=ja=!0;var b=a.stateNode;b.current===a?E(\"177\"):void 0;b.isReadyForCommit=!1;id.current=null;if(1g.expirationTime)&&(f=g.expirationTime),g=g.sibling;e.expirationTime=f}if(null!==b)return b;null!==c&&(null===c.firstEffect&&(c.firstEffect=a.firstEffect),null!==a.lastEffect&&(null!==c.lastEffect&&(c.lastEffect.nextEffect=a.firstEffect),c.lastEffect=a.lastEffect),1a))if(H<=Uc)for(;null!==F;)F=k(F)?e(F):d(F);else for(;null!==F&&!A();)F=k(F)?e(F):d(F)}else if(!(0===H||H>a))if(H<=Uc)for(;null!==F;)F=d(F);else for(;null!==F&&!A();)F=d(F)}function g(a,b){ja?E(\"243\"):void 0;ja=!0;a.isReadyForCommit=\n!1;if(a!==ra||b!==H||null===F){for(;-1b)a.expirationTime=b;null!==a.alternate&&(0===a.alternate.expirationTime||a.alternate.expirationTime>b)&&(a.alternate.expirationTime=b);if(null===a[\"return\"])if(3===a.tag){var c=a.stateNode;!ja&&c===ra&&bIg&&E(\"185\");if(null===d.nextScheduledRoot)d.remainingExpirationTime=e,null===O?(sa=O=d,d.nextScheduledRoot=d):(O=O.nextScheduledRoot=d,O.nextScheduledRoot=sa);else{var f=d.remainingExpirationTime;if(0===f||eTb)return;Jg(Xc)}var b=Wc()-Pe;Tb=a;Xc=Kg(J,{timeout:10*(a-2)-b})}function N(){var a=0,b=null;if(null!==O)for(var c=O,d=sa;null!==d;){var e=d.remainingExpirationTime;if(0===e){null===c||null===O?E(\"244\"):void 0;if(d===d.nextScheduledRoot){sa=O=d.nextScheduledRoot=null;break}else if(d===sa)sa=e=d.nextScheduledRoot,\nO.nextScheduledRoot=e,d.nextScheduledRoot=null;else if(d===O){O=c;O.nextScheduledRoot=sa;d.nextScheduledRoot=null;break}else c.nextScheduledRoot=d.nextScheduledRoot,d.nextScheduledRoot=null;d=c.nextScheduledRoot}else{if(0===a||eLg?!1:Yc=!0}function Ob(a){null===ma?E(\"246\"):\nvoid 0;ma.remainingExpirationTime=0;Ub||(Ub=!0,Zc=a)}var r=hf(a),n=jf(a),p=r.popHostContainer,qg=r.popHostContext,x=r.resetHostContainer,Me=df(a,r,n,u,y),rg=Me.beginWork,Gg=Me.beginFailedWork,Fg=ef(a,r,n).completeWork;r=ff(a,h);var zg=r.commitResetTextContent,Ne=r.commitPlacement,Bg=r.commitDeletion,Oe=r.commitWork,Dg=r.commitLifeCycles,Eg=r.commitAttachRef,Ag=r.commitDetachRef,Wc=a.now,Kg=a.scheduleDeferredCallback,Jg=a.cancelDeferredCallback,Hg=a.useSyncScheduling,yg=a.prepareForCommit,Cg=a.resetAfterCommit,\nPe=Wc(),Uc=2,ka=0,ja=!1,F=null,ra=null,H=0,t=null,R=null,qa=null,ha=null,ca=null,eb=!1,Qb=!1,Sc=!1,sa=null,O=null,Tb=0,Xc=-1,Fa=!1,ma=null,na=0,Yc=!1,Ub=!1,Zc=null,fb=null,la=!1,Sb=!1,Ig=1E3,Rb=0,Lg=1;return{computeAsyncExpiration:v,computeExpirationForFiber:y,scheduleWork:u,batchedUpdates:function(a,b){var c=la;la=!0;try{return a(b)}finally{(la=c)||Fa||w(1,null)}},unbatchedUpdates:function(a){if(la&&!Sb){Sb=!0;try{return a()}finally{Sb=!1}}return a()},flushSync:function(a){var b=la;la=!0;try{a:{var c=\nka;ka=1;try{var d=a();break a}finally{ka=c}d=void 0}return d}finally{la=b,Fa?E(\"187\"):void 0,w(1,null)}},deferredUpdates:function(a){var b=ka;ka=v();try{return a()}finally{ka=b}}}}\nfunction lf(a){function b(a){a=od(a);return null===a?null:a.stateNode}var c=a.getPublicInstance;a=kf(a);var d=a.computeAsyncExpiration,e=a.computeExpirationForFiber,f=a.scheduleWork;return{createContainer:function(a,b){var c=new Y(3,null,0);a={current:c,containerInfo:a,pendingChildren:null,remainingExpirationTime:0,isReadyForCommit:!1,finishedWork:null,context:null,pendingContext:null,hydrate:b,nextScheduledRoot:null};return c.stateNode=a},updateContainer:function(a,b,c,q){var g=b.current;if(c){c=\nc._reactInternalFiber;var h;b:{2===kd(c)&&2===c.tag?void 0:E(\"170\");for(h=c;3!==h.tag;){if(le(h)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}(h=h[\"return\"])?void 0:E(\"171\")}h=h.stateNode.context}c=le(c)?pe(c,h):h}else c=D;null===b.context?b.context=c:b.pendingContext=c;b=q;b=void 0===b?null:b;q=null!=a&&null!=a.type&&null!=a.type.prototype&&!0===a.type.prototype.unstable_isAsyncReactComponent?d():e(g);He(g,{expirationTime:q,partialState:{element:a},callback:b,isReplace:!1,isForced:!1,\nnextCallback:null,next:null});f(g,q)},batchedUpdates:a.batchedUpdates,unbatchedUpdates:a.unbatchedUpdates,deferredUpdates:a.deferredUpdates,flushSync:a.flushSync,getPublicRootInstance:function(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return c(a.child.stateNode);default:return a.child.stateNode}},findHostInstance:b,findHostInstanceWithNoPortals:function(a){a=pd(a);return null===a?null:a.stateNode},injectIntoDevTools:function(a){var c=a.findFiberByHostInstance;return Ce(B({},\na,{findHostInstanceByFiber:function(a){return b(a)},findFiberByHostInstance:function(a){return c?c(a):null}}))}}}var mf=Object.freeze({default:lf}),nf=mf&&lf||mf,of=nf[\"default\"]?nf[\"default\"]:nf;function pf(a,b,c){var d=3=yf-a)if(-1!==wf&&wf<=\na)Bf.didTimeout=!0;else{xf||(xf=!0,requestAnimationFrame(Df));return}else Bf.didTimeout=!1;wf=-1;a=uf;uf=null;null!==a&&a(Bf)}},!1);var Df=function(a){xf=!1;var b=a-yf+Af;bb&&(b=8),Af=bc||d.hasOverloadedBooleanValue&&!1===c?Jf(a,b):d.mustUseProperty?a[d.propertyName]=c:(b=d.attributeName,(e=d.attributeNamespace)?a.setAttributeNS(e,b,\"\"+c):d.hasBooleanValue||d.hasOverloadedBooleanValue&&!0===c?a.setAttribute(b,\"\"):a.setAttribute(b,\"\"+c))}else Kf(a,b,va(b,c)?c:null)}\nfunction Kf(a,b,c){Hf(b)&&(null==c?a.removeAttribute(b):a.setAttribute(b,\"\"+c))}function Jf(a,b){var c=wa(b);c?(b=c.mutationMethod)?b(a,void 0):c.mustUseProperty?a[c.propertyName]=c.hasBooleanValue?!1:\"\":a.removeAttribute(c.attributeName):a.removeAttribute(b)}\nfunction Lf(a,b){var c=b.value,d=b.checked;return B({type:void 0,step:void 0,min:void 0,max:void 0},b,{defaultChecked:void 0,defaultValue:void 0,value:null!=c?c:a._wrapperState.initialValue,checked:null!=d?d:a._wrapperState.initialChecked})}function Mf(a,b){var c=b.defaultValue;a._wrapperState={initialChecked:null!=b.checked?b.checked:b.defaultChecked,initialValue:null!=b.value?b.value:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}\nfunction Nf(a,b){b=b.checked;null!=b&&If(a,\"checked\",b)}function Of(a,b){Nf(a,b);var c=b.value;if(null!=c)if(0===c&&\"\"===a.value)a.value=\"0\";else if(\"number\"===b.type){if(b=parseFloat(a.value)||0,c!=b||c==b&&a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else null==b.value&&null!=b.defaultValue&&a.defaultValue!==\"\"+b.defaultValue&&(a.defaultValue=\"\"+b.defaultValue),null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction Pf(a,b){switch(b.type){case \"submit\":case \"reset\":break;case \"color\":case \"date\":case \"datetime\":case \"datetime-local\":case \"month\":case \"time\":case \"week\":a.value=\"\";a.value=a.defaultValue;break;default:a.value=a.value}b=a.name;\"\"!==b&&(a.name=\"\");a.defaultChecked=!a.defaultChecked;a.defaultChecked=!a.defaultChecked;\"\"!==b&&(a.name=b)}function Qf(a){var b=\"\";aa.Children.forEach(a,function(a){null==a||\"string\"!==typeof a&&\"number\"!==typeof a||(b+=a)});return b}\nfunction Rf(a,b){a=B({children:void 0},b);if(b=Qf(b.children))a.children=b;return a}function Sf(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e=b.length?void 0:E(\"93\"),b=b[0]),c=\"\"+b),null==c&&(c=\"\"));a._wrapperState={initialValue:\"\"+c}}\nfunction Wf(a,b){var c=b.value;null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&(a.defaultValue=c));null!=b.defaultValue&&(a.defaultValue=b.defaultValue)}function Xf(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a.value=b)}var Yf={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Zf(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function $f(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Zf(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar ag=void 0,bg=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Yf.svg||\"innerHTML\"in a)a.innerHTML=b;else{ag=ag||document.createElement(\"div\");ag.innerHTML=\"\\x3csvg\\x3e\"+b+\"\\x3c/svg\\x3e\";for(b=ag.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction cg(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar dg={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,\nstopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},eg=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(dg).forEach(function(a){eg.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);dg[b]=dg[a]})});\nfunction fg(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\");var e=c;var f=b[c];e=null==f||\"boolean\"===typeof f||\"\"===f?\"\":d||\"number\"!==typeof f||0===f||dg.hasOwnProperty(e)&&dg[e]?(\"\"+f).trim():f+\"px\";\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var gg=B({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction hg(a,b,c){b&&(gg[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML?E(\"137\",a,c()):void 0),null!=b.dangerouslySetInnerHTML&&(null!=b.children?E(\"60\"):void 0,\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML?void 0:E(\"61\")),null!=b.style&&\"object\"!==typeof b.style?E(\"62\",c()):void 0)}\nfunction ig(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var jg=Yf.html,kg=C.thatReturns(\"\");\nfunction lg(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=Hd(a);b=Sa[b];for(var d=0;d\nd&&(e=d,d=a,a=e);e=Jd(c,a);var f=Jd(c,d);if(e&&f&&(1!==b.rangeCount||b.anchorNode!==e.node||b.anchorOffset!==e.offset||b.focusNode!==f.node||b.focusOffset!==f.offset)){var g=document.createRange();g.setStart(e.node,e.offset);b.removeAllRanges();a>d?(b.addRange(g),b.extend(f.node,f.offset)):(g.setEnd(f.node,f.offset),b.addRange(g))}}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});ia(c);for(c=0;c does not support changing `store` on the fly. ' + 'It is most likely that you see this error because you updated to ' + 'Redux 2.x and React Redux 2.x which no longer hot reload reducers ' + 'automatically. See https://github.com/reactjs/react-redux/releases/' + 'tag/v2.0.0 for the migration instructions.');\n}\n\nfunction createProvider() {\n var _Provider$childContex;\n\n var storeKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'store';\n var subKey = arguments[1];\n\n var subscriptionKey = subKey || storeKey + 'Subscription';\n\n var Provider = function (_Component) {\n _inherits(Provider, _Component);\n\n Provider.prototype.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[storeKey] = this[storeKey], _ref[subscriptionKey] = null, _ref;\n };\n\n function Provider(props, context) {\n _classCallCheck(this, Provider);\n\n var _this = _possibleConstructorReturn(this, _Component.call(this, props, context));\n\n _this[storeKey] = props.store;\n return _this;\n }\n\n Provider.prototype.render = function render() {\n return __WEBPACK_IMPORTED_MODULE_0_react__[\"Children\"].only(this.props.children);\n };\n\n return Provider;\n }(__WEBPACK_IMPORTED_MODULE_0_react__[\"Component\"]);\n\n if (false) {\n Provider.prototype.componentWillReceiveProps = function (nextProps) {\n if (this[storeKey] !== nextProps.store) {\n warnAboutReceivingStore();\n }\n };\n }\n\n Provider.propTypes = {\n store: __WEBPACK_IMPORTED_MODULE_2__utils_PropTypes__[\"a\" /* storeShape */].isRequired,\n children: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.element.isRequired\n };\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[storeKey] = __WEBPACK_IMPORTED_MODULE_2__utils_PropTypes__[\"a\" /* storeShape */].isRequired, _Provider$childContex[subscriptionKey] = __WEBPACK_IMPORTED_MODULE_2__utils_PropTypes__[\"b\" /* subscriptionShape */], _Provider$childContex);\n\n return Provider;\n}\n\n/* harmony default export */ __webpack_exports__[\"b\"] = (createProvider());\n\n/***/ }),\n/* 416 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar emptyFunction = __webpack_require__(83);\nvar invariant = __webpack_require__(417);\nvar ReactPropTypesSecret = __webpack_require__(418);\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n invariant(\n false,\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim\n };\n\n ReactPropTypes.checkPropTypes = emptyFunction;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n\n\n/***/ }),\n/* 417 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function validateFormat(format) {};\n\nif (false) {\n validateFormat = function validateFormat(format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n\n/***/ }),\n/* 418 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n/***/ }),\n/* 419 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Subscription; });\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nvar CLEARED = null;\nvar nullListeners = {\n notify: function notify() {}\n};\n\nfunction createListenerCollection() {\n // the current/next pattern is copied from redux's createStore code.\n // TODO: refactor+expose that code to be reusable here?\n var current = [];\n var next = [];\n\n return {\n clear: function clear() {\n next = CLEARED;\n current = CLEARED;\n },\n notify: function notify() {\n var listeners = current = next;\n for (var i = 0; i < listeners.length; i++) {\n listeners[i]();\n }\n },\n get: function get() {\n return next;\n },\n subscribe: function subscribe(listener) {\n var isSubscribed = true;\n if (next === current) next = current.slice();\n next.push(listener);\n\n return function unsubscribe() {\n if (!isSubscribed || current === CLEARED) return;\n isSubscribed = false;\n\n if (next === current) next = current.slice();\n next.splice(next.indexOf(listener), 1);\n };\n }\n };\n}\n\nvar Subscription = function () {\n function Subscription(store, parentSub, onStateChange) {\n _classCallCheck(this, Subscription);\n\n this.store = store;\n this.parentSub = parentSub;\n this.onStateChange = onStateChange;\n this.unsubscribe = null;\n this.listeners = nullListeners;\n }\n\n Subscription.prototype.addNestedSub = function addNestedSub(listener) {\n this.trySubscribe();\n return this.listeners.subscribe(listener);\n };\n\n Subscription.prototype.notifyNestedSubs = function notifyNestedSubs() {\n this.listeners.notify();\n };\n\n Subscription.prototype.isSubscribed = function isSubscribed() {\n return Boolean(this.unsubscribe);\n };\n\n Subscription.prototype.trySubscribe = function trySubscribe() {\n if (!this.unsubscribe) {\n this.unsubscribe = this.parentSub ? this.parentSub.addNestedSub(this.onStateChange) : this.store.subscribe(this.onStateChange);\n\n this.listeners = createListenerCollection();\n }\n };\n\n Subscription.prototype.tryUnsubscribe = function tryUnsubscribe() {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n this.listeners.clear();\n this.listeners = nullListeners;\n }\n };\n\n return Subscription;\n}();\n\n\n\n/***/ }),\n/* 420 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export createConnect */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_connectAdvanced__ = __webpack_require__(167);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_shallowEqual__ = __webpack_require__(421);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__mapDispatchToProps__ = __webpack_require__(422);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__mapStateToProps__ = __webpack_require__(437);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__mergeProps__ = __webpack_require__(438);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__selectorFactory__ = __webpack_require__(439);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\n\n\n\n\n\n\n\n/*\n connect is a facade over connectAdvanced. It turns its args into a compatible\n selectorFactory, which has the signature:\n\n (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps\n \n connect passes its args to connectAdvanced as options, which will in turn pass them to\n selectorFactory each time a Connect component instance is instantiated or hot reloaded.\n\n selectorFactory returns a final props selector from its mapStateToProps,\n mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,\n mergePropsFactories, and pure args.\n\n The resulting final props selector is called by the Connect component instance whenever\n it receives new props or store state.\n */\n\nfunction match(arg, factories, name) {\n for (var i = factories.length - 1; i >= 0; i--) {\n var result = factories[i](arg);\n if (result) return result;\n }\n\n return function (dispatch, options) {\n throw new Error('Invalid value of type ' + typeof arg + ' for ' + name + ' argument when connecting component ' + options.wrappedComponentName + '.');\n };\n}\n\nfunction strictEqual(a, b) {\n return a === b;\n}\n\n// createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\nfunction createConnect() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$connectHOC = _ref.connectHOC,\n connectHOC = _ref$connectHOC === undefined ? __WEBPACK_IMPORTED_MODULE_0__components_connectAdvanced__[\"a\" /* default */] : _ref$connectHOC,\n _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n mapStateToPropsFactories = _ref$mapStateToPropsF === undefined ? __WEBPACK_IMPORTED_MODULE_3__mapStateToProps__[\"a\" /* default */] : _ref$mapStateToPropsF,\n _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n mapDispatchToPropsFactories = _ref$mapDispatchToPro === undefined ? __WEBPACK_IMPORTED_MODULE_2__mapDispatchToProps__[\"a\" /* default */] : _ref$mapDispatchToPro,\n _ref$mergePropsFactor = _ref.mergePropsFactories,\n mergePropsFactories = _ref$mergePropsFactor === undefined ? __WEBPACK_IMPORTED_MODULE_4__mergeProps__[\"a\" /* default */] : _ref$mergePropsFactor,\n _ref$selectorFactory = _ref.selectorFactory,\n selectorFactory = _ref$selectorFactory === undefined ? __WEBPACK_IMPORTED_MODULE_5__selectorFactory__[\"a\" /* default */] : _ref$selectorFactory;\n\n return function connect(mapStateToProps, mapDispatchToProps, mergeProps) {\n var _ref2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref2$pure = _ref2.pure,\n pure = _ref2$pure === undefined ? true : _ref2$pure,\n _ref2$areStatesEqual = _ref2.areStatesEqual,\n areStatesEqual = _ref2$areStatesEqual === undefined ? strictEqual : _ref2$areStatesEqual,\n _ref2$areOwnPropsEqua = _ref2.areOwnPropsEqual,\n areOwnPropsEqual = _ref2$areOwnPropsEqua === undefined ? __WEBPACK_IMPORTED_MODULE_1__utils_shallowEqual__[\"a\" /* default */] : _ref2$areOwnPropsEqua,\n _ref2$areStatePropsEq = _ref2.areStatePropsEqual,\n areStatePropsEqual = _ref2$areStatePropsEq === undefined ? __WEBPACK_IMPORTED_MODULE_1__utils_shallowEqual__[\"a\" /* default */] : _ref2$areStatePropsEq,\n _ref2$areMergedPropsE = _ref2.areMergedPropsEqual,\n areMergedPropsEqual = _ref2$areMergedPropsE === undefined ? __WEBPACK_IMPORTED_MODULE_1__utils_shallowEqual__[\"a\" /* default */] : _ref2$areMergedPropsE,\n extraOptions = _objectWithoutProperties(_ref2, ['pure', 'areStatesEqual', 'areOwnPropsEqual', 'areStatePropsEqual', 'areMergedPropsEqual']);\n\n var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');\n var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');\n var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');\n\n return connectHOC(selectorFactory, _extends({\n // used in error messages\n methodName: 'connect',\n\n // used to compute Connect's displayName from the wrapped component's displayName.\n getDisplayName: function getDisplayName(name) {\n return 'Connect(' + name + ')';\n },\n\n // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n shouldHandleStateChanges: Boolean(mapStateToProps),\n\n // passed through to selectorFactory\n initMapStateToProps: initMapStateToProps,\n initMapDispatchToProps: initMapDispatchToProps,\n initMergeProps: initMergeProps,\n pure: pure,\n areStatesEqual: areStatesEqual,\n areOwnPropsEqual: areOwnPropsEqual,\n areStatePropsEqual: areStatePropsEqual,\n areMergedPropsEqual: areMergedPropsEqual\n\n }, extraOptions));\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (createConnect());\n\n/***/ }),\n/* 421 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = shallowEqual;\nvar hasOwn = Object.prototype.hasOwnProperty;\n\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) return true;\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) return false;\n\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwn.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n\n/***/ }),\n/* 422 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export whenMapDispatchToPropsIsFunction */\n/* unused harmony export whenMapDispatchToPropsIsMissing */\n/* unused harmony export whenMapDispatchToPropsIsObject */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_redux__ = __webpack_require__(116);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__wrapMapToProps__ = __webpack_require__(173);\n\n\n\nfunction whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n return typeof mapDispatchToProps === 'function' ? Object(__WEBPACK_IMPORTED_MODULE_1__wrapMapToProps__[\"b\" /* wrapMapToPropsFunc */])(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\n\nfunction whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n return !mapDispatchToProps ? Object(__WEBPACK_IMPORTED_MODULE_1__wrapMapToProps__[\"a\" /* wrapMapToPropsConstant */])(function (dispatch) {\n return { dispatch: dispatch };\n }) : undefined;\n}\n\nfunction whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? Object(__WEBPACK_IMPORTED_MODULE_1__wrapMapToProps__[\"a\" /* wrapMapToPropsConstant */])(function (dispatch) {\n return Object(__WEBPACK_IMPORTED_MODULE_0_redux__[\"bindActionCreators\"])(mapDispatchToProps, dispatch);\n }) : undefined;\n}\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ([whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject]);\n\n/***/ }),\n/* 423 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Symbol_js__ = __webpack_require__(170);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__getRawTag_js__ = __webpack_require__(426);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__objectToString_js__ = __webpack_require__(427);\n\n\n\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = __WEBPACK_IMPORTED_MODULE_0__Symbol_js__[\"a\" /* default */] ? __WEBPACK_IMPORTED_MODULE_0__Symbol_js__[\"a\" /* default */].toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? Object(__WEBPACK_IMPORTED_MODULE_1__getRawTag_js__[\"a\" /* default */])(value)\n : Object(__WEBPACK_IMPORTED_MODULE_2__objectToString_js__[\"a\" /* default */])(value);\n}\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (baseGetTag);\n\n\n/***/ }),\n/* 424 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__freeGlobal_js__ = __webpack_require__(425);\n\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = __WEBPACK_IMPORTED_MODULE_0__freeGlobal_js__[\"a\" /* default */] || freeSelf || Function('return this')();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (root);\n\n\n/***/ }),\n/* 425 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (freeGlobal);\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(62)))\n\n/***/ }),\n/* 426 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Symbol_js__ = __webpack_require__(170);\n\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = __WEBPACK_IMPORTED_MODULE_0__Symbol_js__[\"a\" /* default */] ? __WEBPACK_IMPORTED_MODULE_0__Symbol_js__[\"a\" /* default */].toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (getRawTag);\n\n\n/***/ }),\n/* 427 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (objectToString);\n\n\n/***/ }),\n/* 428 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__overArg_js__ = __webpack_require__(429);\n\n\n/** Built-in value references. */\nvar getPrototype = Object(__WEBPACK_IMPORTED_MODULE_0__overArg_js__[\"a\" /* default */])(Object.getPrototypeOf, Object);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (getPrototype);\n\n\n/***/ }),\n/* 429 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (overArg);\n\n\n/***/ }),\n/* 430 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (isObjectLike);\n\n\n/***/ }),\n/* 431 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global, module) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ponyfill_js__ = __webpack_require__(433);\n/* global window */\n\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (true) {\n root = module;\n} else {\n root = Function('return this')();\n}\n\nvar result = Object(__WEBPACK_IMPORTED_MODULE_0__ponyfill_js__[\"a\" /* default */])(root);\n/* harmony default export */ __webpack_exports__[\"a\"] = (result);\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(62), __webpack_require__(432)(module)))\n\n/***/ }),\n/* 432 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(originalModule) {\r\n\tif(!originalModule.webpackPolyfill) {\r\n\t\tvar module = Object.create(originalModule);\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"exports\", {\r\n\t\t\tenumerable: true,\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n\n/***/ }),\n/* 433 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = symbolObservablePonyfill;\nfunction symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n\n\n/***/ }),\n/* 434 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = combineReducers;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__createStore__ = __webpack_require__(169);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_es_isPlainObject__ = __webpack_require__(117);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_warning__ = __webpack_require__(171);\n\n\n\n\nfunction getUndefinedStateErrorMessage(key, action) {\n var actionType = action && action.type;\n var actionName = actionType && '\"' + actionType.toString() + '\"' || 'an action';\n\n return 'Given action ' + actionName + ', reducer \"' + key + '\" returned undefined. ' + 'To ignore an action, you must explicitly return the previous state. ' + 'If you want this reducer to hold no value, you can return null instead of undefined.';\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === __WEBPACK_IMPORTED_MODULE_0__createStore__[\"a\" /* ActionTypes */].INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!Object(__WEBPACK_IMPORTED_MODULE_1_lodash_es_isPlainObject__[\"a\" /* default */])(inputState)) {\n return 'The ' + argumentName + ' has unexpected type of \"' + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + '\". Expected argument to be an object with the following ' + ('keys: \"' + reducerKeys.join('\", \"') + '\"');\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n\n if (unexpectedKeys.length > 0) {\n return 'Unexpected ' + (unexpectedKeys.length > 1 ? 'keys' : 'key') + ' ' + ('\"' + unexpectedKeys.join('\", \"') + '\" found in ' + argumentName + '. ') + 'Expected to find one of the known reducer keys instead: ' + ('\"' + reducerKeys.join('\", \"') + '\". Unexpected keys will be ignored.');\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, { type: __WEBPACK_IMPORTED_MODULE_0__createStore__[\"a\" /* ActionTypes */].INIT });\n\n if (typeof initialState === 'undefined') {\n throw new Error('Reducer \"' + key + '\" returned undefined during initialization. ' + 'If the state passed to the reducer is undefined, you must ' + 'explicitly return the initial state. The initial state may ' + 'not be undefined. If you don\\'t want to set a value for this reducer, ' + 'you can use null instead of undefined.');\n }\n\n var type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7).split('').join('.');\n if (typeof reducer(undefined, { type: type }) === 'undefined') {\n throw new Error('Reducer \"' + key + '\" returned undefined when probed with a random type. ' + ('Don\\'t try to handle ' + __WEBPACK_IMPORTED_MODULE_0__createStore__[\"a\" /* ActionTypes */].INIT + ' or other actions in \"redux/*\" ') + 'namespace. They are considered private. Instead, you must return the ' + 'current state for any unknown actions, unless it is undefined, ' + 'in which case you must return the initial state, regardless of the ' + 'action type. The initial state may not be undefined, but can be null.');\n }\n });\n}\n\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (false) {\n if (typeof reducers[key] === 'undefined') {\n warning('No reducer provided for key \"' + key + '\"');\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n var finalReducerKeys = Object.keys(finalReducers);\n\n var unexpectedKeyCache = void 0;\n if (false) {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError = void 0;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var action = arguments[1];\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (false) {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === 'undefined') {\n var errorMessage = getUndefinedStateErrorMessage(_key, action);\n throw new Error(errorMessage);\n }\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n return hasChanged ? nextState : state;\n };\n}\n\n/***/ }),\n/* 435 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = bindActionCreators;\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(undefined, arguments));\n };\n}\n\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass a single function as the first argument,\n * and get a function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error('bindActionCreators expected an object or a function, instead received ' + (actionCreators === null ? 'null' : typeof actionCreators) + '. ' + 'Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?');\n }\n\n var keys = Object.keys(actionCreators);\n var boundActionCreators = {};\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var actionCreator = actionCreators[key];\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\n}\n\n/***/ }),\n/* 436 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = applyMiddleware;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__compose__ = __webpack_require__(172);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function (reducer, preloadedState, enhancer) {\n var store = createStore(reducer, preloadedState, enhancer);\n var _dispatch = store.dispatch;\n var chain = [];\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch(action) {\n return _dispatch(action);\n }\n };\n chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = __WEBPACK_IMPORTED_MODULE_0__compose__[\"a\" /* default */].apply(undefined, chain)(store.dispatch);\n\n return _extends({}, store, {\n dispatch: _dispatch\n });\n };\n };\n}\n\n/***/ }),\n/* 437 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export whenMapStateToPropsIsFunction */\n/* unused harmony export whenMapStateToPropsIsMissing */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__wrapMapToProps__ = __webpack_require__(173);\n\n\nfunction whenMapStateToPropsIsFunction(mapStateToProps) {\n return typeof mapStateToProps === 'function' ? Object(__WEBPACK_IMPORTED_MODULE_0__wrapMapToProps__[\"b\" /* wrapMapToPropsFunc */])(mapStateToProps, 'mapStateToProps') : undefined;\n}\n\nfunction whenMapStateToPropsIsMissing(mapStateToProps) {\n return !mapStateToProps ? Object(__WEBPACK_IMPORTED_MODULE_0__wrapMapToProps__[\"a\" /* wrapMapToPropsConstant */])(function () {\n return {};\n }) : undefined;\n}\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ([whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing]);\n\n/***/ }),\n/* 438 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export defaultMergeProps */\n/* unused harmony export wrapMergePropsFunc */\n/* unused harmony export whenMergePropsIsFunction */\n/* unused harmony export whenMergePropsIsOmitted */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_verifyPlainObject__ = __webpack_require__(174);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\nfunction defaultMergeProps(stateProps, dispatchProps, ownProps) {\n return _extends({}, ownProps, stateProps, dispatchProps);\n}\n\nfunction wrapMergePropsFunc(mergeProps) {\n return function initMergePropsProxy(dispatch, _ref) {\n var displayName = _ref.displayName,\n pure = _ref.pure,\n areMergedPropsEqual = _ref.areMergedPropsEqual;\n\n var hasRunOnce = false;\n var mergedProps = void 0;\n\n return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n if (hasRunOnce) {\n if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n } else {\n hasRunOnce = true;\n mergedProps = nextMergedProps;\n\n if (false) verifyPlainObject(mergedProps, displayName, 'mergeProps');\n }\n\n return mergedProps;\n };\n };\n}\n\nfunction whenMergePropsIsFunction(mergeProps) {\n return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\n\nfunction whenMergePropsIsOmitted(mergeProps) {\n return !mergeProps ? function () {\n return defaultMergeProps;\n } : undefined;\n}\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ([whenMergePropsIsFunction, whenMergePropsIsOmitted]);\n\n/***/ }),\n/* 439 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export impureFinalPropsSelectorFactory */\n/* unused harmony export pureFinalPropsSelectorFactory */\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = finalPropsSelectorFactory;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__verifySubselectors__ = __webpack_require__(440);\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\n\n\nfunction impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {\n return function impureFinalPropsSelector(state, ownProps) {\n return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);\n };\n}\n\nfunction pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n var areStatesEqual = _ref.areStatesEqual,\n areOwnPropsEqual = _ref.areOwnPropsEqual,\n areStatePropsEqual = _ref.areStatePropsEqual;\n\n var hasRunAtLeastOnce = false;\n var state = void 0;\n var ownProps = void 0;\n var stateProps = void 0;\n var dispatchProps = void 0;\n var mergedProps = void 0;\n\n function handleFirstCall(firstState, firstOwnProps) {\n state = firstState;\n ownProps = firstOwnProps;\n stateProps = mapStateToProps(state, ownProps);\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n hasRunAtLeastOnce = true;\n return mergedProps;\n }\n\n function handleNewPropsAndNewState() {\n stateProps = mapStateToProps(state, ownProps);\n\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewProps() {\n if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewState() {\n var nextStateProps = mapStateToProps(state, ownProps);\n var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n stateProps = nextStateProps;\n\n if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n return mergedProps;\n }\n\n function handleSubsequentCalls(nextState, nextOwnProps) {\n var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n var stateChanged = !areStatesEqual(nextState, state);\n state = nextState;\n ownProps = nextOwnProps;\n\n if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n if (propsChanged) return handleNewProps();\n if (stateChanged) return handleNewState();\n return mergedProps;\n }\n\n return function pureFinalPropsSelector(nextState, nextOwnProps) {\n return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n };\n}\n\n// TODO: Add more comments\n\n// If pure is true, the selector returned by selectorFactory will memoize its results,\n// allowing connectAdvanced's shouldComponentUpdate to return false if final\n// props have not changed. If false, the selector will always return a new\n// object and shouldComponentUpdate will always return true.\n\nfunction finalPropsSelectorFactory(dispatch, _ref2) {\n var initMapStateToProps = _ref2.initMapStateToProps,\n initMapDispatchToProps = _ref2.initMapDispatchToProps,\n initMergeProps = _ref2.initMergeProps,\n options = _objectWithoutProperties(_ref2, ['initMapStateToProps', 'initMapDispatchToProps', 'initMergeProps']);\n\n var mapStateToProps = initMapStateToProps(dispatch, options);\n var mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n var mergeProps = initMergeProps(dispatch, options);\n\n if (false) {\n verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);\n }\n\n var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;\n\n return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}\n\n/***/ }),\n/* 440 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export default */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_warning__ = __webpack_require__(115);\n\n\nfunction verify(selector, methodName, displayName) {\n if (!selector) {\n throw new Error('Unexpected value for ' + methodName + ' in ' + displayName + '.');\n } else if (methodName === 'mapStateToProps' || methodName === 'mapDispatchToProps') {\n if (!selector.hasOwnProperty('dependsOnOwnProps')) {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils_warning__[\"a\" /* default */])('The selector for ' + methodName + ' of ' + displayName + ' did not specify a value for dependsOnOwnProps.');\n }\n }\n}\n\nfunction verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, displayName) {\n verify(mapStateToProps, 'mapStateToProps', displayName);\n verify(mapDispatchToProps, 'mapDispatchToProps', displayName);\n verify(mergeProps, 'mergeProps', displayName);\n}\n\n/***/ }),\n/* 441 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_warning__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_prop_types__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_history_createBrowserHistory__ = __webpack_require__(442);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_history_createBrowserHistory___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_history_createBrowserHistory__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__Router__ = __webpack_require__(120);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n\n/**\n * The public API for a that uses HTML5 history.\n */\n\nvar BrowserRouter = function (_React$Component) {\n _inherits(BrowserRouter, _React$Component);\n\n function BrowserRouter() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, BrowserRouter);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.history = __WEBPACK_IMPORTED_MODULE_3_history_createBrowserHistory___default()(_this.props), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n BrowserRouter.prototype.componentWillMount = function componentWillMount() {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(!this.props.history, ' ignores the history prop. To use a custom history, ' + 'use `import { Router }` instead of `import { BrowserRouter as Router }`.');\n };\n\n BrowserRouter.prototype.render = function render() {\n return __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_4__Router__[\"a\" /* default */], { history: this.history, children: this.props.children });\n };\n\n return BrowserRouter;\n}(__WEBPACK_IMPORTED_MODULE_1_react___default.a.Component);\n\nBrowserRouter.propTypes = {\n basename: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.string,\n forceRefresh: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.bool,\n getUserConfirmation: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.func,\n keyLength: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.number,\n children: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.node\n};\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (BrowserRouter);\n\n/***/ }),\n/* 442 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _warning = __webpack_require__(13);\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _invariant = __webpack_require__(22);\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _LocationUtils = __webpack_require__(118);\n\nvar _PathUtils = __webpack_require__(66);\n\nvar _createTransitionManager = __webpack_require__(119);\n\nvar _createTransitionManager2 = _interopRequireDefault(_createTransitionManager);\n\nvar _DOMUtils = __webpack_require__(177);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nvar getHistoryState = function getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n};\n\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\nvar createBrowserHistory = function createBrowserHistory() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n (0, _invariant2.default)(_DOMUtils.canUseDOM, 'Browser history needs a DOM');\n\n var globalHistory = window.history;\n var canUseHistory = (0, _DOMUtils.supportsHistory)();\n var needsHashChangeListener = !(0, _DOMUtils.supportsPopStateOnHashChange)();\n\n var _props$forceRefresh = props.forceRefresh,\n forceRefresh = _props$forceRefresh === undefined ? false : _props$forceRefresh,\n _props$getUserConfirm = props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === undefined ? _DOMUtils.getConfirmation : _props$getUserConfirm,\n _props$keyLength = props.keyLength,\n keyLength = _props$keyLength === undefined ? 6 : _props$keyLength;\n\n var basename = props.basename ? (0, _PathUtils.stripTrailingSlash)((0, _PathUtils.addLeadingSlash)(props.basename)) : '';\n\n var getDOMLocation = function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n\n\n var path = pathname + search + hash;\n\n (0, _warning2.default)(!basename || (0, _PathUtils.hasBasename)(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".');\n\n if (basename) path = (0, _PathUtils.stripBasename)(path, basename);\n\n return (0, _LocationUtils.createLocation)(path, state, key);\n };\n\n var createKey = function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n };\n\n var transitionManager = (0, _createTransitionManager2.default)();\n\n var setState = function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n\n transitionManager.notifyListeners(history.location, history.action);\n };\n\n var handlePopState = function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if ((0, _DOMUtils.isExtraneousPopstateEvent)(event)) return;\n\n handlePop(getDOMLocation(event.state));\n };\n\n var handleHashChange = function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n };\n\n var forceNextPop = false;\n\n var handlePop = function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({ action: action, location: location });\n } else {\n revertPop(location);\n }\n });\n }\n };\n\n var revertPop = function revertPop(fromLocation) {\n var toLocation = history.location;\n\n // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n\n if (toIndex === -1) toIndex = 0;\n\n var fromIndex = allKeys.indexOf(fromLocation.key);\n\n if (fromIndex === -1) fromIndex = 0;\n\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n };\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key];\n\n // Public interface\n\n var createHref = function createHref(location) {\n return basename + (0, _PathUtils.createPath)(location);\n };\n\n var push = function push(path, state) {\n (0, _warning2.default)(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'PUSH';\n var location = (0, _LocationUtils.createLocation)(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n\n if (canUseHistory) {\n globalHistory.pushState({ key: key, state: state }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);\n\n nextKeys.push(location.key);\n allKeys = nextKeys;\n\n setState({ action: action, location: location });\n }\n } else {\n (0, _warning2.default)(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history');\n\n window.location.href = href;\n }\n });\n };\n\n var replace = function replace(path, state) {\n (0, _warning2.default)(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'REPLACE';\n var location = (0, _LocationUtils.createLocation)(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n\n if (canUseHistory) {\n globalHistory.replaceState({ key: key, state: state }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n\n setState({ action: action, location: location });\n }\n } else {\n (0, _warning2.default)(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history');\n\n window.location.replace(href);\n }\n });\n };\n\n var go = function go(n) {\n globalHistory.go(n);\n };\n\n var goBack = function goBack() {\n return go(-1);\n };\n\n var goForward = function goForward() {\n return go(1);\n };\n\n var listenerCount = 0;\n\n var checkDOMListeners = function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1) {\n (0, _DOMUtils.addEventListener)(window, PopStateEvent, handlePopState);\n\n if (needsHashChangeListener) (0, _DOMUtils.addEventListener)(window, HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n (0, _DOMUtils.removeEventListener)(window, PopStateEvent, handlePopState);\n\n if (needsHashChangeListener) (0, _DOMUtils.removeEventListener)(window, HashChangeEvent, handleHashChange);\n }\n };\n\n var isBlocked = false;\n\n var block = function block() {\n var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n };\n\n var listen = function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n };\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n\n return history;\n};\n\nexports.default = createBrowserHistory;\n\n/***/ }),\n/* 443 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_warning__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_prop_types__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_history_createHashHistory__ = __webpack_require__(444);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_history_createHashHistory___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_history_createHashHistory__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__Router__ = __webpack_require__(120);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n\n/**\n * The public API for a that uses window.location.hash.\n */\n\nvar HashRouter = function (_React$Component) {\n _inherits(HashRouter, _React$Component);\n\n function HashRouter() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, HashRouter);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.history = __WEBPACK_IMPORTED_MODULE_3_history_createHashHistory___default()(_this.props), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n HashRouter.prototype.componentWillMount = function componentWillMount() {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(!this.props.history, ' ignores the history prop. To use a custom history, ' + 'use `import { Router }` instead of `import { HashRouter as Router }`.');\n };\n\n HashRouter.prototype.render = function render() {\n return __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_4__Router__[\"a\" /* default */], { history: this.history, children: this.props.children });\n };\n\n return HashRouter;\n}(__WEBPACK_IMPORTED_MODULE_1_react___default.a.Component);\n\nHashRouter.propTypes = {\n basename: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.string,\n getUserConfirmation: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.func,\n hashType: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.oneOf(['hashbang', 'noslash', 'slash']),\n children: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.node\n};\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (HashRouter);\n\n/***/ }),\n/* 444 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _warning = __webpack_require__(13);\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _invariant = __webpack_require__(22);\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _LocationUtils = __webpack_require__(118);\n\nvar _PathUtils = __webpack_require__(66);\n\nvar _createTransitionManager = __webpack_require__(119);\n\nvar _createTransitionManager2 = _interopRequireDefault(_createTransitionManager);\n\nvar _DOMUtils = __webpack_require__(177);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar HashChangeEvent = 'hashchange';\n\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + (0, _PathUtils.stripLeadingSlash)(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: _PathUtils.stripLeadingSlash,\n decodePath: _PathUtils.addLeadingSlash\n },\n slash: {\n encodePath: _PathUtils.addLeadingSlash,\n decodePath: _PathUtils.addLeadingSlash\n }\n};\n\nvar getHashPath = function getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n};\n\nvar pushHashPath = function pushHashPath(path) {\n return window.location.hash = path;\n};\n\nvar replaceHashPath = function replaceHashPath(path) {\n var hashIndex = window.location.href.indexOf('#');\n\n window.location.replace(window.location.href.slice(0, hashIndex >= 0 ? hashIndex : 0) + '#' + path);\n};\n\nvar createHashHistory = function createHashHistory() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n (0, _invariant2.default)(_DOMUtils.canUseDOM, 'Hash history needs a DOM');\n\n var globalHistory = window.history;\n var canGoWithoutReload = (0, _DOMUtils.supportsGoWithoutReloadUsingHash)();\n\n var _props$getUserConfirm = props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === undefined ? _DOMUtils.getConfirmation : _props$getUserConfirm,\n _props$hashType = props.hashType,\n hashType = _props$hashType === undefined ? 'slash' : _props$hashType;\n\n var basename = props.basename ? (0, _PathUtils.stripTrailingSlash)((0, _PathUtils.addLeadingSlash)(props.basename)) : '';\n\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n\n var getDOMLocation = function getDOMLocation() {\n var path = decodePath(getHashPath());\n\n (0, _warning2.default)(!basename || (0, _PathUtils.hasBasename)(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".');\n\n if (basename) path = (0, _PathUtils.stripBasename)(path, basename);\n\n return (0, _LocationUtils.createLocation)(path);\n };\n\n var transitionManager = (0, _createTransitionManager2.default)();\n\n var setState = function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n\n transitionManager.notifyListeners(history.location, history.action);\n };\n\n var forceNextPop = false;\n var ignorePath = null;\n\n var handleHashChange = function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n\n if (!forceNextPop && (0, _LocationUtils.locationsAreEqual)(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === (0, _PathUtils.createPath)(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n\n handlePop(location);\n }\n };\n\n var handlePop = function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({ action: action, location: location });\n } else {\n revertPop(location);\n }\n });\n }\n };\n\n var revertPop = function revertPop(fromLocation) {\n var toLocation = history.location;\n\n // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf((0, _PathUtils.createPath)(toLocation));\n\n if (toIndex === -1) toIndex = 0;\n\n var fromIndex = allPaths.lastIndexOf((0, _PathUtils.createPath)(fromLocation));\n\n if (fromIndex === -1) fromIndex = 0;\n\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n };\n\n // Ensure the hash is encoded properly before doing anything else.\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) replaceHashPath(encodedPath);\n\n var initialLocation = getDOMLocation();\n var allPaths = [(0, _PathUtils.createPath)(initialLocation)];\n\n // Public interface\n\n var createHref = function createHref(location) {\n return '#' + encodePath(basename + (0, _PathUtils.createPath)(location));\n };\n\n var push = function push(path, state) {\n (0, _warning2.default)(state === undefined, 'Hash history cannot push state; it is ignored');\n\n var action = 'PUSH';\n var location = (0, _LocationUtils.createLocation)(path, undefined, undefined, history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var path = (0, _PathUtils.createPath)(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n\n var prevIndex = allPaths.lastIndexOf((0, _PathUtils.createPath)(history.location));\n var nextPaths = allPaths.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);\n\n nextPaths.push(path);\n allPaths = nextPaths;\n\n setState({ action: action, location: location });\n } else {\n (0, _warning2.default)(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack');\n\n setState();\n }\n });\n };\n\n var replace = function replace(path, state) {\n (0, _warning2.default)(state === undefined, 'Hash history cannot replace state; it is ignored');\n\n var action = 'REPLACE';\n var location = (0, _LocationUtils.createLocation)(path, undefined, undefined, history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var path = (0, _PathUtils.createPath)(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf((0, _PathUtils.createPath)(history.location));\n\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n\n setState({ action: action, location: location });\n });\n };\n\n var go = function go(n) {\n (0, _warning2.default)(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser');\n\n globalHistory.go(n);\n };\n\n var goBack = function goBack() {\n return go(-1);\n };\n\n var goForward = function goForward() {\n return go(1);\n };\n\n var listenerCount = 0;\n\n var checkDOMListeners = function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1) {\n (0, _DOMUtils.addEventListener)(window, HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n (0, _DOMUtils.removeEventListener)(window, HashChangeEvent, handleHashChange);\n }\n };\n\n var isBlocked = false;\n\n var block = function block() {\n var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n };\n\n var listen = function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n };\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n\n return history;\n};\n\nexports.default = createHashHistory;\n\n/***/ }),\n/* 445 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_router_es_MemoryRouter__ = __webpack_require__(446);\n// Written in this round about way for babel-transform-imports\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0_react_router_es_MemoryRouter__[\"a\" /* default */]);\n\n/***/ }),\n/* 446 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_warning__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_prop_types__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_history_createMemoryHistory__ = __webpack_require__(447);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_history_createMemoryHistory___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_history_createMemoryHistory__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__Router__ = __webpack_require__(121);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n\n/**\n * The public API for a that stores location in memory.\n */\n\nvar MemoryRouter = function (_React$Component) {\n _inherits(MemoryRouter, _React$Component);\n\n function MemoryRouter() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, MemoryRouter);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.history = __WEBPACK_IMPORTED_MODULE_3_history_createMemoryHistory___default()(_this.props), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n MemoryRouter.prototype.componentWillMount = function componentWillMount() {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(!this.props.history, ' ignores the history prop. To use a custom history, ' + 'use `import { Router }` instead of `import { MemoryRouter as Router }`.');\n };\n\n MemoryRouter.prototype.render = function render() {\n return __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_4__Router__[\"a\" /* default */], { history: this.history, children: this.props.children });\n };\n\n return MemoryRouter;\n}(__WEBPACK_IMPORTED_MODULE_1_react___default.a.Component);\n\nMemoryRouter.propTypes = {\n initialEntries: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.array,\n initialIndex: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.number,\n getUserConfirmation: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.func,\n keyLength: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.number,\n children: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.node\n};\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (MemoryRouter);\n\n/***/ }),\n/* 447 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _warning = __webpack_require__(13);\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _PathUtils = __webpack_require__(66);\n\nvar _LocationUtils = __webpack_require__(118);\n\nvar _createTransitionManager = __webpack_require__(119);\n\nvar _createTransitionManager2 = _interopRequireDefault(_createTransitionManager);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar clamp = function clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n};\n\n/**\n * Creates a history object that stores locations in memory.\n */\nvar createMemoryHistory = function createMemoryHistory() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var getUserConfirmation = props.getUserConfirmation,\n _props$initialEntries = props.initialEntries,\n initialEntries = _props$initialEntries === undefined ? ['/'] : _props$initialEntries,\n _props$initialIndex = props.initialIndex,\n initialIndex = _props$initialIndex === undefined ? 0 : _props$initialIndex,\n _props$keyLength = props.keyLength,\n keyLength = _props$keyLength === undefined ? 6 : _props$keyLength;\n\n\n var transitionManager = (0, _createTransitionManager2.default)();\n\n var setState = function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n\n transitionManager.notifyListeners(history.location, history.action);\n };\n\n var createKey = function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n };\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? (0, _LocationUtils.createLocation)(entry, undefined, createKey()) : (0, _LocationUtils.createLocation)(entry, undefined, entry.key || createKey());\n });\n\n // Public interface\n\n var createHref = _PathUtils.createPath;\n\n var push = function push(path, state) {\n (0, _warning2.default)(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'PUSH';\n var location = (0, _LocationUtils.createLocation)(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n\n var nextEntries = history.entries.slice(0);\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n };\n\n var replace = function replace(path, state) {\n (0, _warning2.default)(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'REPLACE';\n var location = (0, _LocationUtils.createLocation)(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n history.entries[history.index] = location;\n\n setState({ action: action, location: location });\n });\n };\n\n var go = function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n\n var action = 'POP';\n var location = history.entries[nextIndex];\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n };\n\n var goBack = function goBack() {\n return go(-1);\n };\n\n var goForward = function goForward() {\n return go(1);\n };\n\n var canGo = function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n };\n\n var block = function block() {\n var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n return transitionManager.setPrompt(prompt);\n };\n\n var listen = function listen(listener) {\n return transitionManager.appendListener(listener);\n };\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n\n return history;\n};\n\nexports.default = createMemoryHistory;\n\n/***/ }),\n/* 448 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Route__ = __webpack_require__(179);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Link__ = __webpack_require__(178);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\n\n\n\n\n\n/**\n * A wrapper that knows if it's \"active\" or not.\n */\nvar NavLink = function NavLink(_ref) {\n var to = _ref.to,\n exact = _ref.exact,\n strict = _ref.strict,\n location = _ref.location,\n activeClassName = _ref.activeClassName,\n className = _ref.className,\n activeStyle = _ref.activeStyle,\n style = _ref.style,\n getIsActive = _ref.isActive,\n ariaCurrent = _ref.ariaCurrent,\n rest = _objectWithoutProperties(_ref, ['to', 'exact', 'strict', 'location', 'activeClassName', 'className', 'activeStyle', 'style', 'isActive', 'ariaCurrent']);\n\n return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2__Route__[\"a\" /* default */], {\n path: (typeof to === 'undefined' ? 'undefined' : _typeof(to)) === 'object' ? to.pathname : to,\n exact: exact,\n strict: strict,\n location: location,\n children: function children(_ref2) {\n var location = _ref2.location,\n match = _ref2.match;\n\n var isActive = !!(getIsActive ? getIsActive(match, location) : match);\n\n return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_3__Link__[\"a\" /* default */], _extends({\n to: to,\n className: isActive ? [className, activeClassName].filter(function (i) {\n return i;\n }).join(' ') : className,\n style: isActive ? _extends({}, style, activeStyle) : style,\n 'aria-current': isActive && ariaCurrent\n }, rest));\n }\n });\n};\n\nNavLink.propTypes = {\n to: __WEBPACK_IMPORTED_MODULE_3__Link__[\"a\" /* default */].propTypes.to,\n exact: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool,\n strict: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool,\n location: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object,\n activeClassName: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string,\n className: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string,\n activeStyle: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object,\n style: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object,\n isActive: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func,\n ariaCurrent: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf(['page', 'step', 'location', 'true'])\n};\n\nNavLink.defaultProps = {\n activeClassName: 'active',\n ariaCurrent: 'true'\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (NavLink);\n\n/***/ }),\n/* 449 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isarray = __webpack_require__(450)\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = options && options.delimiter || '/'\n var res\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n continue\n }\n\n var next = str[index]\n var prefix = res[2]\n var name = res[3]\n var capture = res[4]\n var group = res[5]\n var modifier = res[6]\n var asterisk = res[7]\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n }\n\n var partial = prefix != null && next != null && next !== prefix\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var delimiter = res[2] || defaultDelimiter\n var pattern = capture || group\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n })\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index)\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path)\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options))\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$')\n }\n }\n\n return function (obj, opts) {\n var path = ''\n var data = obj || {}\n var options = opts || {}\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n\n continue\n }\n\n var value = data[token.name]\n var segment\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j])\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n })\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n var strict = options.strict\n var end = options.end !== false\n var route = ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var prefix = escapeString(token.prefix)\n var capture = '(?:' + token.pattern + ')'\n\n keys.push(token)\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*'\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?'\n } else {\n capture = prefix + '(' + capture + ')?'\n }\n } else {\n capture = prefix + '(' + capture + ')'\n }\n\n route += capture\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/')\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n }\n\n if (end) {\n route += '$'\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n\n\n/***/ }),\n/* 450 */\n/***/ (function(module, exports) {\n\nmodule.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n\n/***/ }),\n/* 451 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_router_es_Prompt__ = __webpack_require__(452);\n// Written in this round about way for babel-transform-imports\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0_react_router_es_Prompt__[\"a\" /* default */]);\n\n/***/ }),\n/* 452 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_invariant__ = __webpack_require__(22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_invariant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_invariant__);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n/**\n * The public API for prompting the user before navigating away\n * from a screen with a component.\n */\n\nvar Prompt = function (_React$Component) {\n _inherits(Prompt, _React$Component);\n\n function Prompt() {\n _classCallCheck(this, Prompt);\n\n return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n Prompt.prototype.enable = function enable(message) {\n if (this.unblock) this.unblock();\n\n this.unblock = this.context.router.history.block(message);\n };\n\n Prompt.prototype.disable = function disable() {\n if (this.unblock) {\n this.unblock();\n this.unblock = null;\n }\n };\n\n Prompt.prototype.componentWillMount = function componentWillMount() {\n __WEBPACK_IMPORTED_MODULE_2_invariant___default()(this.context.router, 'You should not use outside a ');\n\n if (this.props.when) this.enable(this.props.message);\n };\n\n Prompt.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (nextProps.when) {\n if (!this.props.when || this.props.message !== nextProps.message) this.enable(nextProps.message);\n } else {\n this.disable();\n }\n };\n\n Prompt.prototype.componentWillUnmount = function componentWillUnmount() {\n this.disable();\n };\n\n Prompt.prototype.render = function render() {\n return null;\n };\n\n return Prompt;\n}(__WEBPACK_IMPORTED_MODULE_0_react___default.a.Component);\n\nPrompt.propTypes = {\n when: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool,\n message: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([__WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string]).isRequired\n};\nPrompt.defaultProps = {\n when: true\n};\nPrompt.contextTypes = {\n router: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.shape({\n history: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.shape({\n block: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func.isRequired\n }).isRequired\n }).isRequired\n};\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Prompt);\n\n/***/ }),\n/* 453 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_router_es_Redirect__ = __webpack_require__(454);\n// Written in this round about way for babel-transform-imports\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0_react_router_es_Redirect__[\"a\" /* default */]);\n\n/***/ }),\n/* 454 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_warning__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_warning___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_warning__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_invariant__ = __webpack_require__(22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_invariant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_invariant__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_history__ = __webpack_require__(455);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n\n/**\n * The public API for updating the location programmatically\n * with a component.\n */\n\nvar Redirect = function (_React$Component) {\n _inherits(Redirect, _React$Component);\n\n function Redirect() {\n _classCallCheck(this, Redirect);\n\n return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n Redirect.prototype.isStatic = function isStatic() {\n return this.context.router && this.context.router.staticContext;\n };\n\n Redirect.prototype.componentWillMount = function componentWillMount() {\n __WEBPACK_IMPORTED_MODULE_3_invariant___default()(this.context.router, 'You should not use outside a ');\n\n if (this.isStatic()) this.perform();\n };\n\n Redirect.prototype.componentDidMount = function componentDidMount() {\n if (!this.isStatic()) this.perform();\n };\n\n Redirect.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {\n var prevTo = Object(__WEBPACK_IMPORTED_MODULE_4_history__[\"a\" /* createLocation */])(prevProps.to);\n var nextTo = Object(__WEBPACK_IMPORTED_MODULE_4_history__[\"a\" /* createLocation */])(this.props.to);\n\n if (Object(__WEBPACK_IMPORTED_MODULE_4_history__[\"b\" /* locationsAreEqual */])(prevTo, nextTo)) {\n __WEBPACK_IMPORTED_MODULE_2_warning___default()(false, 'You tried to redirect to the same route you\\'re currently on: ' + ('\"' + nextTo.pathname + nextTo.search + '\"'));\n return;\n }\n\n this.perform();\n };\n\n Redirect.prototype.perform = function perform() {\n var history = this.context.router.history;\n var _props = this.props,\n push = _props.push,\n to = _props.to;\n\n\n if (push) {\n history.push(to);\n } else {\n history.replace(to);\n }\n };\n\n Redirect.prototype.render = function render() {\n return null;\n };\n\n return Redirect;\n}(__WEBPACK_IMPORTED_MODULE_0_react___default.a.Component);\n\nRedirect.propTypes = {\n push: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool,\n from: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string,\n to: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([__WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object]).isRequired\n};\nRedirect.defaultProps = {\n push: false\n};\nRedirect.contextTypes = {\n router: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.shape({\n history: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.shape({\n push: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func.isRequired,\n replace: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func.isRequired\n }).isRequired,\n staticContext: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object\n }).isRequired\n};\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Redirect);\n\n/***/ }),\n/* 455 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__createBrowserHistory__ = __webpack_require__(456);\n/* unused harmony reexport createBrowserHistory */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__createHashHistory__ = __webpack_require__(457);\n/* unused harmony reexport createHashHistory */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__createMemoryHistory__ = __webpack_require__(458);\n/* unused harmony reexport createMemoryHistory */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__LocationUtils__ = __webpack_require__(84);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_3__LocationUtils__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return __WEBPACK_IMPORTED_MODULE_3__LocationUtils__[\"b\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__PathUtils__ = __webpack_require__(67);\n/* unused harmony reexport parsePath */\n/* unused harmony reexport createPath */\n\n\n\n\n\n\n\n\n\n\n/***/ }),\n/* 456 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_warning__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant__ = __webpack_require__(22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_invariant__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__LocationUtils__ = __webpack_require__(84);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__PathUtils__ = __webpack_require__(67);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__createTransitionManager__ = __webpack_require__(123);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__DOMUtils__ = __webpack_require__(181);\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\n\n\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nvar getHistoryState = function getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n};\n\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\nvar createBrowserHistory = function createBrowserHistory() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n __WEBPACK_IMPORTED_MODULE_1_invariant___default()(__WEBPACK_IMPORTED_MODULE_5__DOMUtils__[\"b\" /* canUseDOM */], 'Browser history needs a DOM');\n\n var globalHistory = window.history;\n var canUseHistory = Object(__WEBPACK_IMPORTED_MODULE_5__DOMUtils__[\"g\" /* supportsHistory */])();\n var needsHashChangeListener = !Object(__WEBPACK_IMPORTED_MODULE_5__DOMUtils__[\"h\" /* supportsPopStateOnHashChange */])();\n\n var _props$forceRefresh = props.forceRefresh,\n forceRefresh = _props$forceRefresh === undefined ? false : _props$forceRefresh,\n _props$getUserConfirm = props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === undefined ? __WEBPACK_IMPORTED_MODULE_5__DOMUtils__[\"c\" /* getConfirmation */] : _props$getUserConfirm,\n _props$keyLength = props.keyLength,\n keyLength = _props$keyLength === undefined ? 6 : _props$keyLength;\n\n var basename = props.basename ? Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"g\" /* stripTrailingSlash */])(Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"a\" /* addLeadingSlash */])(props.basename)) : '';\n\n var getDOMLocation = function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n\n\n var path = pathname + search + hash;\n\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(!basename || Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"c\" /* hasBasename */])(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".');\n\n if (basename) path = Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"e\" /* stripBasename */])(path, basename);\n\n return Object(__WEBPACK_IMPORTED_MODULE_2__LocationUtils__[\"a\" /* createLocation */])(path, state, key);\n };\n\n var createKey = function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n };\n\n var transitionManager = Object(__WEBPACK_IMPORTED_MODULE_4__createTransitionManager__[\"a\" /* default */])();\n\n var setState = function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n\n transitionManager.notifyListeners(history.location, history.action);\n };\n\n var handlePopState = function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (Object(__WEBPACK_IMPORTED_MODULE_5__DOMUtils__[\"d\" /* isExtraneousPopstateEvent */])(event)) return;\n\n handlePop(getDOMLocation(event.state));\n };\n\n var handleHashChange = function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n };\n\n var forceNextPop = false;\n\n var handlePop = function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({ action: action, location: location });\n } else {\n revertPop(location);\n }\n });\n }\n };\n\n var revertPop = function revertPop(fromLocation) {\n var toLocation = history.location;\n\n // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n\n if (toIndex === -1) toIndex = 0;\n\n var fromIndex = allKeys.indexOf(fromLocation.key);\n\n if (fromIndex === -1) fromIndex = 0;\n\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n };\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key];\n\n // Public interface\n\n var createHref = function createHref(location) {\n return basename + Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"b\" /* createPath */])(location);\n };\n\n var push = function push(path, state) {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'PUSH';\n var location = Object(__WEBPACK_IMPORTED_MODULE_2__LocationUtils__[\"a\" /* createLocation */])(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n\n if (canUseHistory) {\n globalHistory.pushState({ key: key, state: state }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);\n\n nextKeys.push(location.key);\n allKeys = nextKeys;\n\n setState({ action: action, location: location });\n }\n } else {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history');\n\n window.location.href = href;\n }\n });\n };\n\n var replace = function replace(path, state) {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'REPLACE';\n var location = Object(__WEBPACK_IMPORTED_MODULE_2__LocationUtils__[\"a\" /* createLocation */])(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n\n if (canUseHistory) {\n globalHistory.replaceState({ key: key, state: state }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n\n setState({ action: action, location: location });\n }\n } else {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history');\n\n window.location.replace(href);\n }\n });\n };\n\n var go = function go(n) {\n globalHistory.go(n);\n };\n\n var goBack = function goBack() {\n return go(-1);\n };\n\n var goForward = function goForward() {\n return go(1);\n };\n\n var listenerCount = 0;\n\n var checkDOMListeners = function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1) {\n Object(__WEBPACK_IMPORTED_MODULE_5__DOMUtils__[\"a\" /* addEventListener */])(window, PopStateEvent, handlePopState);\n\n if (needsHashChangeListener) Object(__WEBPACK_IMPORTED_MODULE_5__DOMUtils__[\"a\" /* addEventListener */])(window, HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n Object(__WEBPACK_IMPORTED_MODULE_5__DOMUtils__[\"e\" /* removeEventListener */])(window, PopStateEvent, handlePopState);\n\n if (needsHashChangeListener) Object(__WEBPACK_IMPORTED_MODULE_5__DOMUtils__[\"e\" /* removeEventListener */])(window, HashChangeEvent, handleHashChange);\n }\n };\n\n var isBlocked = false;\n\n var block = function block() {\n var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n };\n\n var listen = function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n };\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n\n return history;\n};\n\n/* unused harmony default export */ var _unused_webpack_default_export = (createBrowserHistory);\n\n/***/ }),\n/* 457 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_warning__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant__ = __webpack_require__(22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_invariant__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__LocationUtils__ = __webpack_require__(84);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__PathUtils__ = __webpack_require__(67);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__createTransitionManager__ = __webpack_require__(123);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__DOMUtils__ = __webpack_require__(181);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\n\n\n\nvar HashChangeEvent = 'hashchange';\n\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"f\" /* stripLeadingSlash */])(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: __WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"f\" /* stripLeadingSlash */],\n decodePath: __WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"a\" /* addLeadingSlash */]\n },\n slash: {\n encodePath: __WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"a\" /* addLeadingSlash */],\n decodePath: __WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"a\" /* addLeadingSlash */]\n }\n};\n\nvar getHashPath = function getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n};\n\nvar pushHashPath = function pushHashPath(path) {\n return window.location.hash = path;\n};\n\nvar replaceHashPath = function replaceHashPath(path) {\n var hashIndex = window.location.href.indexOf('#');\n\n window.location.replace(window.location.href.slice(0, hashIndex >= 0 ? hashIndex : 0) + '#' + path);\n};\n\nvar createHashHistory = function createHashHistory() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n __WEBPACK_IMPORTED_MODULE_1_invariant___default()(__WEBPACK_IMPORTED_MODULE_5__DOMUtils__[\"b\" /* canUseDOM */], 'Hash history needs a DOM');\n\n var globalHistory = window.history;\n var canGoWithoutReload = Object(__WEBPACK_IMPORTED_MODULE_5__DOMUtils__[\"f\" /* supportsGoWithoutReloadUsingHash */])();\n\n var _props$getUserConfirm = props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === undefined ? __WEBPACK_IMPORTED_MODULE_5__DOMUtils__[\"c\" /* getConfirmation */] : _props$getUserConfirm,\n _props$hashType = props.hashType,\n hashType = _props$hashType === undefined ? 'slash' : _props$hashType;\n\n var basename = props.basename ? Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"g\" /* stripTrailingSlash */])(Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"a\" /* addLeadingSlash */])(props.basename)) : '';\n\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n\n var getDOMLocation = function getDOMLocation() {\n var path = decodePath(getHashPath());\n\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(!basename || Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"c\" /* hasBasename */])(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".');\n\n if (basename) path = Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"e\" /* stripBasename */])(path, basename);\n\n return Object(__WEBPACK_IMPORTED_MODULE_2__LocationUtils__[\"a\" /* createLocation */])(path);\n };\n\n var transitionManager = Object(__WEBPACK_IMPORTED_MODULE_4__createTransitionManager__[\"a\" /* default */])();\n\n var setState = function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n\n transitionManager.notifyListeners(history.location, history.action);\n };\n\n var forceNextPop = false;\n var ignorePath = null;\n\n var handleHashChange = function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n\n if (!forceNextPop && Object(__WEBPACK_IMPORTED_MODULE_2__LocationUtils__[\"b\" /* locationsAreEqual */])(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"b\" /* createPath */])(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n\n handlePop(location);\n }\n };\n\n var handlePop = function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({ action: action, location: location });\n } else {\n revertPop(location);\n }\n });\n }\n };\n\n var revertPop = function revertPop(fromLocation) {\n var toLocation = history.location;\n\n // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"b\" /* createPath */])(toLocation));\n\n if (toIndex === -1) toIndex = 0;\n\n var fromIndex = allPaths.lastIndexOf(Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"b\" /* createPath */])(fromLocation));\n\n if (fromIndex === -1) fromIndex = 0;\n\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n };\n\n // Ensure the hash is encoded properly before doing anything else.\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) replaceHashPath(encodedPath);\n\n var initialLocation = getDOMLocation();\n var allPaths = [Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"b\" /* createPath */])(initialLocation)];\n\n // Public interface\n\n var createHref = function createHref(location) {\n return '#' + encodePath(basename + Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"b\" /* createPath */])(location));\n };\n\n var push = function push(path, state) {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(state === undefined, 'Hash history cannot push state; it is ignored');\n\n var action = 'PUSH';\n var location = Object(__WEBPACK_IMPORTED_MODULE_2__LocationUtils__[\"a\" /* createLocation */])(path, undefined, undefined, history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var path = Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"b\" /* createPath */])(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n\n var prevIndex = allPaths.lastIndexOf(Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"b\" /* createPath */])(history.location));\n var nextPaths = allPaths.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);\n\n nextPaths.push(path);\n allPaths = nextPaths;\n\n setState({ action: action, location: location });\n } else {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack');\n\n setState();\n }\n });\n };\n\n var replace = function replace(path, state) {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(state === undefined, 'Hash history cannot replace state; it is ignored');\n\n var action = 'REPLACE';\n var location = Object(__WEBPACK_IMPORTED_MODULE_2__LocationUtils__[\"a\" /* createLocation */])(path, undefined, undefined, history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var path = Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"b\" /* createPath */])(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(Object(__WEBPACK_IMPORTED_MODULE_3__PathUtils__[\"b\" /* createPath */])(history.location));\n\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n\n setState({ action: action, location: location });\n });\n };\n\n var go = function go(n) {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser');\n\n globalHistory.go(n);\n };\n\n var goBack = function goBack() {\n return go(-1);\n };\n\n var goForward = function goForward() {\n return go(1);\n };\n\n var listenerCount = 0;\n\n var checkDOMListeners = function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1) {\n Object(__WEBPACK_IMPORTED_MODULE_5__DOMUtils__[\"a\" /* addEventListener */])(window, HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n Object(__WEBPACK_IMPORTED_MODULE_5__DOMUtils__[\"e\" /* removeEventListener */])(window, HashChangeEvent, handleHashChange);\n }\n };\n\n var isBlocked = false;\n\n var block = function block() {\n var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n };\n\n var listen = function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n };\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n\n return history;\n};\n\n/* unused harmony default export */ var _unused_webpack_default_export = (createHashHistory);\n\n/***/ }),\n/* 458 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_warning__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__PathUtils__ = __webpack_require__(67);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__LocationUtils__ = __webpack_require__(84);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__createTransitionManager__ = __webpack_require__(123);\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\n\nvar clamp = function clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n};\n\n/**\n * Creates a history object that stores locations in memory.\n */\nvar createMemoryHistory = function createMemoryHistory() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var getUserConfirmation = props.getUserConfirmation,\n _props$initialEntries = props.initialEntries,\n initialEntries = _props$initialEntries === undefined ? ['/'] : _props$initialEntries,\n _props$initialIndex = props.initialIndex,\n initialIndex = _props$initialIndex === undefined ? 0 : _props$initialIndex,\n _props$keyLength = props.keyLength,\n keyLength = _props$keyLength === undefined ? 6 : _props$keyLength;\n\n\n var transitionManager = Object(__WEBPACK_IMPORTED_MODULE_3__createTransitionManager__[\"a\" /* default */])();\n\n var setState = function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n\n transitionManager.notifyListeners(history.location, history.action);\n };\n\n var createKey = function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n };\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? Object(__WEBPACK_IMPORTED_MODULE_2__LocationUtils__[\"a\" /* createLocation */])(entry, undefined, createKey()) : Object(__WEBPACK_IMPORTED_MODULE_2__LocationUtils__[\"a\" /* createLocation */])(entry, undefined, entry.key || createKey());\n });\n\n // Public interface\n\n var createHref = __WEBPACK_IMPORTED_MODULE_1__PathUtils__[\"b\" /* createPath */];\n\n var push = function push(path, state) {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'PUSH';\n var location = Object(__WEBPACK_IMPORTED_MODULE_2__LocationUtils__[\"a\" /* createLocation */])(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n\n var nextEntries = history.entries.slice(0);\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n };\n\n var replace = function replace(path, state) {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'REPLACE';\n var location = Object(__WEBPACK_IMPORTED_MODULE_2__LocationUtils__[\"a\" /* createLocation */])(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n history.entries[history.index] = location;\n\n setState({ action: action, location: location });\n });\n };\n\n var go = function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n\n var action = 'POP';\n var location = history.entries[nextIndex];\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n };\n\n var goBack = function goBack() {\n return go(-1);\n };\n\n var goForward = function goForward() {\n return go(1);\n };\n\n var canGo = function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n };\n\n var block = function block() {\n var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n return transitionManager.setPrompt(prompt);\n };\n\n var listen = function listen(listener) {\n return transitionManager.appendListener(listener);\n };\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n\n return history;\n};\n\n/* unused harmony default export */ var _unused_webpack_default_export = (createMemoryHistory);\n\n/***/ }),\n/* 459 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_router_es_StaticRouter__ = __webpack_require__(460);\n// Written in this round about way for babel-transform-imports\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0_react_router_es_StaticRouter__[\"a\" /* default */]);\n\n/***/ }),\n/* 460 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_warning___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_warning__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant__ = __webpack_require__(22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_invariant__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_prop_types__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_prop_types__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_history_PathUtils__ = __webpack_require__(66);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_history_PathUtils___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_history_PathUtils__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__Router__ = __webpack_require__(121);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n\n\nvar normalizeLocation = function normalizeLocation(object) {\n var _object$pathname = object.pathname,\n pathname = _object$pathname === undefined ? '/' : _object$pathname,\n _object$search = object.search,\n search = _object$search === undefined ? '' : _object$search,\n _object$hash = object.hash,\n hash = _object$hash === undefined ? '' : _object$hash;\n\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n};\n\nvar addBasename = function addBasename(basename, location) {\n if (!basename) return location;\n\n return _extends({}, location, {\n pathname: Object(__WEBPACK_IMPORTED_MODULE_4_history_PathUtils__[\"addLeadingSlash\"])(basename) + location.pathname\n });\n};\n\nvar stripBasename = function stripBasename(basename, location) {\n if (!basename) return location;\n\n var base = Object(__WEBPACK_IMPORTED_MODULE_4_history_PathUtils__[\"addLeadingSlash\"])(basename);\n\n if (location.pathname.indexOf(base) !== 0) return location;\n\n return _extends({}, location, {\n pathname: location.pathname.substr(base.length)\n });\n};\n\nvar createLocation = function createLocation(location) {\n return typeof location === 'string' ? Object(__WEBPACK_IMPORTED_MODULE_4_history_PathUtils__[\"parsePath\"])(location) : normalizeLocation(location);\n};\n\nvar createURL = function createURL(location) {\n return typeof location === 'string' ? location : Object(__WEBPACK_IMPORTED_MODULE_4_history_PathUtils__[\"createPath\"])(location);\n};\n\nvar staticHandler = function staticHandler(methodName) {\n return function () {\n __WEBPACK_IMPORTED_MODULE_1_invariant___default()(false, 'You cannot %s with ', methodName);\n };\n};\n\nvar noop = function noop() {};\n\n/**\n * The public top-level API for a \"static\" , so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\n\nvar StaticRouter = function (_React$Component) {\n _inherits(StaticRouter, _React$Component);\n\n function StaticRouter() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, StaticRouter);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.createHref = function (path) {\n return Object(__WEBPACK_IMPORTED_MODULE_4_history_PathUtils__[\"addLeadingSlash\"])(_this.props.basename + createURL(path));\n }, _this.handlePush = function (location) {\n var _this$props = _this.props,\n basename = _this$props.basename,\n context = _this$props.context;\n\n context.action = 'PUSH';\n context.location = addBasename(basename, createLocation(location));\n context.url = createURL(context.location);\n }, _this.handleReplace = function (location) {\n var _this$props2 = _this.props,\n basename = _this$props2.basename,\n context = _this$props2.context;\n\n context.action = 'REPLACE';\n context.location = addBasename(basename, createLocation(location));\n context.url = createURL(context.location);\n }, _this.handleListen = function () {\n return noop;\n }, _this.handleBlock = function () {\n return noop;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n StaticRouter.prototype.getChildContext = function getChildContext() {\n return {\n router: {\n staticContext: this.props.context\n }\n };\n };\n\n StaticRouter.prototype.componentWillMount = function componentWillMount() {\n __WEBPACK_IMPORTED_MODULE_0_warning___default()(!this.props.history, ' ignores the history prop. To use a custom history, ' + 'use `import { Router }` instead of `import { StaticRouter as Router }`.');\n };\n\n StaticRouter.prototype.render = function render() {\n var _props = this.props,\n basename = _props.basename,\n context = _props.context,\n location = _props.location,\n props = _objectWithoutProperties(_props, ['basename', 'context', 'location']);\n\n var history = {\n createHref: this.createHref,\n action: 'POP',\n location: stripBasename(basename, createLocation(location)),\n push: this.handlePush,\n replace: this.handleReplace,\n go: staticHandler('go'),\n goBack: staticHandler('goBack'),\n goForward: staticHandler('goForward'),\n listen: this.handleListen,\n block: this.handleBlock\n };\n\n return __WEBPACK_IMPORTED_MODULE_2_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_5__Router__[\"a\" /* default */], _extends({}, props, { history: history }));\n };\n\n return StaticRouter;\n}(__WEBPACK_IMPORTED_MODULE_2_react___default.a.Component);\n\nStaticRouter.propTypes = {\n basename: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.string,\n context: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.object.isRequired,\n location: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.oneOfType([__WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.object])\n};\nStaticRouter.defaultProps = {\n basename: '',\n location: '/'\n};\nStaticRouter.childContextTypes = {\n router: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.object.isRequired\n};\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (StaticRouter);\n\n/***/ }),\n/* 461 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_router_es_Switch__ = __webpack_require__(462);\n// Written in this round about way for babel-transform-imports\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0_react_router_es_Switch__[\"a\" /* default */]);\n\n/***/ }),\n/* 462 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_warning__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_warning___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_warning__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_invariant__ = __webpack_require__(22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_invariant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_invariant__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__matchPath__ = __webpack_require__(122);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n\n/**\n * The public API for rendering the first that matches.\n */\n\nvar Switch = function (_React$Component) {\n _inherits(Switch, _React$Component);\n\n function Switch() {\n _classCallCheck(this, Switch);\n\n return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n Switch.prototype.componentWillMount = function componentWillMount() {\n __WEBPACK_IMPORTED_MODULE_3_invariant___default()(this.context.router, 'You should not use outside a ');\n };\n\n Switch.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n __WEBPACK_IMPORTED_MODULE_2_warning___default()(!(nextProps.location && !this.props.location), ' elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.');\n\n __WEBPACK_IMPORTED_MODULE_2_warning___default()(!(!nextProps.location && this.props.location), ' elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.');\n };\n\n Switch.prototype.render = function render() {\n var route = this.context.router.route;\n var children = this.props.children;\n\n var location = this.props.location || route.location;\n\n var match = void 0,\n child = void 0;\n __WEBPACK_IMPORTED_MODULE_0_react___default.a.Children.forEach(children, function (element) {\n if (!__WEBPACK_IMPORTED_MODULE_0_react___default.a.isValidElement(element)) return;\n\n var _element$props = element.props,\n pathProp = _element$props.path,\n exact = _element$props.exact,\n strict = _element$props.strict,\n sensitive = _element$props.sensitive,\n from = _element$props.from;\n\n var path = pathProp || from;\n\n if (match == null) {\n child = element;\n match = path ? Object(__WEBPACK_IMPORTED_MODULE_4__matchPath__[\"a\" /* default */])(location.pathname, { path: path, exact: exact, strict: strict, sensitive: sensitive }) : route.match;\n }\n });\n\n return match ? __WEBPACK_IMPORTED_MODULE_0_react___default.a.cloneElement(child, { location: location, computedMatch: match }) : null;\n };\n\n return Switch;\n}(__WEBPACK_IMPORTED_MODULE_0_react___default.a.Component);\n\nSwitch.contextTypes = {\n router: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.shape({\n route: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object.isRequired\n }).isRequired\n};\nSwitch.propTypes = {\n children: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.node,\n location: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object\n};\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Switch);\n\n/***/ }),\n/* 463 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_router_es_matchPath__ = __webpack_require__(122);\n// Written in this round about way for babel-transform-imports\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0_react_router_es_matchPath__[\"a\" /* default */]);\n\n/***/ }),\n/* 464 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_router_es_withRouter__ = __webpack_require__(465);\n// Written in this round about way for babel-transform-imports\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0_react_router_es_withRouter__[\"a\" /* default */]);\n\n/***/ }),\n/* 465 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_hoist_non_react_statics__ = __webpack_require__(168);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_hoist_non_react_statics___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_hoist_non_react_statics__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Route__ = __webpack_require__(180);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\n\n\n\n\n\n/**\n * A public higher-order component to access the imperative API\n */\nvar withRouter = function withRouter(Component) {\n var C = function C(props) {\n var wrappedComponentRef = props.wrappedComponentRef,\n remainingProps = _objectWithoutProperties(props, ['wrappedComponentRef']);\n\n return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_3__Route__[\"a\" /* default */], { render: function render(routeComponentProps) {\n return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(Component, _extends({}, remainingProps, routeComponentProps, { ref: wrappedComponentRef }));\n } });\n };\n\n C.displayName = 'withRouter(' + (Component.displayName || Component.name) + ')';\n C.WrappedComponent = Component;\n C.propTypes = {\n wrappedComponentRef: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func\n };\n\n return __WEBPACK_IMPORTED_MODULE_2_hoist_non_react_statics___default()(C, Component);\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (withRouter);\n\n/***/ }),\n/* 466 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _redux = __webpack_require__(116);\n\nvar _publish = __webpack_require__(467);\n\nvar _publish2 = _interopRequireDefault(_publish);\n\nvar _channel = __webpack_require__(468);\n\nvar _channel2 = _interopRequireDefault(_channel);\n\nvar _show = __webpack_require__(469);\n\nvar _show2 = _interopRequireDefault(_show);\n\nvar _site = __webpack_require__(470);\n\nvar _site2 = _interopRequireDefault(_site);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = (0, _redux.combineReducers)({\n channel: _channel2.default,\n publish: _publish2.default,\n show: _show2.default,\n site: _site2.default\n});\n\n/***/ }),\n/* 467 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n case actions.FILE_SELECTED:\n return Object.assign({}, initialState, { // note: clears to initial state\n file: action.data\n });\n case actions.FILE_CLEAR:\n return initialState;\n case actions.METADATA_UPDATE:\n return Object.assign({}, state, {\n metadata: Object.assign({}, state.metadata, _defineProperty({}, action.data.name, action.data.value))\n });\n case actions.CLAIM_UPDATE:\n return Object.assign({}, state, {\n claim: action.data\n });\n case actions.SET_PUBLISH_IN_CHANNEL:\n return Object.assign({}, state, {\n publishInChannel: action.channel\n });\n case actions.PUBLISH_STATUS_UPDATE:\n return Object.assign({}, state, {\n status: action.data\n });\n case actions.ERROR_UPDATE:\n return Object.assign({}, state, {\n error: Object.assign({}, state.error, _defineProperty({}, action.data.name, action.data.value))\n });\n case actions.SELECTED_CHANNEL_UPDATE:\n return Object.assign({}, state, {\n selectedChannel: action.data\n });\n case actions.TOGGLE_METADATA_INPUTS:\n return Object.assign({}, state, {\n showMetadataInputs: action.data\n });\n case actions.THUMBNAIL_NEW:\n return Object.assign({}, state, {\n thumbnail: action.data\n });\n default:\n return state;\n }\n};\n\nvar _publish_action_types = __webpack_require__(124);\n\nvar actions = _interopRequireWildcard(_publish_action_types);\n\nvar _publish_channel_select_states = __webpack_require__(182);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _require = __webpack_require__(125),\n publishing = _require.publishing;\n\nvar initialState = {\n disabled: publishing.disabled,\n disabledMessage: publishing.disabledMessage,\n publishInChannel: false,\n selectedChannel: _publish_channel_select_states.LOGIN,\n showMetadataInputs: false,\n status: {\n status: null,\n message: null\n },\n error: {\n file: null,\n url: null,\n channel: null,\n publishSubmit: null\n },\n file: null,\n claim: '',\n metadata: {\n title: '',\n description: '',\n license: '',\n nsfw: false\n },\n thumbnail: null\n};\n\n/***/ }),\n/* 468 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n case actions.CHANNEL_UPDATE:\n return Object.assign({}, state, {\n loggedInChannel: action.data\n });\n default:\n return state;\n }\n};\n\nvar _channel_action_types = __webpack_require__(183);\n\nvar actions = _interopRequireWildcard(_channel_action_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar initialState = {\n loggedInChannel: {\n name: null,\n shortId: null,\n longId: null\n }\n};\n\n/***/ }),\n/* 469 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n // handle request\n case actions.REQUEST_ERROR:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n error: action.data\n })\n });\n case actions.REQUEST_UPDATE:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n type: action.data.requestType,\n id: action.data.requestId\n })\n });\n // store requests\n case actions.REQUEST_LIST_ADD:\n return Object.assign({}, state, {\n requestList: Object.assign({}, state.requestList, _defineProperty({}, action.data.id, {\n error: action.data.error,\n key: action.data.key\n }))\n });\n // asset data\n case actions.ASSET_ADD:\n return Object.assign({}, state, {\n assetList: Object.assign({}, state.assetList, _defineProperty({}, action.data.id, {\n error: action.data.error,\n name: action.data.name,\n claimId: action.data.claimId,\n shortId: action.data.shortId,\n claimData: action.data.claimData\n }))\n });\n // channel data\n case actions.CHANNEL_ADD:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.id, {\n name: action.data.name,\n longId: action.data.longId,\n shortId: action.data.shortId,\n claimsData: action.data.claimsData\n }))\n });\n case actions.CHANNEL_CLAIMS_UPDATE_SUCCESS:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.channelListId, Object.assign({}, state.channelList[action.data.channelListId], {\n claimsData: action.data.claimsData\n })))\n });\n // display an asset\n case actions.FILE_AVAILABILITY_UPDATE:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n status: action.data\n })\n });\n case actions.DISPLAY_ASSET_ERROR:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n error: action.data,\n status: _asset_display_states.ERROR\n })\n });\n default:\n return state;\n }\n};\n\nvar _show_action_types = __webpack_require__(59);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _asset_display_states = __webpack_require__(126);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar initialState = {\n request: {\n error: null,\n type: null,\n id: null\n },\n requestList: {},\n channelList: {},\n assetList: {},\n displayAsset: {\n error: null,\n status: _asset_display_states.LOCAL_CHECK\n }\n};\n\n/***/ }),\n/* 470 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n default:\n return state;\n }\n};\n\nvar siteConfig = __webpack_require__(125);\n\nvar googleAnalyticsId = siteConfig.analytics.googleId,\n _siteConfig$assetDefa = siteConfig.assetDefaults,\n defaultThumbnail = _siteConfig$assetDefa.thumbnail,\n defaultDescription = _siteConfig$assetDefa.description,\n _siteConfig$details = siteConfig.details,\n description = _siteConfig$details.description,\n host = _siteConfig$details.host,\n title = _siteConfig$details.title,\n twitter = _siteConfig$details.twitter;\n\n\nvar initialState = {\n description: description,\n googleAnalyticsId: googleAnalyticsId,\n host: host,\n title: title,\n twitter: twitter,\n defaultDescription: defaultDescription,\n defaultThumbnail: defaultThumbnail\n};\n\n/***/ }),\n/* 471 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = sagaMiddlewareFactory;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__channel__ = __webpack_require__(60);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__runSaga__ = __webpack_require__(186);\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\n\n\n\n\n\nfunction sagaMiddlewareFactory() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var _ref$context = _ref.context,\n context = _ref$context === undefined ? {} : _ref$context,\n options = _objectWithoutProperties(_ref, ['context']);\n\n var sagaMonitor = options.sagaMonitor,\n logger = options.logger,\n onError = options.onError;\n\n\n if (__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func(options)) {\n if (true) {\n throw new Error('Saga middleware no longer accept Generator functions. Use sagaMiddleware.run instead');\n } else {\n throw new Error('You passed a function to the Saga middleware. You are likely trying to start a Saga by directly passing it to the middleware. This is no longer possible starting from 0.10.0. To run a Saga, you must do it dynamically AFTER mounting the middleware into the store.\\n Example:\\n import createSagaMiddleware from \\'redux-saga\\'\\n ... other imports\\n\\n const sagaMiddleware = createSagaMiddleware()\\n const store = createStore(reducer, applyMiddleware(sagaMiddleware))\\n sagaMiddleware.run(saga, ...args)\\n ');\n }\n }\n\n if (logger && !__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func(logger)) {\n throw new Error('`options.logger` passed to the Saga middleware is not a function!');\n }\n\n if (false) {\n throw new Error('`options.onerror` was removed. Use `options.onError` instead.');\n }\n\n if (onError && !__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func(onError)) {\n throw new Error('`options.onError` passed to the Saga middleware is not a function!');\n }\n\n if (options.emitter && !__WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].func(options.emitter)) {\n throw new Error('`options.emitter` passed to the Saga middleware is not a function!');\n }\n\n function sagaMiddleware(_ref2) {\n var getState = _ref2.getState,\n dispatch = _ref2.dispatch;\n\n var sagaEmitter = Object(__WEBPACK_IMPORTED_MODULE_1__channel__[\"c\" /* emitter */])();\n sagaEmitter.emit = (options.emitter || __WEBPACK_IMPORTED_MODULE_0__utils__[\"o\" /* ident */])(sagaEmitter.emit);\n\n sagaMiddleware.run = __WEBPACK_IMPORTED_MODULE_2__runSaga__[\"a\" /* runSaga */].bind(null, {\n context: context,\n subscribe: sagaEmitter.subscribe,\n dispatch: dispatch,\n getState: getState,\n sagaMonitor: sagaMonitor,\n logger: logger,\n onError: onError\n });\n\n return function (next) {\n return function (action) {\n if (sagaMonitor && sagaMonitor.actionDispatched) {\n sagaMonitor.actionDispatched(action);\n }\n var result = next(action); // hit reducers\n sagaEmitter.emit(action);\n return result;\n };\n };\n }\n\n sagaMiddleware.run = function () {\n throw new Error('Before running a Saga, you must mount the Saga middleware on the Store using applyMiddleware');\n };\n\n sagaMiddleware.setContext = function (props) {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* check */])(props, __WEBPACK_IMPORTED_MODULE_0__utils__[\"q\" /* is */].object, Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"k\" /* createSetContextWarning */])('sagaMiddleware', props));\n __WEBPACK_IMPORTED_MODULE_0__utils__[\"v\" /* object */].assign(context, props);\n };\n\n return sagaMiddleware;\n}\n\n/***/ }),\n/* 472 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = takeEvery;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__fsmIterator__ = __webpack_require__(127);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__io__ = __webpack_require__(50);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__channel__ = __webpack_require__(60);\n\n\n\n\nfunction takeEvery(patternOrChannel, worker) {\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var yTake = { done: false, value: Object(__WEBPACK_IMPORTED_MODULE_1__io__[\"s\" /* take */])(patternOrChannel) };\n var yFork = function yFork(ac) {\n return { done: false, value: __WEBPACK_IMPORTED_MODULE_1__io__[\"k\" /* fork */].apply(undefined, [worker].concat(args, [ac])) };\n };\n\n var action = void 0,\n setAction = function setAction(ac) {\n return action = ac;\n };\n\n return Object(__WEBPACK_IMPORTED_MODULE_0__fsmIterator__[\"a\" /* default */])({\n q1: function q1() {\n return ['q2', yTake, setAction];\n },\n q2: function q2() {\n return action === __WEBPACK_IMPORTED_MODULE_2__channel__[\"a\" /* END */] ? [__WEBPACK_IMPORTED_MODULE_0__fsmIterator__[\"b\" /* qEnd */]] : ['q1', yFork(action)];\n }\n }, 'q1', 'takeEvery(' + Object(__WEBPACK_IMPORTED_MODULE_0__fsmIterator__[\"c\" /* safeName */])(patternOrChannel) + ', ' + worker.name + ')');\n}\n\n/***/ }),\n/* 473 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = takeLatest;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__fsmIterator__ = __webpack_require__(127);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__io__ = __webpack_require__(50);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__channel__ = __webpack_require__(60);\n\n\n\n\nfunction takeLatest(patternOrChannel, worker) {\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var yTake = { done: false, value: Object(__WEBPACK_IMPORTED_MODULE_1__io__[\"s\" /* take */])(patternOrChannel) };\n var yFork = function yFork(ac) {\n return { done: false, value: __WEBPACK_IMPORTED_MODULE_1__io__[\"k\" /* fork */].apply(undefined, [worker].concat(args, [ac])) };\n };\n var yCancel = function yCancel(task) {\n return { done: false, value: Object(__WEBPACK_IMPORTED_MODULE_1__io__[\"f\" /* cancel */])(task) };\n };\n\n var task = void 0,\n action = void 0;\n var setTask = function setTask(t) {\n return task = t;\n };\n var setAction = function setAction(ac) {\n return action = ac;\n };\n\n return Object(__WEBPACK_IMPORTED_MODULE_0__fsmIterator__[\"a\" /* default */])({\n q1: function q1() {\n return ['q2', yTake, setAction];\n },\n q2: function q2() {\n return action === __WEBPACK_IMPORTED_MODULE_2__channel__[\"a\" /* END */] ? [__WEBPACK_IMPORTED_MODULE_0__fsmIterator__[\"b\" /* qEnd */]] : task ? ['q3', yCancel(task)] : ['q1', yFork(action), setTask];\n },\n q3: function q3() {\n return ['q1', yFork(action), setTask];\n }\n }, 'q1', 'takeLatest(' + Object(__WEBPACK_IMPORTED_MODULE_0__fsmIterator__[\"c\" /* safeName */])(patternOrChannel) + ', ' + worker.name + ')');\n}\n\n/***/ }),\n/* 474 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = throttle;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__fsmIterator__ = __webpack_require__(127);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__io__ = __webpack_require__(50);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__channel__ = __webpack_require__(60);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__buffers__ = __webpack_require__(85);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils__ = __webpack_require__(23);\n\n\n\n\n\n\nfunction throttle(delayLength, pattern, worker) {\n for (var _len = arguments.length, args = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n args[_key - 3] = arguments[_key];\n }\n\n var action = void 0,\n channel = void 0;\n\n var yActionChannel = { done: false, value: Object(__WEBPACK_IMPORTED_MODULE_1__io__[\"a\" /* actionChannel */])(pattern, __WEBPACK_IMPORTED_MODULE_3__buffers__[\"a\" /* buffers */].sliding(1)) };\n var yTake = function yTake() {\n return { done: false, value: Object(__WEBPACK_IMPORTED_MODULE_1__io__[\"s\" /* take */])(channel) };\n };\n var yFork = function yFork(ac) {\n return { done: false, value: __WEBPACK_IMPORTED_MODULE_1__io__[\"k\" /* fork */].apply(undefined, [worker].concat(args, [ac])) };\n };\n var yDelay = { done: false, value: Object(__WEBPACK_IMPORTED_MODULE_1__io__[\"e\" /* call */])(__WEBPACK_IMPORTED_MODULE_4__utils__[\"m\" /* delay */], delayLength) };\n\n var setAction = function setAction(ac) {\n return action = ac;\n };\n var setChannel = function setChannel(ch) {\n return channel = ch;\n };\n\n return Object(__WEBPACK_IMPORTED_MODULE_0__fsmIterator__[\"a\" /* default */])({\n q1: function q1() {\n return ['q2', yActionChannel, setChannel];\n },\n q2: function q2() {\n return ['q3', yTake(), setAction];\n },\n q3: function q3() {\n return action === __WEBPACK_IMPORTED_MODULE_2__channel__[\"a\" /* END */] ? [__WEBPACK_IMPORTED_MODULE_0__fsmIterator__[\"b\" /* qEnd */]] : ['q4', yFork(action)];\n },\n q4: function q4() {\n return ['q2', yDelay];\n }\n }, 'q1', 'throttle(' + Object(__WEBPACK_IMPORTED_MODULE_0__fsmIterator__[\"c\" /* safeName */])(pattern) + ', ' + worker.name + ')');\n}\n\n/***/ }),\n/* 475 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__internal_utils__ = __webpack_require__(23);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"TASK\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__[\"e\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"SAGA_ACTION\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__[\"c\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"noop\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__[\"u\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"is\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__[\"q\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"deferred\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__[\"l\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"arrayOfDeffered\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__[\"g\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"createMockTask\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__[\"j\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"cloneableGenerator\", function() { return __WEBPACK_IMPORTED_MODULE_0__internal_utils__[\"i\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__internal_io__ = __webpack_require__(50);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"asEffect\", function() { return __WEBPACK_IMPORTED_MODULE_1__internal_io__[\"d\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__internal_proc__ = __webpack_require__(187);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"CHANNEL_END\", function() { return __WEBPACK_IMPORTED_MODULE_2__internal_proc__[\"a\"]; });\n\n\n\n\n/***/ }),\n/* 476 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = rootSaga;\n\nvar _effects = __webpack_require__(51);\n\nvar _show_uri = __webpack_require__(477);\n\nvar _show_asset = __webpack_require__(190);\n\nvar _show_channel = __webpack_require__(191);\n\nvar _file = __webpack_require__(482);\n\nvar _publish = __webpack_require__(484);\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(rootSaga);\n\nfunction rootSaga() {\n return regeneratorRuntime.wrap(function rootSaga$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return (0, _effects.all)([(0, _show_uri.watchHandleShowPageUri)(), (0, _show_asset.watchNewAssetRequest)(), (0, _show_channel.watchNewChannelRequest)(), (0, _show_channel.watchUpdateChannelClaims)(), (0, _file.watchFileIsRequested)(), (0, _publish.watchPublishStart)()]);\n\n case 2:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this);\n}\n\n/***/ }),\n/* 477 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.handleShowPageUri = handleShowPageUri;\nexports.watchHandleShowPageUri = watchHandleShowPageUri;\n\nvar _effects = __webpack_require__(51);\n\nvar _show_action_types = __webpack_require__(59);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(52);\n\nvar _show_asset = __webpack_require__(190);\n\nvar _show_channel = __webpack_require__(191);\n\nvar _lbryUri = __webpack_require__(481);\n\nvar _lbryUri2 = _interopRequireDefault(_lbryUri);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateIdentifierAndClaim),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateClaimOnly),\n _marked3 = /*#__PURE__*/regeneratorRuntime.mark(handleShowPageUri),\n _marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchHandleShowPageUri);\n\nfunction parseAndUpdateIdentifierAndClaim(modifier, claim) {\n var isChannel, channelName, channelClaimId, claimId, claimName, extension, _lbryUri$parseIdentif, _lbryUri$parseClaim;\n\n return regeneratorRuntime.wrap(function parseAndUpdateIdentifierAndClaim$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n // this is a request for an asset\n // claim will be an asset claim\n // the identifier could be a channel or a claim id\n isChannel = void 0, channelName = void 0, channelClaimId = void 0, claimId = void 0, claimName = void 0, extension = void 0;\n _context.prev = 1;\n _lbryUri$parseIdentif = _lbryUri2.default.parseIdentifier(modifier);\n isChannel = _lbryUri$parseIdentif.isChannel;\n channelName = _lbryUri$parseIdentif.channelName;\n channelClaimId = _lbryUri$parseIdentif.channelClaimId;\n claimId = _lbryUri$parseIdentif.claimId;\n _lbryUri$parseClaim = _lbryUri2.default.parseClaim(claim);\n claimName = _lbryUri$parseClaim.claimName;\n extension = _lbryUri$parseClaim.extension;\n _context.next = 17;\n break;\n\n case 12:\n _context.prev = 12;\n _context.t0 = _context['catch'](1);\n _context.next = 16;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));\n\n case 16:\n return _context.abrupt('return', _context.sent);\n\n case 17:\n if (!isChannel) {\n _context.next = 21;\n break;\n }\n\n _context.next = 20;\n return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, channelName, channelClaimId, extension));\n\n case 20:\n return _context.abrupt('return', _context.sent);\n\n case 21:\n ;\n _context.next = 24;\n return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, claimId, null, null, extension));\n\n case 24:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[1, 12]]);\n}\nfunction parseAndUpdateClaimOnly(claim) {\n var isChannel, channelName, channelClaimId, _lbryUri$parseIdentif2, claimName, extension, _lbryUri$parseClaim2;\n\n return regeneratorRuntime.wrap(function parseAndUpdateClaimOnly$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // this could be a request for an asset or a channel page\n // claim could be an asset claim or a channel claim\n isChannel = void 0, channelName = void 0, channelClaimId = void 0;\n _context2.prev = 1;\n _lbryUri$parseIdentif2 = _lbryUri2.default.parseIdentifier(claim);\n isChannel = _lbryUri$parseIdentif2.isChannel;\n channelName = _lbryUri$parseIdentif2.channelName;\n channelClaimId = _lbryUri$parseIdentif2.channelClaimId;\n _context2.next = 13;\n break;\n\n case 8:\n _context2.prev = 8;\n _context2.t0 = _context2['catch'](1);\n _context2.next = 12;\n return (0, _effects.put)((0, _show.onRequestError)(_context2.t0.message));\n\n case 12:\n return _context2.abrupt('return', _context2.sent);\n\n case 13:\n if (!isChannel) {\n _context2.next = 17;\n break;\n }\n\n _context2.next = 16;\n return (0, _effects.call)(_show_channel.newChannelRequest, (0, _show.onNewChannelRequest)(channelName, channelClaimId));\n\n case 16:\n return _context2.abrupt('return', _context2.sent);\n\n case 17:\n // if not for a channel, parse the claim request\n claimName = void 0, extension = void 0;\n _context2.prev = 18;\n _lbryUri$parseClaim2 = _lbryUri2.default.parseClaim(claim);\n claimName = _lbryUri$parseClaim2.claimName;\n extension = _lbryUri$parseClaim2.extension;\n _context2.next = 29;\n break;\n\n case 24:\n _context2.prev = 24;\n _context2.t1 = _context2['catch'](18);\n _context2.next = 28;\n return (0, _effects.put)((0, _show.onRequestError)(_context2.t1.message));\n\n case 28:\n return _context2.abrupt('return', _context2.sent);\n\n case 29:\n _context2.next = 31;\n return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, null, null, extension));\n\n case 31:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this, [[1, 8], [18, 24]]);\n}\n\nfunction handleShowPageUri(action) {\n var _action$data, identifier, claim;\n\n return regeneratorRuntime.wrap(function handleShowPageUri$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _action$data = action.data, identifier = _action$data.identifier, claim = _action$data.claim;\n\n if (!identifier) {\n _context3.next = 5;\n break;\n }\n\n _context3.next = 4;\n return (0, _effects.call)(parseAndUpdateIdentifierAndClaim, identifier, claim);\n\n case 4:\n return _context3.abrupt('return', _context3.sent);\n\n case 5:\n _context3.next = 7;\n return (0, _effects.call)(parseAndUpdateClaimOnly, claim);\n\n case 7:\n case 'end':\n return _context3.stop();\n }\n }\n }, _marked3, this);\n};\n\nfunction watchHandleShowPageUri() {\n return regeneratorRuntime.wrap(function watchHandleShowPageUri$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _context4.next = 2;\n return (0, _effects.takeLatest)(actions.HANDLE_SHOW_URI, handleShowPageUri);\n\n case 2:\n case 'end':\n return _context4.stop();\n }\n }\n }, _marked4, this);\n};\n\n/***/ }),\n/* 478 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getLongClaimId = getLongClaimId;\nexports.getShortId = getShortId;\nexports.getClaimData = getClaimData;\n\nvar _request = __webpack_require__(53);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getLongClaimId(host, name, modifier) {\n var body = {};\n // create request params\n if (modifier) {\n if (modifier.id) {\n body['claimId'] = modifier.id;\n } else {\n body['channelName'] = modifier.channel.name;\n body['channelClaimId'] = modifier.channel.id;\n }\n }\n body['claimName'] = name;\n var params = {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body)\n };\n // create url\n var url = host + '/api/claim/long-id';\n // return the request promise\n return (0, _request2.default)(url, params);\n};\n\nfunction getShortId(host, name, claimId) {\n var url = host + '/api/claim/short-id/' + claimId + '/' + name;\n return (0, _request2.default)(url);\n};\n\nfunction getClaimData(host, name, claimId) {\n var url = host + '/api/claim/data/' + name + '/' + claimId;\n return (0, _request2.default)(url);\n};\n\n/***/ }),\n/* 479 */\n/***/ (function(module, exports) {\n\n(function(self) {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob();\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n };\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isDataView = function(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n };\n\n var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue+','+value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) { items.push(name); });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) { items.push(value); });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) { items.push([name, value]); });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n this._bodyInit = body;\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n };\n }\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'omit';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n }\n\n Request.prototype.clone = function() {\n return new Request(this, { body: this._bodyInit })\n };\n\n function decode(body) {\n var form = new FormData();\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n rawHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = 'status' in options ? options.status : 200;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = 'statusText' in options ? options.statusText : 'OK';\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''});\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n var xhr = new XMLHttpRequest();\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options));\n };\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.open(request.method, request.url, true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob';\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n };\n self.fetch.polyfill = true;\n})(typeof self !== 'undefined' ? self : this);\n\n/*\n * Rollup wraps up the whatwg-fetch code on ponyfill mode in\n * order to prevent it from adding fetch to the global object.\n */\n\n\n/***/ }),\n/* 480 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getChannelData = getChannelData;\nexports.getChannelClaims = getChannelClaims;\n\nvar _request = __webpack_require__(53);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getChannelData(host, id, name) {\n if (!id) id = 'none';\n var url = host + '/api/channel/data/' + name + '/' + id;\n return (0, _request2.default)(url);\n};\n\nfunction getChannelClaims(host, longId, name, page) {\n if (!page) page = 1;\n var url = host + '/api/channel/claims/' + name + '/' + longId + '/' + page;\n return (0, _request2.default)(url);\n};\n\n/***/ }),\n/* 481 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nmodule.exports = {\n REGEXP_INVALID_CLAIM: /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS: /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR: '@',\n parseIdentifier: function parseIdentifier(identifier) {\n var componentsRegex = new RegExp('([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec = componentsRegex // eslint-disable-line no-unused-vars\n .exec(identifier).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec2 = _slicedToArray(_componentsRegex$exec, 4),\n proto = _componentsRegex$exec2[0],\n value = _componentsRegex$exec2[1],\n modifierSeperator = _componentsRegex$exec2[2],\n modifier = _componentsRegex$exec2[3];\n\n // Validate and process name\n\n\n if (!value) {\n throw new Error('Check your URL. No channel name provided before \"' + modifierSeperator + '\"');\n }\n var isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n var channelName = isChannel ? value : null;\n var claimId = void 0;\n if (isChannel) {\n if (!channelName) {\n throw new Error('Check your URL. No channel name after \"@\".');\n }\n var nameBadChars = channelName.match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error('Check your URL. Invalid characters in channel name: \"' + nameBadChars.join(', ') + '\".');\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n var channelClaimId = void 0;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error('Check your URL. No modifier provided after separator \"' + modifierSeperator + '\"');\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error('Check your URL. The \"' + modifierSeperator + '\" modifier is not currently supported');\n }\n }\n return {\n isChannel: isChannel,\n channelName: channelName,\n channelClaimId: channelClaimId || null,\n claimId: claimId || null\n };\n },\n parseClaim: function parseClaim(name) {\n var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first extension)\n '([:$#.]?)([^/]*)' // extension separator, extension (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec3 = componentsRegex // eslint-disable-line no-unused-vars\n .exec(name).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec4 = _slicedToArray(_componentsRegex$exec3, 4),\n proto = _componentsRegex$exec4[0],\n claimName = _componentsRegex$exec4[1],\n extensionSeperator = _componentsRegex$exec4[2],\n extension = _componentsRegex$exec4[3];\n\n // Validate and process name\n\n\n if (!claimName) {\n throw new Error('Check your URL. No claim name provided before \".\"');\n }\n var nameBadChars = claimName.match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error('Check your URL. Invalid characters in claim name: \"' + nameBadChars.join(', ') + '\".');\n }\n // Validate and process extension\n if (extensionSeperator) {\n if (!extension) {\n throw new Error('Check your URL. No file extension provided after separator \"' + extensionSeperator + '\".');\n }\n if (extensionSeperator !== '.') {\n throw new Error('Check your URL. The \"' + extensionSeperator + '\" separator is not supported in the claim name.');\n }\n }\n return {\n claimName: claimName,\n extension: extension || null\n };\n }\n};\n\n/***/ }),\n/* 482 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.watchFileIsRequested = watchFileIsRequested;\n\nvar _effects = __webpack_require__(51);\n\nvar _show_action_types = __webpack_require__(59);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(52);\n\nvar _asset_display_states = __webpack_require__(126);\n\nvar _fileApi = __webpack_require__(483);\n\nvar _site = __webpack_require__(86);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(retrieveFile),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchFileIsRequested);\n\nfunction retrieveFile(action) {\n var name, claimId, host, isAvailable, _ref;\n\n return regeneratorRuntime.wrap(function retrieveFile$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n name = action.data.name;\n claimId = action.data.claimId;\n _context.next = 4;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 4:\n host = _context.sent;\n\n // see if the file is available\n isAvailable = void 0;\n _context.prev = 6;\n _context.next = 9;\n return (0, _effects.call)(_fileApi.checkFileAvailability, claimId, host, name);\n\n case 9:\n _ref = _context.sent;\n isAvailable = _ref.data;\n _context.next = 18;\n break;\n\n case 13:\n _context.prev = 13;\n _context.t0 = _context['catch'](6);\n _context.next = 17;\n return (0, _effects.put)((0, _show.updateDisplayAssetError)(_context.t0.message));\n\n case 17:\n return _context.abrupt('return', _context.sent);\n\n case 18:\n ;\n\n if (!isAvailable) {\n _context.next = 25;\n break;\n }\n\n _context.next = 22;\n return (0, _effects.put)((0, _show.updateDisplayAssetError)(null));\n\n case 22:\n _context.next = 24;\n return (0, _effects.put)((0, _show.updateFileAvailability)(_asset_display_states.AVAILABLE));\n\n case 24:\n return _context.abrupt('return', _context.sent);\n\n case 25:\n _context.next = 27;\n return (0, _effects.put)((0, _show.updateFileAvailability)(_asset_display_states.UNAVAILABLE));\n\n case 27:\n _context.prev = 27;\n _context.next = 30;\n return (0, _effects.call)(_fileApi.triggerClaimGet, claimId, host, name);\n\n case 30:\n _context.next = 37;\n break;\n\n case 32:\n _context.prev = 32;\n _context.t1 = _context['catch'](27);\n _context.next = 36;\n return (0, _effects.put)((0, _show.updateDisplayAssetError)(_context.t1.message));\n\n case 36:\n return _context.abrupt('return', _context.sent);\n\n case 37:\n ;\n _context.next = 40;\n return (0, _effects.put)((0, _show.updateFileAvailability)(_asset_display_states.AVAILABLE));\n\n case 40:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[6, 13], [27, 32]]);\n};\n\nfunction watchFileIsRequested() {\n return regeneratorRuntime.wrap(function watchFileIsRequested$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return (0, _effects.takeLatest)(actions.FILE_REQUESTED, retrieveFile);\n\n case 2:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this);\n};\n\n/***/ }),\n/* 483 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.checkFileAvailability = checkFileAvailability;\nexports.triggerClaimGet = triggerClaimGet;\n\nvar _request = __webpack_require__(53);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction checkFileAvailability(claimId, host, name) {\n var url = host + '/api/file/availability/' + name + '/' + claimId;\n return (0, _request2.default)(url);\n}\n\nfunction triggerClaimGet(claimId, host, name) {\n var url = host + '/api/claim/get/' + name + '/' + claimId;\n return (0, _request2.default)(url);\n}\n\n/***/ }),\n/* 484 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.watchPublishStart = watchPublishStart;\n\nvar _effects = __webpack_require__(51);\n\nvar _publish_action_types = __webpack_require__(124);\n\nvar actions = _interopRequireWildcard(_publish_action_types);\n\nvar _publish_claim_states = __webpack_require__(192);\n\nvar publishStates = _interopRequireWildcard(_publish_claim_states);\n\nvar _publish = __webpack_require__(24);\n\nvar _publish2 = __webpack_require__(485);\n\nvar _channel = __webpack_require__(486);\n\nvar _site = __webpack_require__(86);\n\nvar _validate = __webpack_require__(487);\n\nvar _publish3 = __webpack_require__(488);\n\nvar _publish4 = __webpack_require__(489);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(publishFile),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchPublishStart);\n\nfunction publishFile(action) {\n var history, _ref, publishInChannel, selectedChannel, file, claim, metadata, thumbnailChannel, thumbnailChannelId, thumbnail, urlError, _ref2, loggedInChannel, _ref3, host, publishMetadata, publishFormData, publishChannel, _ref4, loadStart, progress, load, success, error;\n\n return regeneratorRuntime.wrap(function publishFile$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n history = action.data.history;\n _context.next = 3;\n return (0, _effects.select)(_publish2.selectPublishState);\n\n case 3:\n _ref = _context.sent;\n publishInChannel = _ref.publishInChannel;\n selectedChannel = _ref.selectedChannel;\n file = _ref.file;\n claim = _ref.claim;\n metadata = _ref.metadata;\n thumbnailChannel = _ref.thumbnailChannel;\n thumbnailChannelId = _ref.thumbnailChannelId;\n thumbnail = _ref.thumbnail;\n urlError = _ref.error.url;\n _context.next = 15;\n return (0, _effects.select)(_channel.selectChannelState);\n\n case 15:\n _ref2 = _context.sent;\n loggedInChannel = _ref2.loggedInChannel;\n _context.next = 19;\n return (0, _effects.select)(_site.selectSiteState);\n\n case 19:\n _ref3 = _context.sent;\n host = _ref3.host;\n _context.prev = 21;\n\n (0, _validate.validateChannelSelection)(publishInChannel, selectedChannel, loggedInChannel);\n _context.next = 30;\n break;\n\n case 25:\n _context.prev = 25;\n _context.t0 = _context['catch'](21);\n _context.next = 29;\n return (0, _effects.put)((0, _publish.updateError)('channel', _context.t0.message));\n\n case 29:\n return _context.abrupt('return', _context.sent);\n\n case 30:\n ;\n // validate publish parameters\n _context.prev = 31;\n\n (0, _validate.validatePublishParams)(file, claim, urlError);\n _context.next = 40;\n break;\n\n case 35:\n _context.prev = 35;\n _context.t1 = _context['catch'](31);\n _context.next = 39;\n return (0, _effects.put)((0, _publish.updateError)('publishSubmit', _context.t1.message));\n\n case 39:\n return _context.abrupt('return', _context.sent);\n\n case 40:\n // create metadata\n publishMetadata = (0, _publish3.createPublishMetadata)(claim, file, metadata, publishInChannel, selectedChannel);\n\n if (thumbnail) {\n // add thumbnail to publish metadata\n publishMetadata['thumbnail'] = (0, _publish3.createThumbnailUrl)(thumbnailChannel, thumbnailChannelId, claim, host);\n }\n // create form data for main publish\n publishFormData = (0, _publish3.createPublishFormData)(file, thumbnail, publishMetadata);\n // make the publish request\n\n _context.next = 45;\n return (0, _effects.call)(_publish4.makePublishRequestChannel, publishFormData);\n\n case 45:\n publishChannel = _context.sent;\n\n case 46:\n if (false) {\n _context.next = 74;\n break;\n }\n\n _context.next = 49;\n return (0, _effects.take)(publishChannel);\n\n case 49:\n _ref4 = _context.sent;\n loadStart = _ref4.loadStart;\n progress = _ref4.progress;\n load = _ref4.load;\n success = _ref4.success;\n error = _ref4.error;\n\n if (!error) {\n _context.next = 59;\n break;\n }\n\n _context.next = 58;\n return (0, _effects.put)((0, _publish.updatePublishStatus)(publishStates.FAILED, error.message));\n\n case 58:\n return _context.abrupt('return', _context.sent);\n\n case 59:\n if (!success) {\n _context.next = 63;\n break;\n }\n\n _context.next = 62;\n return (0, _effects.put)((0, _publish.clearFile)());\n\n case 62:\n return _context.abrupt('return', history.push('/' + success.data.claimId + '/' + success.data.name));\n\n case 63:\n if (!loadStart) {\n _context.next = 66;\n break;\n }\n\n _context.next = 66;\n return (0, _effects.put)((0, _publish.updatePublishStatus)(publishStates.LOAD_START, null));\n\n case 66:\n if (!progress) {\n _context.next = 69;\n break;\n }\n\n _context.next = 69;\n return (0, _effects.put)((0, _publish.updatePublishStatus)(publishStates.LOADING, progress + '%'));\n\n case 69:\n if (!load) {\n _context.next = 72;\n break;\n }\n\n _context.next = 72;\n return (0, _effects.put)((0, _publish.updatePublishStatus)(publishStates.PUBLISHING, null));\n\n case 72:\n _context.next = 46;\n break;\n\n case 74:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[21, 25], [31, 35]]);\n};\n\nfunction watchPublishStart() {\n return regeneratorRuntime.wrap(function watchPublishStart$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return (0, _effects.takeLatest)(actions.PUBLISH_START, publishFile);\n\n case 2:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this);\n};\n\n/***/ }),\n/* 485 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar selectPublishState = exports.selectPublishState = function selectPublishState(state) {\n return state.publish;\n};\n\n/***/ }),\n/* 486 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar selectChannelState = exports.selectChannelState = function selectChannelState(state) {\n return state.channel;\n};\n\n/***/ }),\n/* 487 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar validateChannelSelection = exports.validateChannelSelection = function validateChannelSelection(publishInChannel, selectedChannel, loggedInChannel) {\n if (publishInChannel && selectedChannel !== loggedInChannel.name) {\n throw new Error('Log in to a channel or select Anonymous');\n }\n};\n\nvar validatePublishParams = exports.validatePublishParams = function validatePublishParams(file, claim, urlError) {\n if (!file) {\n throw new Error('Please choose a file');\n }\n if (!claim) {\n throw new Error('Please enter a URL');\n }\n if (urlError) {\n throw new Error('Fix the url');\n }\n};\n\n/***/ }),\n/* 488 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar createPublishMetadata = exports.createPublishMetadata = function createPublishMetadata(claim, _ref, _ref2, publishInChannel, selectedChannel) {\n var type = _ref.type;\n var title = _ref2.title,\n description = _ref2.description,\n license = _ref2.license,\n nsfw = _ref2.nsfw;\n\n var metadata = {\n name: claim,\n title: title,\n description: description,\n license: license,\n nsfw: nsfw,\n type: type\n };\n if (publishInChannel) {\n metadata['channelName'] = selectedChannel;\n }\n return metadata;\n};\n\nvar createPublishFormData = exports.createPublishFormData = function createPublishFormData(file, thumbnail, metadata) {\n var fd = new FormData();\n // append file\n fd.append('file', file);\n // append thumbnail\n if (thumbnail) {\n fd.append('thumbnail', thumbnail);\n }\n // append metadata\n for (var key in metadata) {\n if (metadata.hasOwnProperty(key)) {\n fd.append(key, metadata[key]);\n }\n }\n return fd;\n};\n\nvar createThumbnailUrl = exports.createThumbnailUrl = function createThumbnailUrl(channel, channelId, claim, host) {\n return host + '/' + channel + ':' + channelId + '/' + claim + '-thumb.png';\n};\n\n/***/ }),\n/* 489 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.makePublishRequestChannel = undefined;\n\nvar _reduxSaga = __webpack_require__(184);\n\nvar makePublishRequestChannel = exports.makePublishRequestChannel = function makePublishRequestChannel(fd) {\n return (0, _reduxSaga.eventChannel)(function (emitter) {\n var uri = '/api/claim/publish';\n var xhr = new XMLHttpRequest();\n // add event listeners\n var onLoadStart = function onLoadStart() {\n emitter({ loadStart: true });\n };\n var onProgress = function onProgress(event) {\n if (event.lengthComputable) {\n var percentage = Math.round(event.loaded * 100 / event.total);\n emitter({ progress: percentage });\n }\n };\n var onLoad = function onLoad() {\n emitter({ load: true });\n };\n xhr.upload.addEventListener('loadstart', onLoadStart);\n xhr.upload.addEventListener('progress', onProgress);\n xhr.upload.addEventListener('load', onLoad);\n // set state change handler\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n var response = JSON.parse(xhr.response);\n if (xhr.status === 200 && response.success) {\n emitter({ success: response });\n emitter(_reduxSaga.END);\n } else {\n emitter({ error: new Error(response.message) });\n emitter(_reduxSaga.END);\n }\n }\n };\n // open and send\n xhr.open('POST', uri, true);\n xhr.send(fd);\n // clean up\n return function () {\n xhr.upload.removeEventListener('loadstart', onLoadStart);\n xhr.upload.removeEventListener('progress', onProgress);\n xhr.upload.removeEventListener('load', onLoad);\n xhr.onreadystatechange = null;\n xhr.abort();\n };\n }, _reduxSaga.buffers.sliding(2));\n};\n\n/***/ }),\n/* 490 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactGa = __webpack_require__(491);\n\nvar _reactGa2 = _interopRequireDefault(_reactGa);\n\nvar _reactRouterDom = __webpack_require__(34);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(125),\n googleId = _require.analytics.googleId;\n\n_reactGa2.default.initialize(googleId);\n\nvar GAListener = function (_React$Component) {\n _inherits(GAListener, _React$Component);\n\n function GAListener() {\n _classCallCheck(this, GAListener);\n\n return _possibleConstructorReturn(this, (GAListener.__proto__ || Object.getPrototypeOf(GAListener)).apply(this, arguments));\n }\n\n _createClass(GAListener, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.sendPageView(this.props.history.location);\n this.props.history.listen(this.sendPageView);\n }\n }, {\n key: 'sendPageView',\n value: function sendPageView(location) {\n _reactGa2.default.set({ page: location.pathname });\n _reactGa2.default.pageview(location.pathname);\n }\n }, {\n key: 'render',\n value: function render() {\n return this.props.children;\n }\n }]);\n\n return GAListener;\n}(_react2.default.Component);\n\nexports.default = (0, _reactRouterDom.withRouter)(GAListener);\n\n/***/ }),\n/* 491 */\n/***/ (function(module, exports, __webpack_require__) {\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory(__webpack_require__(1), __webpack_require__(8));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\", \"prop-types\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"react\"), require(\"prop-types\")) : factory(root[\"react\"], root[\"prop-types\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_11__, __WEBPACK_EXTERNAL_MODULE_12__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 2);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = warn;\nfunction warn(s) {\n console.warn('[react-ga]', s);\n}\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = trim;\n// GA strings need to have leading/trailing whitespace trimmed, and not all\n// browsers have String.prototoype.trim().\n\nfunction trim(s) {\n return s.replace(/^\\s+|\\s+$/g, '');\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.testModeAPI = exports.OutboundLink = exports.plugin = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.initialize = initialize;\nexports.ga = ga;\nexports.set = set;\nexports.send = send;\nexports.pageview = pageview;\nexports.modalview = modalview;\nexports.timing = timing;\nexports.event = event;\nexports.exception = exception;\nexports.outboundLink = outboundLink;\n\nvar _format2 = __webpack_require__(3);\n\nvar _format3 = _interopRequireDefault(_format2);\n\nvar _removeLeadingSlash = __webpack_require__(6);\n\nvar _removeLeadingSlash2 = _interopRequireDefault(_removeLeadingSlash);\n\nvar _trim = __webpack_require__(1);\n\nvar _trim2 = _interopRequireDefault(_trim);\n\nvar _loadGA = __webpack_require__(7);\n\nvar _loadGA2 = _interopRequireDefault(_loadGA);\n\nvar _warn = __webpack_require__(0);\n\nvar _warn2 = _interopRequireDefault(_warn);\n\nvar _log = __webpack_require__(8);\n\nvar _log2 = _interopRequireDefault(_log);\n\nvar _testModeAPI = __webpack_require__(9);\n\nvar _testModeAPI2 = _interopRequireDefault(_testModeAPI);\n\nvar _OutboundLink = __webpack_require__(10);\n\nvar _OutboundLink2 = _interopRequireDefault(_OutboundLink);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /**\n * React Google Analytics Module\n *\n * @package react-ga\n * @author Adam Lofting \n * Atul Varma \n */\n\n/**\n * Utilities\n */\n\n\nvar _debug = false;\nvar _titleCase = true;\nvar _testMode = false;\n\nvar internalGa = function internalGa() {\n var _window;\n\n if (_testMode) return _testModeAPI2.default.ga.apply(_testModeAPI2.default, arguments);\n if (!window.ga) return (0, _warn2.default)('ReactGA.initialize must be called first or GoogleAnalytics should be loaded manually');\n return (_window = window).ga.apply(_window, arguments);\n};\n\nfunction _format(s) {\n return (0, _format3.default)(s, _titleCase);\n}\n\nfunction _gaCommand(trackerNames) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var command = args[0];\n if (typeof internalGa === 'function') {\n if (typeof command !== 'string') {\n (0, _warn2.default)('ga command must be a string');\n return;\n }\n\n internalGa.apply(undefined, args);\n if (Array.isArray(trackerNames)) {\n trackerNames.forEach(function (name) {\n internalGa.apply(undefined, _toConsumableArray([name + '.' + command].concat(args.slice(1))));\n });\n }\n }\n}\n\nfunction _initialize(gaTrackingID, options) {\n if (!gaTrackingID) {\n (0, _warn2.default)('gaTrackingID is required in initialize()');\n return;\n }\n\n if (options) {\n if (options.debug && options.debug === true) {\n _debug = true;\n }\n\n if (options.titleCase === false) {\n _titleCase = false;\n }\n }\n\n if (options && options.gaOptions) {\n internalGa('create', gaTrackingID, options.gaOptions);\n } else {\n internalGa('create', gaTrackingID, 'auto');\n }\n}\n\nfunction initialize(configsOrTrackingId, options) {\n if (options && options.testMode === true) {\n _testMode = true;\n } else {\n if (typeof window === 'undefined') {\n return false;\n }\n\n (0, _loadGA2.default)(options);\n }\n\n if (Array.isArray(configsOrTrackingId)) {\n configsOrTrackingId.forEach(function (config) {\n if ((typeof config === 'undefined' ? 'undefined' : _typeof(config)) !== 'object') {\n (0, _warn2.default)('All configs must be an object');\n return;\n }\n _initialize(config.trackingId, config);\n });\n } else {\n _initialize(configsOrTrackingId, options);\n }\n return true;\n}\n\n/**\n * ga:\n * Returns the original GA object.\n */\nfunction ga() {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (args.length > 0) {\n internalGa.apply(undefined, args);\n if (_debug) {\n (0, _log2.default)('called ga(\\'arguments\\');');\n (0, _log2.default)('with arguments: ' + JSON.stringify(args));\n }\n }\n\n return window.ga;\n}\n\n/**\n * set:\n * GA tracker set method\n * @param {Object} fieldsObject - a field/value pair or a group of field/value pairs on the tracker\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\nfunction set(fieldsObject, trackerNames) {\n if (!fieldsObject) {\n (0, _warn2.default)('`fieldsObject` is required in .set()');\n return;\n }\n\n if ((typeof fieldsObject === 'undefined' ? 'undefined' : _typeof(fieldsObject)) !== 'object') {\n (0, _warn2.default)('Expected `fieldsObject` arg to be an Object');\n return;\n }\n\n if (Object.keys(fieldsObject).length === 0) {\n (0, _warn2.default)('empty `fieldsObject` given to .set()');\n }\n\n _gaCommand(trackerNames, 'set', fieldsObject);\n\n if (_debug) {\n (0, _log2.default)('called ga(\\'set\\', fieldsObject);');\n (0, _log2.default)('with fieldsObject: ' + JSON.stringify(fieldsObject));\n }\n}\n\n/**\n * send:\n * Clone of the low level `ga.send` method\n * WARNING: No validations will be applied to this\n * @param {Object} fieldObject - field object for tracking different analytics\n * @param {Array} trackerNames - trackers to send the command to\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\nfunction send(fieldObject, trackerNames) {\n _gaCommand(trackerNames, 'send', fieldObject);\n if (_debug) {\n (0, _log2.default)('called ga(\\'send\\', fieldObject);');\n (0, _log2.default)('with fieldObject: ' + JSON.stringify(fieldObject));\n (0, _log2.default)('with trackers: ' + JSON.stringify(trackerNames));\n }\n}\n\n/**\n * pageview:\n * Basic GA pageview tracking\n * @param {String} path - the current page page e.g. '/about'\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n * @param {String} title - (optional) the page title e. g. 'My Website'\n */\nfunction pageview(rawPath, trackerNames, title) {\n if (!rawPath) {\n (0, _warn2.default)('path is required in .pageview()');\n return;\n }\n\n var path = (0, _trim2.default)(rawPath);\n if (path === '') {\n (0, _warn2.default)('path cannot be an empty string in .pageview()');\n return;\n }\n\n var extraFields = {};\n if (title) {\n extraFields.title = title;\n }\n\n if (typeof ga === 'function') {\n _gaCommand(trackerNames, 'send', _extends({\n hitType: 'pageview',\n page: path\n }, extraFields));\n\n if (_debug) {\n (0, _log2.default)('called ga(\\'send\\', \\'pageview\\', path);');\n var extraLog = '';\n if (title) {\n extraLog = ' and title: ' + title;\n }\n (0, _log2.default)('with path: ' + path + extraLog);\n }\n }\n}\n\n/**\n * modalview:\n * a proxy to basic GA pageview tracking to consistently track\n * modal views that are an equivalent UX to a traditional pageview\n * @param {String} modalName e.g. 'add-or-edit-club'\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\nfunction modalview(rawModalName, trackerNames) {\n if (!rawModalName) {\n (0, _warn2.default)('modalName is required in .modalview(modalName)');\n return;\n }\n\n var modalName = (0, _removeLeadingSlash2.default)((0, _trim2.default)(rawModalName));\n\n if (modalName === '') {\n (0, _warn2.default)('modalName cannot be an empty string or a single / in .modalview()');\n return;\n }\n\n if (typeof ga === 'function') {\n var path = '/modal/' + modalName;\n _gaCommand(trackerNames, 'send', 'pageview', path);\n\n if (_debug) {\n (0, _log2.default)('called ga(\\'send\\', \\'pageview\\', path);');\n (0, _log2.default)('with path: ' + path);\n }\n }\n}\n\n/**\n * timing:\n * GA timing\n * @param args.category {String} required\n * @param args.variable {String} required\n * @param args.value {Int} required\n * @param args.label {String} required\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\nfunction timing() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n category = _ref.category,\n variable = _ref.variable,\n value = _ref.value,\n label = _ref.label;\n\n var trackerNames = arguments[1];\n\n if (typeof ga === 'function') {\n if (!category || !variable || !value || typeof value !== 'number') {\n (0, _warn2.default)('args.category, args.variable ' + 'AND args.value are required in timing() ' + 'AND args.value has to be a number');\n return;\n }\n\n // Required Fields\n var fieldObject = {\n hitType: 'timing',\n timingCategory: _format(category),\n timingVar: _format(variable),\n timingValue: value\n };\n\n if (label) {\n fieldObject.timingLabel = _format(label);\n }\n\n send(fieldObject, trackerNames);\n }\n}\n\n/**\n * event:\n * GA event tracking\n * @param args.category {String} required\n * @param args.action {String} required\n * @param args.label {String} optional\n * @param args.value {Int} optional\n * @param args.nonInteraction {boolean} optional\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\nfunction event() {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var trackerNames = arguments[1];\n\n var category = _ref2.category,\n action = _ref2.action,\n label = _ref2.label,\n value = _ref2.value,\n nonInteraction = _ref2.nonInteraction,\n transport = _ref2.transport,\n args = _objectWithoutProperties(_ref2, ['category', 'action', 'label', 'value', 'nonInteraction', 'transport']);\n\n if (typeof ga === 'function') {\n // Simple Validation\n if (!category || !action) {\n (0, _warn2.default)('args.category AND args.action are required in event()');\n return;\n }\n\n // Required Fields\n var fieldObject = {\n hitType: 'event',\n eventCategory: _format(category),\n eventAction: _format(action)\n };\n\n // Optional Fields\n if (label) {\n fieldObject.eventLabel = _format(label);\n }\n\n if (typeof value !== 'undefined') {\n if (typeof value !== 'number') {\n (0, _warn2.default)('Expected `args.value` arg to be a Number.');\n } else {\n fieldObject.eventValue = value;\n }\n }\n\n if (typeof nonInteraction !== 'undefined') {\n if (typeof nonInteraction !== 'boolean') {\n (0, _warn2.default)('`args.nonInteraction` must be a boolean.');\n } else {\n fieldObject.nonInteraction = nonInteraction;\n }\n }\n\n if (typeof transport !== 'undefined') {\n if (typeof transport !== 'string') {\n (0, _warn2.default)('`args.transport` must be a string.');\n } else {\n if (['beacon', 'xhr', 'image'].indexOf(transport) === -1) {\n (0, _warn2.default)('`args.transport` must be either one of these values: `beacon`, `xhr` or `image`');\n }\n\n fieldObject.transport = transport;\n }\n }\n\n Object.keys(args).filter(function (key) {\n return key.substr(0, 'dimension'.length) === 'dimension';\n }).forEach(function (key) {\n fieldObject[key] = args[key];\n });\n\n Object.keys(args).filter(function (key) {\n return key.substr(0, 'metric'.length) === 'metric';\n }).forEach(function (key) {\n fieldObject[key] = args[key];\n });\n\n // Send to GA\n send(fieldObject, trackerNames);\n }\n}\n\n/**\n * exception:\n * GA exception tracking\n * @param args.description {String} optional\n * @param args.fatal {boolean} optional\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\nfunction exception(_ref3, trackerNames) {\n var description = _ref3.description,\n fatal = _ref3.fatal;\n\n if (typeof ga === 'function') {\n // Required Fields\n var fieldObject = {\n hitType: 'exception'\n };\n\n // Optional Fields\n if (description) {\n fieldObject.exDescription = _format(description);\n }\n\n if (typeof fatal !== 'undefined') {\n if (typeof fatal !== 'boolean') {\n (0, _warn2.default)('`args.fatal` must be a boolean.');\n } else {\n fieldObject.exFatal = fatal;\n }\n }\n\n // Send to GA\n send(fieldObject, trackerNames);\n }\n}\n\nvar plugin = exports.plugin = {\n /**\n * require:\n * GA requires a plugin\n * @param name {String} e.g. 'ecommerce' or 'myplugin'\n * @param options {Object} optional e.g {path: '/log', debug: true}\n */\n require: function require(rawName, options) {\n if (typeof ga === 'function') {\n // Required Fields\n if (!rawName) {\n (0, _warn2.default)('`name` is required in .require()');\n return;\n }\n\n var name = (0, _trim2.default)(rawName);\n if (name === '') {\n (0, _warn2.default)('`name` cannot be an empty string in .require()');\n return;\n }\n\n // Optional Fields\n if (options) {\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) !== 'object') {\n (0, _warn2.default)('Expected `options` arg to be an Object');\n return;\n }\n\n if (Object.keys(options).length === 0) {\n (0, _warn2.default)('Empty `options` given to .require()');\n }\n\n ga('require', name, options);\n\n if (_debug) {\n (0, _log2.default)('called ga(\\'require\\', \\'' + name + '\\', ' + JSON.stringify(options));\n }\n } else {\n ga('require', name);\n\n if (_debug) {\n (0, _log2.default)('called ga(\\'require\\', \\'' + name + '\\');');\n }\n }\n }\n },\n\n /**\n * execute:\n * GA execute action for plugin\n * Takes variable number of arguments\n * @param pluginName {String} e.g. 'ecommerce' or 'myplugin'\n * @param action {String} e.g. 'addItem' or 'myCustomAction'\n * @param actionType {String} optional e.g. 'detail'\n * @param payload {Object} optional e.g { id: '1x5e', name : 'My product to track' }\n */\n execute: function execute(pluginName, action) {\n var payload = void 0;\n var actionType = void 0;\n\n if ((arguments.length <= 2 ? 0 : arguments.length - 2) === 1) {\n payload = arguments.length <= 2 ? undefined : arguments[2];\n } else {\n actionType = arguments.length <= 2 ? undefined : arguments[2];\n payload = arguments.length <= 3 ? undefined : arguments[3];\n }\n\n if (typeof ga === 'function') {\n if (typeof pluginName !== 'string') {\n (0, _warn2.default)('Expected `pluginName` arg to be a String.');\n } else if (typeof action !== 'string') {\n (0, _warn2.default)('Expected `action` arg to be a String.');\n } else {\n var command = pluginName + ':' + action;\n payload = payload || null;\n if (actionType && payload) {\n ga(command, actionType, payload);\n if (_debug) {\n (0, _log2.default)('called ga(\\'' + command + '\\');');\n (0, _log2.default)('actionType: \"' + actionType + '\" with payload: ' + JSON.stringify(payload));\n }\n } else if (payload) {\n ga(command, payload);\n if (_debug) {\n (0, _log2.default)('called ga(\\'' + command + '\\');');\n (0, _log2.default)('with payload: ' + JSON.stringify(payload));\n }\n } else {\n ga(command);\n if (_debug) {\n (0, _log2.default)('called ga(\\'' + command + '\\');');\n }\n }\n }\n }\n }\n};\n\n/**\n * outboundLink:\n * GA outboundLink tracking\n * @param args.label {String} e.g. url, or 'Create an Account'\n * @param {function} hitCallback - Called after processing a hit.\n */\nfunction outboundLink(args, hitCallback, trackerNames) {\n if (typeof hitCallback !== 'function') {\n (0, _warn2.default)('hitCallback function is required');\n return;\n }\n\n if (typeof ga === 'function') {\n // Simple Validation\n if (!args || !args.label) {\n (0, _warn2.default)('args.label is required in outboundLink()');\n return;\n }\n\n // Required Fields\n var fieldObject = {\n hitType: 'event',\n eventCategory: 'Outbound',\n eventAction: 'Click',\n eventLabel: _format(args.label)\n };\n\n var safetyCallbackCalled = false;\n var safetyCallback = function safetyCallback() {\n // This prevents a delayed response from GA\n // causing hitCallback from being fired twice\n safetyCallbackCalled = true;\n\n hitCallback();\n };\n\n // Using a timeout to ensure the execution of critical application code\n // in the case when the GA server might be down\n // or an ad blocker prevents sending the data\n\n // register safety net timeout:\n var t = setTimeout(safetyCallback, 250);\n\n var clearableCallbackForGA = function clearableCallbackForGA() {\n clearTimeout(t);\n if (!safetyCallbackCalled) {\n hitCallback();\n }\n };\n\n fieldObject.hitCallback = clearableCallbackForGA;\n\n // Send to GA\n send(fieldObject, trackerNames);\n } else {\n // if ga is not defined, return the callback so the application\n // continues to work as expected\n setTimeout(hitCallback, 0);\n }\n}\n\n_OutboundLink2.default.origTrackLink = _OutboundLink2.default.trackLink;\n_OutboundLink2.default.trackLink = outboundLink;\nvar OutboundLink = exports.OutboundLink = _OutboundLink2.default;\nvar testModeAPI = exports.testModeAPI = _testModeAPI2.default;\n\nexports.default = {\n initialize: initialize,\n ga: ga,\n set: set,\n send: send,\n pageview: pageview,\n modalview: modalview,\n timing: timing,\n event: event,\n exception: exception,\n plugin: plugin,\n outboundLink: outboundLink,\n OutboundLink: OutboundLink,\n testModeAPI: _testModeAPI2.default\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = format;\n\nvar _mightBeEmail = __webpack_require__(4);\n\nvar _mightBeEmail2 = _interopRequireDefault(_mightBeEmail);\n\nvar _toTitleCase = __webpack_require__(5);\n\nvar _toTitleCase2 = _interopRequireDefault(_toTitleCase);\n\nvar _warn = __webpack_require__(0);\n\nvar _warn2 = _interopRequireDefault(_warn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar redacted = 'REDACTED (Potential Email Address)';\n\nfunction format(s, titleCase) {\n if ((0, _mightBeEmail2.default)(s)) {\n (0, _warn2.default)('This arg looks like an email address, redacting.');\n return redacted;\n }\n\n if (titleCase) {\n return (0, _toTitleCase2.default)(s);\n }\n\n return s;\n}\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = mightBeEmail;\n// See if s could be an email address. We don't want to send personal data like email.\n// https://support.google.com/analytics/answer/2795983?hl=en\nfunction mightBeEmail(s) {\n // There's no point trying to validate rfc822 fully, just look for ...@...\n return (/[^@]+@[^@]+/.test(s)\n );\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = toTitleCase;\n\nvar _trim = __webpack_require__(1);\n\nvar _trim2 = _interopRequireDefault(_trim);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\\.?|via)$/i; /**\n * To Title Case 2.1 - http://individed.com/code/to-title-case/\n * Copyright 2008-2013 David Gouch. Licensed under the MIT License.\n * https://github.com/gouch/to-title-case\n */\n\nfunction toTitleCase(string) {\n return (0, _trim2.default)(string).replace(/[A-Za-z0-9\\u00C0-\\u00FF]+[^\\s-]*/g, function (match, index, title) {\n if (index > 0 && index + match.length !== title.length && match.search(smallWords) > -1 && title.charAt(index - 2) !== ':' && (title.charAt(index + match.length) !== '-' || title.charAt(index - 1) === '-') && title.charAt(index - 1).search(/[^\\s-]/) < 0) {\n return match.toLowerCase();\n }\n\n if (match.substr(1).search(/[A-Z]|\\../) > -1) {\n return match;\n }\n\n return match.charAt(0).toUpperCase() + match.substr(1);\n });\n}\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = removeLeadingSlash;\nfunction removeLeadingSlash(string) {\n if (string.substring(0, 1) === '/') {\n return string.substring(1);\n }\n\n return string;\n}\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (options) {\n // https://developers.google.com/analytics/devguides/collection/analyticsjs/\n /* eslint-disable */\n (function (i, s, o, g, r, a, m) {\n i['GoogleAnalyticsObject'] = r;\n i[r] = i[r] || function () {\n (i[r].q = i[r].q || []).push(arguments);\n }, i[r].l = 1 * new Date();\n a = s.createElement(o), m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', options && options.gaAddress ? options.gaAddress : 'https://www.google-analytics.com/analytics.js', 'ga');\n /* eslint-enable */\n};\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = log;\nfunction log(s) {\n console.info('[react-ga]', s);\n}\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar gaCalls = exports.gaCalls = [];\n\nexports.default = {\n calls: gaCalls,\n ga: function ga() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n gaCalls.push([].concat(args));\n }\n};\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(11);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(12);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _warn = __webpack_require__(0);\n\nvar _warn2 = _interopRequireDefault(_warn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar NEWTAB = '_blank';\nvar MIDDLECLICK = 1;\n\nvar OutboundLink = function (_Component) {\n _inherits(OutboundLink, _Component);\n\n function OutboundLink() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, OutboundLink);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = OutboundLink.__proto__ || Object.getPrototypeOf(OutboundLink)).call.apply(_ref, [this].concat(args))), _this), _this.handleClick = function (event) {\n var _this$props = _this.props,\n target = _this$props.target,\n eventLabel = _this$props.eventLabel,\n to = _this$props.to,\n onClick = _this$props.onClick;\n\n var eventMeta = { label: eventLabel };\n var sameTarget = target !== NEWTAB;\n var normalClick = !(event.ctrlKey || event.shiftKey || event.metaKey || event.button === MIDDLECLICK);\n\n if (sameTarget && normalClick) {\n event.preventDefault();\n OutboundLink.trackLink(eventMeta, function () {\n window.location.href = to;\n });\n } else {\n OutboundLink.trackLink(eventMeta, function () {});\n }\n\n if (onClick) {\n onClick(event);\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(OutboundLink, [{\n key: 'render',\n value: function render() {\n var props = _extends({}, this.props, {\n href: this.props.to,\n onClick: this.handleClick\n });\n delete props.eventLabel;\n return _react2.default.createElement('a', props);\n }\n }]);\n\n return OutboundLink;\n}(_react.Component);\n\nOutboundLink.propTypes = {\n eventLabel: _propTypes2.default.string.isRequired,\n target: _propTypes2.default.string,\n to: _propTypes2.default.string,\n onClick: _propTypes2.default.func\n};\nOutboundLink.defaultProps = {\n target: null,\n to: null,\n onClick: null\n};\n\nOutboundLink.trackLink = function () {\n (0, _warn2.default)('ga tracking not enabled');\n};\n\nexports.default = OutboundLink;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_11__;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_12__;\n\n/***/ })\n/******/ ]);\n});\n\n/***/ }),\n/* 492 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(34);\n\nvar _HomePage = __webpack_require__(493);\n\nvar _HomePage2 = _interopRequireDefault(_HomePage);\n\nvar _AboutPage = __webpack_require__(535);\n\nvar _AboutPage2 = _interopRequireDefault(_AboutPage);\n\nvar _LoginPage = __webpack_require__(536);\n\nvar _LoginPage2 = _interopRequireDefault(_LoginPage);\n\nvar _ShowPage = __webpack_require__(538);\n\nvar _ShowPage2 = _interopRequireDefault(_ShowPage);\n\nvar _FourOhFourPage = __webpack_require__(555);\n\nvar _FourOhFourPage2 = _interopRequireDefault(_FourOhFourPage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// or use the provided local homepage\nvar App = function App() {\n return _react2.default.createElement(\n _reactRouterDom.Switch,\n null,\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/', component: _HomePage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/about', component: _AboutPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/login', component: _LoginPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/:identifier/:claim', component: _ShowPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/:claim', component: _ShowPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { component: _FourOhFourPage2.default })\n );\n};\n\nexports.default = App;\n\n/***/ }),\n/* 493 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(61);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _NavBar = __webpack_require__(54);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _PublishTool = __webpack_require__(508);\n\nvar _PublishTool2 = _interopRequireDefault(_PublishTool);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar HomePage = function (_React$Component) {\n _inherits(HomePage, _React$Component);\n\n function HomePage() {\n _classCallCheck(this, HomePage);\n\n return _possibleConstructorReturn(this, (HomePage.__proto__ || Object.getPrototypeOf(HomePage)).apply(this, arguments));\n }\n\n _createClass(HomePage, [{\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column' },\n _react2.default.createElement(_SEO2.default, null),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded flex-container--column' },\n _react2.default.createElement(_PublishTool2.default, null)\n )\n );\n }\n }]);\n\n return HomePage;\n}(_react2.default.Component);\n\n;\n\nexports.default = HomePage;\n\n/***/ }),\n/* 494 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactHelmet = __webpack_require__(193);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nvar _propTypes = __webpack_require__(8);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _pageTitle = __webpack_require__(502);\n\nvar _metaTags = __webpack_require__(503);\n\nvar _canonicalLink = __webpack_require__(504);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SEO = function (_React$Component) {\n _inherits(SEO, _React$Component);\n\n function SEO() {\n _classCallCheck(this, SEO);\n\n return _possibleConstructorReturn(this, (SEO.__proto__ || Object.getPrototypeOf(SEO)).apply(this, arguments));\n }\n\n _createClass(SEO, [{\n key: 'render',\n value: function render() {\n // props from state\n var _props = this.props,\n defaultDescription = _props.defaultDescription,\n defaultThumbnail = _props.defaultThumbnail,\n siteDescription = _props.siteDescription,\n siteHost = _props.siteHost,\n siteTitle = _props.siteTitle,\n siteTwitter = _props.siteTwitter;\n // props from parent\n\n var _props2 = this.props,\n asset = _props2.asset,\n channel = _props2.channel,\n pageUri = _props2.pageUri;\n var pageTitle = this.props.pageTitle;\n // create page title, tags, and canonical link\n\n pageTitle = (0, _pageTitle.createPageTitle)(siteTitle, pageTitle);\n var metaTags = (0, _metaTags.createMetaTags)(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail);\n var canonicalLink = (0, _canonicalLink.createCanonicalLink)(asset, channel, pageUri, siteHost);\n // render results\n return _react2.default.createElement(_reactHelmet2.default, {\n title: pageTitle,\n meta: metaTags,\n link: [{ rel: 'canonical', href: canonicalLink }]\n });\n }\n }]);\n\n return SEO;\n}(_react2.default.Component);\n\n;\n\nSEO.propTypes = {\n pageTitle: _propTypes2.default.string,\n pageUri: _propTypes2.default.string,\n channel: _propTypes2.default.object,\n asset: _propTypes2.default.object\n};\n\nexports.default = SEO;\n\n/***/ }),\n/* 495 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar React = __webpack_require__(1);\nvar React__default = _interopDefault(React);\nvar ExecutionEnvironment = _interopDefault(__webpack_require__(496));\nvar shallowEqual = _interopDefault(__webpack_require__(497));\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\n if (typeof reducePropsToState !== 'function') {\n throw new Error('Expected reducePropsToState to be a function.');\n }\n if (typeof handleStateChangeOnClient !== 'function') {\n throw new Error('Expected handleStateChangeOnClient to be a function.');\n }\n if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\n }\n\n var mountedInstances = [];\n var state = void 0;\n\n function emitChange() {\n state = reducePropsToState(mountedInstances.map(function (instance) {\n return instance.props;\n }));\n\n if (SideEffect.canUseDOM) {\n handleStateChangeOnClient(state);\n } else if (mapStateOnServer) {\n state = mapStateOnServer(state);\n }\n }\n\n var SideEffect = function (_Component) {\n _inherits(SideEffect, _Component);\n\n function SideEffect() {\n _classCallCheck(this, SideEffect);\n\n return _possibleConstructorReturn(this, _Component.apply(this, arguments));\n }\n\n // Try to use displayName of wrapped component\n SideEffect.peek = function peek() {\n return state;\n };\n\n // Expose canUseDOM so tests can monkeypatch it\n\n\n SideEffect.rewind = function rewind() {\n if (SideEffect.canUseDOM) {\n throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n }\n\n var recordedState = state;\n state = undefined;\n mountedInstances = [];\n return recordedState;\n };\n\n SideEffect.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !shallowEqual(nextProps, this.props);\n };\n\n SideEffect.prototype.componentWillMount = function componentWillMount() {\n mountedInstances.push(this);\n emitChange();\n };\n\n SideEffect.prototype.componentDidUpdate = function componentDidUpdate() {\n emitChange();\n };\n\n SideEffect.prototype.componentWillUnmount = function componentWillUnmount() {\n var index = mountedInstances.indexOf(this);\n mountedInstances.splice(index, 1);\n emitChange();\n };\n\n SideEffect.prototype.render = function render() {\n return React__default.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(React.Component);\n\n SideEffect.displayName = 'SideEffect(' + getDisplayName(WrappedComponent) + ')';\n SideEffect.canUseDOM = ExecutionEnvironment.canUseDOM;\n\n\n return SideEffect;\n };\n}\n\nmodule.exports = withSideEffect;\n\n\n/***/ }),\n/* 496 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_RESULT__;/*!\n Copyright (c) 2015 Jed Watson.\n Based on code that is Copyright 2013-2015, Facebook, Inc.\n All rights reserved.\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar canUseDOM = !!(\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.document &&\n\t\twindow.document.createElement\n\t);\n\n\tvar ExecutionEnvironment = {\n\n\t\tcanUseDOM: canUseDOM,\n\n\t\tcanUseWorkers: typeof Worker !== 'undefined',\n\n\t\tcanUseEventListeners:\n\t\t\tcanUseDOM && !!(window.addEventListener || window.attachEvent),\n\n\t\tcanUseViewport: canUseDOM && !!window.screen\n\n\t};\n\n\tif (true) {\n\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n\t\t\treturn ExecutionEnvironment;\n\t\t}).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = ExecutionEnvironment;\n\t} else {\n\t\twindow.ExecutionEnvironment = ExecutionEnvironment;\n\t}\n\n}());\n\n\n/***/ }),\n/* 497 */\n/***/ (function(module, exports) {\n\nmodule.exports = function shallowEqual(objA, objB, compare, compareContext) {\n\n var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n if(ret !== void 0) {\n return !!ret;\n }\n\n if(objA === objB) {\n return true;\n }\n\n if(typeof objA !== 'object' || !objA ||\n typeof objB !== 'object' || !objB) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if(keysA.length !== keysB.length) {\n return false;\n }\n\n var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n\n // Test for A's keys different from B.\n for(var idx = 0; idx < keysA.length; idx++) {\n\n var key = keysA[idx];\n\n if(!bHasOwnProperty(key)) {\n return false;\n }\n\n var valueA = objA[key];\n var valueB = objB[key];\n\n ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n if(ret === false ||\n ret === void 0 && valueA !== valueB) {\n return false;\n }\n\n }\n\n return true;\n\n};\n\n\n/***/ }),\n/* 498 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar pSlice = Array.prototype.slice;\nvar objectKeys = __webpack_require__(499);\nvar isArguments = __webpack_require__(500);\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n if (!opts) opts = {};\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n\n } else if (actual instanceof Date && expected instanceof Date) {\n return actual.getTime() === expected.getTime();\n\n // 7.3. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n return opts.strict ? actual === expected : actual == expected;\n\n // 7.4. For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else {\n return objEquiv(actual, expected, opts);\n }\n}\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') return false;\n return true;\n}\n\nfunction objEquiv(a, b, opts) {\n var i, key;\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n return false;\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) return false;\n //~~~I've managed to break Object.keys through screwy arguments passing.\n // Converting to array solves the problem.\n if (isArguments(a)) {\n if (!isArguments(b)) {\n return false;\n }\n a = pSlice.call(a);\n b = pSlice.call(b);\n return deepEqual(a, b, opts);\n }\n if (isBuffer(a)) {\n if (!isBuffer(b)) {\n return false;\n }\n if (a.length !== b.length) return false;\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n try {\n var ka = objectKeys(a),\n kb = objectKeys(b);\n } catch (e) {//happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length != kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) return false;\n }\n return typeof a === typeof b;\n}\n\n\n/***/ }),\n/* 499 */\n/***/ (function(module, exports) {\n\nexports = module.exports = typeof Object.keys === 'function'\n ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n}\n\n\n/***/ }),\n/* 500 */\n/***/ (function(module, exports) {\n\nvar supportsArgumentsClass = (function(){\n return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n return object &&\n typeof object == 'object' &&\n typeof object.length == 'number' &&\n Object.prototype.hasOwnProperty.call(object, 'callee') &&\n !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n false;\n};\n\n\n/***/ }),\n/* 501 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {exports.__esModule = true;\nexports.warn = exports.requestAnimationFrame = exports.reducePropsToState = exports.mapStateOnServer = exports.handleClientStateChange = exports.convertReactPropstoHtmlAttributes = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _objectAssign = __webpack_require__(114);\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nvar _HelmetConstants = __webpack_require__(194);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar encodeSpecialCharacters = function encodeSpecialCharacters(str) {\n var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (encode === false) {\n return String(str);\n }\n\n return String(str).replace(/&/g, \"&\").replace(//g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n};\n\nvar getTitleFromPropsList = function getTitleFromPropsList(propsList) {\n var innermostTitle = getInnermostProperty(propsList, _HelmetConstants.TAG_NAMES.TITLE);\n var innermostTemplate = getInnermostProperty(propsList, _HelmetConstants.HELMET_PROPS.TITLE_TEMPLATE);\n\n if (innermostTemplate && innermostTitle) {\n // use function arg to avoid need to escape $ characters\n return innermostTemplate.replace(/%s/g, function () {\n return innermostTitle;\n });\n }\n\n var innermostDefaultTitle = getInnermostProperty(propsList, _HelmetConstants.HELMET_PROPS.DEFAULT_TITLE);\n\n return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nvar getOnChangeClientState = function getOnChangeClientState(propsList) {\n return getInnermostProperty(propsList, _HelmetConstants.HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || function () {};\n};\n\nvar getAttributesFromPropsList = function getAttributesFromPropsList(tagType, propsList) {\n return propsList.filter(function (props) {\n return typeof props[tagType] !== \"undefined\";\n }).map(function (props) {\n return props[tagType];\n }).reduce(function (tagAttrs, current) {\n return _extends({}, tagAttrs, current);\n }, {});\n};\n\nvar getBaseTagFromPropsList = function getBaseTagFromPropsList(primaryAttributes, propsList) {\n return propsList.filter(function (props) {\n return typeof props[_HelmetConstants.TAG_NAMES.BASE] !== \"undefined\";\n }).map(function (props) {\n return props[_HelmetConstants.TAG_NAMES.BASE];\n }).reverse().reduce(function (innermostBaseTag, tag) {\n if (!innermostBaseTag.length) {\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n return innermostBaseTag.concat(tag);\n }\n }\n }\n\n return innermostBaseTag;\n }, []);\n};\n\nvar getTagsFromPropsList = function getTagsFromPropsList(tagName, primaryAttributes, propsList) {\n // Calculate list of tags, giving priority innermost component (end of the propslist)\n var approvedSeenTags = {};\n\n return propsList.filter(function (props) {\n if (Array.isArray(props[tagName])) {\n return true;\n }\n if (typeof props[tagName] !== \"undefined\") {\n warn(\"Helmet: \" + tagName + \" should be of type \\\"Array\\\". Instead found type \\\"\" + _typeof(props[tagName]) + \"\\\"\");\n }\n return false;\n }).map(function (props) {\n return props[tagName];\n }).reverse().reduce(function (approvedTags, instanceTags) {\n var instanceSeenTags = {};\n\n instanceTags.filter(function (tag) {\n var primaryAttributeKey = void 0;\n var keys = Object.keys(tag);\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n // Special rule with link tags, since rel and href are both primary tags, rel takes priority\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === _HelmetConstants.TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === _HelmetConstants.TAG_PROPERTIES.REL && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n primaryAttributeKey = lowerCaseAttributeKey;\n }\n // Special case for innerHTML which doesn't work lowercased\n if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === _HelmetConstants.TAG_PROPERTIES.INNER_HTML || attributeKey === _HelmetConstants.TAG_PROPERTIES.CSS_TEXT || attributeKey === _HelmetConstants.TAG_PROPERTIES.ITEM_PROP)) {\n primaryAttributeKey = attributeKey;\n }\n }\n\n if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n return false;\n }\n\n var value = tag[primaryAttributeKey].toLowerCase();\n\n if (!approvedSeenTags[primaryAttributeKey]) {\n approvedSeenTags[primaryAttributeKey] = {};\n }\n\n if (!instanceSeenTags[primaryAttributeKey]) {\n instanceSeenTags[primaryAttributeKey] = {};\n }\n\n if (!approvedSeenTags[primaryAttributeKey][value]) {\n instanceSeenTags[primaryAttributeKey][value] = true;\n return true;\n }\n\n return false;\n }).reverse().forEach(function (tag) {\n return approvedTags.push(tag);\n });\n\n // Update seen tags with tags from this instance\n var keys = Object.keys(instanceSeenTags);\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var tagUnion = (0, _objectAssign2.default)({}, approvedSeenTags[attributeKey], instanceSeenTags[attributeKey]);\n\n approvedSeenTags[attributeKey] = tagUnion;\n }\n\n return approvedTags;\n }, []).reverse();\n};\n\nvar getInnermostProperty = function getInnermostProperty(propsList, property) {\n for (var i = propsList.length - 1; i >= 0; i--) {\n var props = propsList[i];\n\n if (props.hasOwnProperty(property)) {\n return props[property];\n }\n }\n\n return null;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n return {\n baseTag: getBaseTagFromPropsList([_HelmetConstants.TAG_PROPERTIES.HREF], propsList),\n bodyAttributes: getAttributesFromPropsList(_HelmetConstants.ATTRIBUTE_NAMES.BODY, propsList),\n defer: getInnermostProperty(propsList, _HelmetConstants.HELMET_PROPS.DEFER),\n encode: getInnermostProperty(propsList, _HelmetConstants.HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n htmlAttributes: getAttributesFromPropsList(_HelmetConstants.ATTRIBUTE_NAMES.HTML, propsList),\n linkTags: getTagsFromPropsList(_HelmetConstants.TAG_NAMES.LINK, [_HelmetConstants.TAG_PROPERTIES.REL, _HelmetConstants.TAG_PROPERTIES.HREF], propsList),\n metaTags: getTagsFromPropsList(_HelmetConstants.TAG_NAMES.META, [_HelmetConstants.TAG_PROPERTIES.NAME, _HelmetConstants.TAG_PROPERTIES.CHARSET, _HelmetConstants.TAG_PROPERTIES.HTTPEQUIV, _HelmetConstants.TAG_PROPERTIES.PROPERTY, _HelmetConstants.TAG_PROPERTIES.ITEM_PROP], propsList),\n noscriptTags: getTagsFromPropsList(_HelmetConstants.TAG_NAMES.NOSCRIPT, [_HelmetConstants.TAG_PROPERTIES.INNER_HTML], propsList),\n onChangeClientState: getOnChangeClientState(propsList),\n scriptTags: getTagsFromPropsList(_HelmetConstants.TAG_NAMES.SCRIPT, [_HelmetConstants.TAG_PROPERTIES.SRC, _HelmetConstants.TAG_PROPERTIES.INNER_HTML], propsList),\n styleTags: getTagsFromPropsList(_HelmetConstants.TAG_NAMES.STYLE, [_HelmetConstants.TAG_PROPERTIES.CSS_TEXT], propsList),\n title: getTitleFromPropsList(propsList),\n titleAttributes: getAttributesFromPropsList(_HelmetConstants.ATTRIBUTE_NAMES.TITLE, propsList)\n };\n};\n\nvar rafPolyfill = function () {\n var clock = Date.now();\n\n return function (callback) {\n var currentTime = Date.now();\n\n if (currentTime - clock > 16) {\n clock = currentTime;\n callback(currentTime);\n } else {\n setTimeout(function () {\n rafPolyfill(callback);\n }, 0);\n }\n };\n}();\n\nvar cafPolyfill = function cafPolyfill(id) {\n return clearTimeout(id);\n};\n\nvar requestAnimationFrame = typeof window !== \"undefined\" ? window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || rafPolyfill : global.requestAnimationFrame || rafPolyfill;\n\nvar cancelAnimationFrame = typeof window !== \"undefined\" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || cafPolyfill : global.cancelAnimationFrame || cafPolyfill;\n\nvar warn = function warn(msg) {\n return console && typeof console.warn === \"function\" && console.warn(msg);\n};\n\nvar _helmetCallback = null;\n\nvar handleClientStateChange = function handleClientStateChange(newState) {\n if (_helmetCallback) {\n cancelAnimationFrame(_helmetCallback);\n }\n\n if (newState.defer) {\n _helmetCallback = requestAnimationFrame(function () {\n commitTagChanges(newState, function () {\n _helmetCallback = null;\n });\n });\n } else {\n commitTagChanges(newState);\n _helmetCallback = null;\n }\n};\n\nvar commitTagChanges = function commitTagChanges(newState, cb) {\n var baseTag = newState.baseTag,\n bodyAttributes = newState.bodyAttributes,\n htmlAttributes = newState.htmlAttributes,\n linkTags = newState.linkTags,\n metaTags = newState.metaTags,\n noscriptTags = newState.noscriptTags,\n onChangeClientState = newState.onChangeClientState,\n scriptTags = newState.scriptTags,\n styleTags = newState.styleTags,\n title = newState.title,\n titleAttributes = newState.titleAttributes;\n\n updateAttributes(_HelmetConstants.TAG_NAMES.BODY, bodyAttributes);\n updateAttributes(_HelmetConstants.TAG_NAMES.HTML, htmlAttributes);\n\n updateTitle(title, titleAttributes);\n\n var tagUpdates = {\n baseTag: updateTags(_HelmetConstants.TAG_NAMES.BASE, baseTag),\n linkTags: updateTags(_HelmetConstants.TAG_NAMES.LINK, linkTags),\n metaTags: updateTags(_HelmetConstants.TAG_NAMES.META, metaTags),\n noscriptTags: updateTags(_HelmetConstants.TAG_NAMES.NOSCRIPT, noscriptTags),\n scriptTags: updateTags(_HelmetConstants.TAG_NAMES.SCRIPT, scriptTags),\n styleTags: updateTags(_HelmetConstants.TAG_NAMES.STYLE, styleTags)\n };\n\n var addedTags = {};\n var removedTags = {};\n\n Object.keys(tagUpdates).forEach(function (tagType) {\n var _tagUpdates$tagType = tagUpdates[tagType],\n newTags = _tagUpdates$tagType.newTags,\n oldTags = _tagUpdates$tagType.oldTags;\n\n\n if (newTags.length) {\n addedTags[tagType] = newTags;\n }\n if (oldTags.length) {\n removedTags[tagType] = tagUpdates[tagType].oldTags;\n }\n });\n\n cb && cb();\n\n onChangeClientState(newState, addedTags, removedTags);\n};\n\nvar flattenArray = function flattenArray(possibleArray) {\n return Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\n};\n\nvar updateTitle = function updateTitle(title, attributes) {\n if (typeof title !== \"undefined\" && document.title !== title) {\n document.title = flattenArray(title);\n }\n\n updateAttributes(_HelmetConstants.TAG_NAMES.TITLE, attributes);\n};\n\nvar updateAttributes = function updateAttributes(tagName, attributes) {\n var elementTag = document.getElementsByTagName(tagName)[0];\n\n if (!elementTag) {\n return;\n }\n\n var helmetAttributeString = elementTag.getAttribute(_HelmetConstants.HELMET_ATTRIBUTE);\n var helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n var attributesToRemove = [].concat(helmetAttributes);\n var attributeKeys = Object.keys(attributes);\n\n for (var i = 0; i < attributeKeys.length; i++) {\n var attribute = attributeKeys[i];\n var value = attributes[attribute] || \"\";\n\n if (elementTag.getAttribute(attribute) !== value) {\n elementTag.setAttribute(attribute, value);\n }\n\n if (helmetAttributes.indexOf(attribute) === -1) {\n helmetAttributes.push(attribute);\n }\n\n var indexToSave = attributesToRemove.indexOf(attribute);\n if (indexToSave !== -1) {\n attributesToRemove.splice(indexToSave, 1);\n }\n }\n\n for (var _i = attributesToRemove.length - 1; _i >= 0; _i--) {\n elementTag.removeAttribute(attributesToRemove[_i]);\n }\n\n if (helmetAttributes.length === attributesToRemove.length) {\n elementTag.removeAttribute(_HelmetConstants.HELMET_ATTRIBUTE);\n } else if (elementTag.getAttribute(_HelmetConstants.HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n elementTag.setAttribute(_HelmetConstants.HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n }\n};\n\nvar updateTags = function updateTags(type, tags) {\n var headElement = document.head || document.querySelector(_HelmetConstants.TAG_NAMES.HEAD);\n var tagNodes = headElement.querySelectorAll(type + \"[\" + _HelmetConstants.HELMET_ATTRIBUTE + \"]\");\n var oldTags = Array.prototype.slice.call(tagNodes);\n var newTags = [];\n var indexToDelete = void 0;\n\n if (tags && tags.length) {\n tags.forEach(function (tag) {\n var newElement = document.createElement(type);\n\n for (var attribute in tag) {\n if (tag.hasOwnProperty(attribute)) {\n if (attribute === _HelmetConstants.TAG_PROPERTIES.INNER_HTML) {\n newElement.innerHTML = tag.innerHTML;\n } else if (attribute === _HelmetConstants.TAG_PROPERTIES.CSS_TEXT) {\n if (newElement.styleSheet) {\n newElement.styleSheet.cssText = tag.cssText;\n } else {\n newElement.appendChild(document.createTextNode(tag.cssText));\n }\n } else {\n var value = typeof tag[attribute] === \"undefined\" ? \"\" : tag[attribute];\n newElement.setAttribute(attribute, value);\n }\n }\n }\n\n newElement.setAttribute(_HelmetConstants.HELMET_ATTRIBUTE, \"true\");\n\n // Remove a duplicate tag from domTagstoRemove, so it isn't cleared.\n if (oldTags.some(function (existingTag, index) {\n indexToDelete = index;\n return newElement.isEqualNode(existingTag);\n })) {\n oldTags.splice(indexToDelete, 1);\n } else {\n newTags.push(newElement);\n }\n });\n }\n\n oldTags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n newTags.forEach(function (tag) {\n return headElement.appendChild(tag);\n });\n\n return {\n oldTags: oldTags,\n newTags: newTags\n };\n};\n\nvar generateElementAttributesAsString = function generateElementAttributesAsString(attributes) {\n return Object.keys(attributes).reduce(function (str, key) {\n var attr = typeof attributes[key] !== \"undefined\" ? key + \"=\\\"\" + attributes[key] + \"\\\"\" : \"\" + key;\n return str ? str + \" \" + attr : attr;\n }, \"\");\n};\n\nvar generateTitleAsString = function generateTitleAsString(type, title, attributes, encode) {\n var attributeString = generateElementAttributesAsString(attributes);\n var flattenedTitle = flattenArray(title);\n return attributeString ? \"<\" + type + \" \" + _HelmetConstants.HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeString + \">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\" : \"<\" + type + \" \" + _HelmetConstants.HELMET_ATTRIBUTE + \"=\\\"true\\\">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\";\n};\n\nvar generateTagsAsString = function generateTagsAsString(type, tags, encode) {\n return tags.reduce(function (str, tag) {\n var attributeHtml = Object.keys(tag).filter(function (attribute) {\n return !(attribute === _HelmetConstants.TAG_PROPERTIES.INNER_HTML || attribute === _HelmetConstants.TAG_PROPERTIES.CSS_TEXT);\n }).reduce(function (string, attribute) {\n var attr = typeof tag[attribute] === \"undefined\" ? attribute : attribute + \"=\\\"\" + encodeSpecialCharacters(tag[attribute], encode) + \"\\\"\";\n return string ? string + \" \" + attr : attr;\n }, \"\");\n\n var tagContent = tag.innerHTML || tag.cssText || \"\";\n\n var isSelfClosing = _HelmetConstants.SELF_CLOSING_TAGS.indexOf(type) === -1;\n\n return str + \"<\" + type + \" \" + _HelmetConstants.HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeHtml + (isSelfClosing ? \"/>\" : \">\" + tagContent + \"\");\n }, \"\");\n};\n\nvar convertElementAttributestoReactProps = function convertElementAttributestoReactProps(attributes) {\n var initProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return Object.keys(attributes).reduce(function (obj, key) {\n obj[_HelmetConstants.REACT_TAG_MAP[key] || key] = attributes[key];\n return obj;\n }, initProps);\n};\n\nvar convertReactPropstoHtmlAttributes = function convertReactPropstoHtmlAttributes(props) {\n var initAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return Object.keys(props).reduce(function (obj, key) {\n obj[_HelmetConstants.HTML_TAG_MAP[key] || key] = props[key];\n return obj;\n }, initAttributes);\n};\n\nvar generateTitleAsReactComponent = function generateTitleAsReactComponent(type, title, attributes) {\n var _initProps;\n\n // assigning into an array to define toString function on it\n var initProps = (_initProps = {\n key: title\n }, _initProps[_HelmetConstants.HELMET_ATTRIBUTE] = true, _initProps);\n var props = convertElementAttributestoReactProps(attributes, initProps);\n\n return [_react2.default.createElement(_HelmetConstants.TAG_NAMES.TITLE, props, title)];\n};\n\nvar generateTagsAsReactComponent = function generateTagsAsReactComponent(type, tags) {\n return tags.map(function (tag, i) {\n var _mappedTag;\n\n var mappedTag = (_mappedTag = {\n key: i\n }, _mappedTag[_HelmetConstants.HELMET_ATTRIBUTE] = true, _mappedTag);\n\n Object.keys(tag).forEach(function (attribute) {\n var mappedAttribute = _HelmetConstants.REACT_TAG_MAP[attribute] || attribute;\n\n if (mappedAttribute === _HelmetConstants.TAG_PROPERTIES.INNER_HTML || mappedAttribute === _HelmetConstants.TAG_PROPERTIES.CSS_TEXT) {\n var content = tag.innerHTML || tag.cssText;\n mappedTag.dangerouslySetInnerHTML = { __html: content };\n } else {\n mappedTag[mappedAttribute] = tag[attribute];\n }\n });\n\n return _react2.default.createElement(type, mappedTag);\n });\n};\n\nvar getMethodsForTag = function getMethodsForTag(type, tags, encode) {\n switch (type) {\n case _HelmetConstants.TAG_NAMES.TITLE:\n return {\n toComponent: function toComponent() {\n return generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode);\n },\n toString: function toString() {\n return generateTitleAsString(type, tags.title, tags.titleAttributes, encode);\n }\n };\n case _HelmetConstants.ATTRIBUTE_NAMES.BODY:\n case _HelmetConstants.ATTRIBUTE_NAMES.HTML:\n return {\n toComponent: function toComponent() {\n return convertElementAttributestoReactProps(tags);\n },\n toString: function toString() {\n return generateElementAttributesAsString(tags);\n }\n };\n default:\n return {\n toComponent: function toComponent() {\n return generateTagsAsReactComponent(type, tags);\n },\n toString: function toString() {\n return generateTagsAsString(type, tags, encode);\n }\n };\n }\n};\n\nvar mapStateOnServer = function mapStateOnServer(_ref) {\n var baseTag = _ref.baseTag,\n bodyAttributes = _ref.bodyAttributes,\n encode = _ref.encode,\n htmlAttributes = _ref.htmlAttributes,\n linkTags = _ref.linkTags,\n metaTags = _ref.metaTags,\n noscriptTags = _ref.noscriptTags,\n scriptTags = _ref.scriptTags,\n styleTags = _ref.styleTags,\n _ref$title = _ref.title,\n title = _ref$title === undefined ? \"\" : _ref$title,\n titleAttributes = _ref.titleAttributes;\n return {\n base: getMethodsForTag(_HelmetConstants.TAG_NAMES.BASE, baseTag, encode),\n bodyAttributes: getMethodsForTag(_HelmetConstants.ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n htmlAttributes: getMethodsForTag(_HelmetConstants.ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n link: getMethodsForTag(_HelmetConstants.TAG_NAMES.LINK, linkTags, encode),\n meta: getMethodsForTag(_HelmetConstants.TAG_NAMES.META, metaTags, encode),\n noscript: getMethodsForTag(_HelmetConstants.TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n script: getMethodsForTag(_HelmetConstants.TAG_NAMES.SCRIPT, scriptTags, encode),\n style: getMethodsForTag(_HelmetConstants.TAG_NAMES.STYLE, styleTags, encode),\n title: getMethodsForTag(_HelmetConstants.TAG_NAMES.TITLE, { title: title, titleAttributes: titleAttributes }, encode)\n };\n};\n\nexports.convertReactPropstoHtmlAttributes = convertReactPropstoHtmlAttributes;\nexports.handleClientStateChange = handleClientStateChange;\nexports.mapStateOnServer = mapStateOnServer;\nexports.reducePropsToState = reducePropsToState;\nexports.requestAnimationFrame = requestAnimationFrame;\nexports.warn = warn;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(62)))\n\n/***/ }),\n/* 502 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar createPageTitle = exports.createPageTitle = function createPageTitle(siteTitle, pageTitle) {\n if (!pageTitle) {\n return \"\" + siteTitle;\n }\n return siteTitle + \" - \" + pageTitle;\n};\n\n/***/ }),\n/* 503 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar determineOgThumbnailContentType = function determineOgThumbnailContentType(thumbnail) {\n if (thumbnail) {\n var fileExt = thumbnail.substring(thumbnail.lastIndexOf('.'));\n switch (fileExt) {\n case 'jpeg':\n case 'jpg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'gif':\n return 'image/gif';\n case 'mp4':\n return 'video/mp4';\n default:\n return 'image/jpeg';\n }\n }\n return '';\n};\n\nvar createBasicMetaTags = function createBasicMetaTags(siteHost, siteDescription, siteTitle, siteTwitter) {\n return [{ property: 'og:title', content: siteTitle }, { property: 'og:url', content: siteHost }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: siteDescription }, { property: 'twitter:site', content: siteTwitter }, { property: 'twitter:card', content: 'summary' }];\n};\n\nvar createChannelMetaTags = function createChannelMetaTags(siteTitle, siteHost, siteTwitter, channel) {\n var name = channel.name,\n longId = channel.longId;\n\n return [{ property: 'og:title', content: name + ' on ' + siteTitle }, { property: 'og:url', content: siteHost + '/' + name + ':' + longId }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: name + ', a channel on ' + siteTitle }, { property: 'twitter:site', content: siteTwitter }, { property: 'twitter:card', content: 'summary' }];\n};\n\nvar createAssetMetaTags = function createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail) {\n var claimData = asset.claimData;\n var contentType = claimData.contentType;\n\n var embedUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name;\n var showUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name;\n var source = siteHost + '/' + claimData.claimId + '/' + claimData.name + '.' + claimData.fileExt;\n var ogTitle = claimData.title || claimData.name;\n var ogDescription = claimData.description || defaultDescription;\n var ogThumbnailContentType = determineOgThumbnailContentType(claimData.thumbnail);\n var ogThumbnail = claimData.thumbnail || defaultThumbnail;\n var metaTags = [{ property: 'og:title', content: ogTitle }, { property: 'og:url', content: showUrl }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: ogDescription }, { property: 'og:image:width', content: 600 }, { property: 'og:image:height', content: 315 }, { property: 'twitter:site', content: siteTwitter }];\n if (contentType === 'video/mp4' || contentType === 'video/webm') {\n metaTags.push({ property: 'og:video', content: source });\n metaTags.push({ property: 'og:video:secure_url', content: source });\n metaTags.push({ property: 'og:video:type', content: contentType });\n metaTags.push({ property: 'og:image', content: ogThumbnail });\n metaTags.push({ property: 'og:image:type', content: ogThumbnailContentType });\n metaTags.push({ property: 'og:type', content: 'video' });\n metaTags.push({ property: 'twitter:card', content: 'player' });\n metaTags.push({ property: 'twitter:player', content: embedUrl });\n metaTags.push({ property: 'twitter:player:width', content: 600 });\n metaTags.push({ property: 'twitter:text:player_width', content: 600 });\n metaTags.push({ property: 'twitter:player:height', content: 337 });\n metaTags.push({ property: 'twitter:player:stream', content: source });\n metaTags.push({ property: 'twitter:player:stream:content_type', content: contentType });\n } else {\n metaTags.push({ property: 'og:image', content: source });\n metaTags.push({ property: 'og:image:type', content: contentType });\n metaTags.push({ property: 'og:type', content: 'article' });\n metaTags.push({ property: 'twitter:card', content: 'summary_large_image' });\n }\n return metaTags;\n};\n\nvar createMetaTags = exports.createMetaTags = function createMetaTags(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail) {\n if (asset) {\n return createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail);\n };\n if (channel) {\n return createChannelMetaTags(siteHost, siteTitle, siteTwitter, channel);\n };\n return createBasicMetaTags(siteDescription, siteHost, siteTitle, siteTwitter);\n};\n\n/***/ }),\n/* 504 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar createBasicCanonicalLink = function createBasicCanonicalLink(page, siteHost) {\n return siteHost + \"/\" + page;\n};\n\nvar createAssetCanonicalLink = function createAssetCanonicalLink(asset, siteHost) {\n var channelName = void 0,\n certificateId = void 0,\n name = void 0,\n claimId = void 0;\n if (asset.claimData) {\n var _asset$claimData = asset.claimData;\n channelName = _asset$claimData.channelName;\n certificateId = _asset$claimData.certificateId;\n name = _asset$claimData.name;\n claimId = _asset$claimData.claimId;\n };\n if (channelName) {\n return siteHost + \"/\" + channelName + \":\" + certificateId + \"/\" + name;\n };\n return siteHost + \"/\" + claimId + \"/\" + name;\n};\n\nvar createChannelCanonicalLink = function createChannelCanonicalLink(channel, siteHost) {\n var name = channel.name,\n longId = channel.longId;\n\n return siteHost + \"/\" + name + \":\" + longId;\n};\n\nvar createCanonicalLink = exports.createCanonicalLink = function createCanonicalLink(asset, channel, page, siteHost) {\n if (asset) {\n return createAssetCanonicalLink(asset, siteHost);\n }\n if (channel) {\n return createChannelCanonicalLink(channel, siteHost);\n }\n return createBasicCanonicalLink(page, siteHost);\n};\n\n/***/ }),\n/* 505 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(34);\n\nvar _Logo = __webpack_require__(506);\n\nvar _Logo2 = _interopRequireDefault(_Logo);\n\nvar _NavBarChannelOptionsDropdown = __webpack_require__(507);\n\nvar _NavBarChannelOptionsDropdown2 = _interopRequireDefault(_NavBarChannelOptionsDropdown);\n\nvar _request = __webpack_require__(53);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar VIEW = 'VIEW';\nvar LOGOUT = 'LOGOUT';\n\nvar NavBar = function (_React$Component) {\n _inherits(NavBar, _React$Component);\n\n function NavBar(props) {\n _classCallCheck(this, NavBar);\n\n var _this = _possibleConstructorReturn(this, (NavBar.__proto__ || Object.getPrototypeOf(NavBar)).call(this, props));\n\n _this.checkForLoggedInUser = _this.checkForLoggedInUser.bind(_this);\n _this.logoutUser = _this.logoutUser.bind(_this);\n _this.handleSelection = _this.handleSelection.bind(_this);\n return _this;\n }\n\n _createClass(NavBar, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n // check to see if the user is already logged in\n this.checkForLoggedInUser();\n }\n }, {\n key: 'checkForLoggedInUser',\n value: function checkForLoggedInUser() {\n var _this2 = this;\n\n var params = { credentials: 'include' };\n (0, _request2.default)('/user', params).then(function (_ref) {\n var data = _ref.data;\n\n _this2.props.onChannelLogin(data.channelName, data.shortChannelId, data.channelClaimId);\n }).catch(function (error) {\n console.log('/user error:', error.message);\n });\n }\n }, {\n key: 'logoutUser',\n value: function logoutUser() {\n var _this3 = this;\n\n var params = { credentials: 'include' };\n (0, _request2.default)('/logout', params).then(function () {\n _this3.props.onChannelLogout();\n }).catch(function (error) {\n console.log('/logout error', error.message);\n });\n }\n }, {\n key: 'handleSelection',\n value: function handleSelection(event) {\n var value = event.target.selectedOptions[0].value;\n switch (value) {\n case LOGOUT:\n this.logoutUser();\n break;\n case VIEW:\n // redirect to channel page\n this.props.history.push('/' + this.props.channelName + ':' + this.props.channelLongId);\n break;\n default:\n break;\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var siteDescription = this.props.siteDescription;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--wide nav-bar' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--short flex-container--row flex-container--space-between-center' },\n _react2.default.createElement(_Logo2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'nav-bar--center' },\n _react2.default.createElement(\n 'span',\n { className: 'nav-bar-tagline' },\n siteDescription\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'nav-bar--right' },\n _react2.default.createElement(\n _reactRouterDom.NavLink,\n { className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/', exact: true },\n 'Publish'\n ),\n _react2.default.createElement(\n _reactRouterDom.NavLink,\n { className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/about' },\n 'About'\n ),\n this.props.channelName ? _react2.default.createElement(_NavBarChannelOptionsDropdown2.default, {\n channelName: this.props.channelName,\n handleSelection: this.handleSelection,\n defaultSelection: this.props.channelName,\n VIEW: VIEW,\n LOGOUT: LOGOUT\n }) : _react2.default.createElement(\n _reactRouterDom.NavLink,\n { id: 'nav-bar-login-link', className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/login' },\n 'Channel'\n )\n )\n )\n );\n }\n }]);\n\n return NavBar;\n}(_react2.default.Component);\n\nexports.default = (0, _reactRouterDom.withRouter)(NavBar);\n\n/***/ }),\n/* 506 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(34);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Logo() {\n return _react2.default.createElement(\n 'svg',\n { version: '1.1', id: 'Layer_1', x: '0px', y: '0px', height: '24px', viewBox: '0 0 80 31', enableBackground: 'new 0 0 80 31', className: 'nav-bar-logo' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { to: '/' },\n _react2.default.createElement(\n 'title',\n null,\n 'Logo'\n ),\n _react2.default.createElement(\n 'desc',\n null,\n 'Spee.ch logo'\n ),\n _react2.default.createElement(\n 'g',\n { id: 'About' },\n _react2.default.createElement(\n 'g',\n { id: 'Publish-Form-V2-_x28_filled_x29_', transform: 'translate(-42.000000, -23.000000)' },\n _react2.default.createElement(\n 'g',\n { id: 'Group-17', transform: 'translate(42.000000, 22.000000)' },\n _react2.default.createElement(\n 'text',\n { transform: 'matrix(1 0 0 1 0 20)', fontSize: '25', fontFamily: 'Roboto' },\n 'Spee 10000000) {\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n throw new Error('Sorry, GIFs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n throw new Error(file.type + ' is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n }\n};\n\n/***/ }),\n/* 512 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(8);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishPreview = function (_React$Component) {\n _inherits(PublishPreview, _React$Component);\n\n function PublishPreview(props) {\n _classCallCheck(this, PublishPreview);\n\n var _this = _possibleConstructorReturn(this, (PublishPreview.__proto__ || Object.getPrototypeOf(PublishPreview)).call(this, props));\n\n _this.state = {\n imgSource: '',\n defaultThumbnail: '/assets/img/video_thumb_default.png'\n };\n return _this;\n }\n\n _createClass(PublishPreview, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.setPreviewImageSource(this.props.file);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(newProps) {\n if (newProps.file !== this.props.file) {\n this.setPreviewImageSource(newProps.file);\n }\n if (newProps.thumbnail !== this.props.thumbnail) {\n if (newProps.thumbnail) {\n this.setPreviewImageSourceFromFile(newProps.thumbnail);\n } else {\n this.setState({ imgSource: this.state.defaultThumbnail });\n }\n }\n }\n }, {\n key: 'setPreviewImageSourceFromFile',\n value: function setPreviewImageSourceFromFile(file) {\n var _this2 = this;\n\n var previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = function () {\n _this2.setState({ imgSource: previewReader.result });\n };\n }\n }, {\n key: 'setPreviewImageSource',\n value: function setPreviewImageSource(file) {\n if (file.type !== 'video/mp4') {\n this.setPreviewImageSourceFromFile(file);\n } else {\n if (this.props.thumbnail) {\n this.setPreviewImageSourceFromFile(this.props.thumbnail);\n }\n this.setState({ imgSource: this.state.defaultThumbnail });\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement('img', {\n id: 'dropzone-preview',\n src: this.state.imgSource,\n className: this.props.dimPreview ? 'dim' : '',\n alt: 'publish preview'\n });\n }\n }]);\n\n return PublishPreview;\n}(_react2.default.Component);\n\n;\n\nPublishPreview.propTypes = {\n dimPreview: _propTypes2.default.bool.isRequired,\n file: _propTypes2.default.object.isRequired,\n thumbnail: _propTypes2.default.object\n};\n\nexports.default = PublishPreview;\n\n/***/ }),\n/* 513 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _publish = __webpack_require__(24);\n\nvar _view = __webpack_require__(514);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n publish = _ref.publish;\n\n return {\n file: publish.file\n };\n};\n\nvar mapDispatchToProps = {\n clearFile: _publish.clearFile,\n startPublish: _publish.startPublish\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 514 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(34);\n\nvar _Dropzone = __webpack_require__(195);\n\nvar _Dropzone2 = _interopRequireDefault(_Dropzone);\n\nvar _PublishTitleInput = __webpack_require__(515);\n\nvar _PublishTitleInput2 = _interopRequireDefault(_PublishTitleInput);\n\nvar _PublishUrlInput = __webpack_require__(517);\n\nvar _PublishUrlInput2 = _interopRequireDefault(_PublishUrlInput);\n\nvar _PublishThumbnailInput = __webpack_require__(520);\n\nvar _PublishThumbnailInput2 = _interopRequireDefault(_PublishThumbnailInput);\n\nvar _PublishMetadataInputs = __webpack_require__(522);\n\nvar _PublishMetadataInputs2 = _interopRequireDefault(_PublishMetadataInputs);\n\nvar _ChannelSelect = __webpack_require__(525);\n\nvar _ChannelSelect2 = _interopRequireDefault(_ChannelSelect);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishDetails = function (_React$Component) {\n _inherits(PublishDetails, _React$Component);\n\n function PublishDetails(props) {\n _classCallCheck(this, PublishDetails);\n\n var _this = _possibleConstructorReturn(this, (PublishDetails.__proto__ || Object.getPrototypeOf(PublishDetails)).call(this, props));\n\n _this.onPublishSubmit = _this.onPublishSubmit.bind(_this);\n return _this;\n }\n\n _createClass(PublishDetails, [{\n key: 'onPublishSubmit',\n value: function onPublishSubmit() {\n this.props.startPublish(this.props.history);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { className: 'row row--no-bottom' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(_PublishTitleInput2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(_Dropzone2.default, null)\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { id: 'publish-active-area', className: 'row row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--wide' },\n _react2.default.createElement(_PublishUrlInput2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--wide' },\n _react2.default.createElement(_ChannelSelect2.default, null)\n ),\n this.props.file.type === 'video/mp4' && _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--wide ' },\n _react2.default.createElement(_PublishThumbnailInput2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--no-bottom row--wide' },\n _react2.default.createElement(_PublishMetadataInputs2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide align-content-center' },\n _react2.default.createElement(\n 'button',\n { id: 'publish-submit', className: 'button--primary button--large', onClick: this.onPublishSubmit },\n 'Publish'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-bottom align-content-center' },\n _react2.default.createElement(\n 'button',\n { className: 'button--cancel', onClick: this.props.clearFile },\n 'Cancel'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--short align-content-center' },\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'By clicking \\'Publish\\', you affirm that you have the rights to publish this content to the LBRY network, and that you understand the properties of publishing it to a decentralized, user-controlled network. ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://lbry.io/learn' },\n 'Read more.'\n )\n )\n )\n )\n )\n );\n }\n }]);\n\n return PublishDetails;\n}(_react2.default.Component);\n\n;\n\nexports.default = (0, _reactRouterDom.withRouter)(PublishDetails);\n\n/***/ }),\n/* 515 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _publish = __webpack_require__(24);\n\nvar _view = __webpack_require__(516);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n title: publish.metadata.title\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onMetadataChange: function onMetadataChange(name, value) {\n dispatch((0, _publish.updateMetadata)(name, value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 516 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishTitleInput = function (_React$Component) {\n _inherits(PublishTitleInput, _React$Component);\n\n function PublishTitleInput(props) {\n _classCallCheck(this, PublishTitleInput);\n\n var _this = _possibleConstructorReturn(this, (PublishTitleInput.__proto__ || Object.getPrototypeOf(PublishTitleInput)).call(this, props));\n\n _this.handleInput = _this.handleInput.bind(_this);\n return _this;\n }\n\n _createClass(PublishTitleInput, [{\n key: 'handleInput',\n value: function handleInput(e) {\n var name = e.target.name;\n var value = e.target.value;\n this.props.onMetadataChange(name, value);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement('input', { type: 'text', id: 'publish-title', className: 'input-text text--large input-text--full-width', name: 'title', placeholder: 'Give your post a title...', onChange: this.handleInput, value: this.props.title });\n }\n }]);\n\n return PublishTitleInput;\n}(_react2.default.Component);\n\nexports.default = PublishTitleInput;\n\n/***/ }),\n/* 517 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _publish = __webpack_require__(24);\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _view = __webpack_require__(518);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n publish = _ref.publish;\n\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n loggedInChannelShortId: channel.loggedInChannel.shortId,\n fileName: publish.file.name,\n publishInChannel: publish.publishInChannel,\n selectedChannel: publish.selectedChannel,\n claim: publish.claim,\n urlError: publish.error.url\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onClaimChange: function onClaimChange(value) {\n dispatch((0, _publish.updateClaim)(value));\n dispatch((0, _publish.updateError)('publishSubmit', null));\n },\n onUrlError: function onUrlError(value) {\n dispatch((0, _publish.updateError)('url', value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 518 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _request = __webpack_require__(53);\n\nvar _request2 = _interopRequireDefault(_request);\n\nvar _PublishUrlMiddleDisplay = __webpack_require__(519);\n\nvar _PublishUrlMiddleDisplay2 = _interopRequireDefault(_PublishUrlMiddleDisplay);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishUrlInput = function (_React$Component) {\n _inherits(PublishUrlInput, _React$Component);\n\n function PublishUrlInput(props) {\n _classCallCheck(this, PublishUrlInput);\n\n var _this = _possibleConstructorReturn(this, (PublishUrlInput.__proto__ || Object.getPrototypeOf(PublishUrlInput)).call(this, props));\n\n _this.handleInput = _this.handleInput.bind(_this);\n return _this;\n }\n\n _createClass(PublishUrlInput, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props = this.props,\n claim = _props.claim,\n fileName = _props.fileName;\n\n if (!claim) {\n this.setClaimName(fileName);\n }\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(_ref) {\n var claim = _ref.claim,\n fileName = _ref.fileName;\n\n // if a new file was chosen, update the claim name\n if (fileName !== this.props.fileName) {\n return this.setClaimName(fileName);\n }\n // if the claim has updated, check its availability\n if (claim !== this.props.claim) {\n this.validateClaim(claim);\n }\n }\n }, {\n key: 'handleInput',\n value: function handleInput(event) {\n var value = event.target.value;\n value = this.cleanseInput(value);\n // update the state\n this.props.onClaimChange(value);\n }\n }, {\n key: 'cleanseInput',\n value: function cleanseInput(input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n }, {\n key: 'setClaimName',\n value: function setClaimName(fileName) {\n var fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.'));\n var cleanClaimName = this.cleanseInput(fileNameWithoutEnding);\n this.props.onClaimChange(cleanClaimName);\n }\n }, {\n key: 'validateClaim',\n value: function validateClaim(claim) {\n var _this2 = this;\n\n if (!claim) {\n return this.props.onUrlError('Enter a url above');\n }\n (0, _request2.default)('/api/claim/availability/' + claim).then(function () {\n _this2.props.onUrlError(null);\n }).catch(function (error) {\n _this2.props.onUrlError(error.message);\n });\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n claim = _props2.claim,\n loggedInChannelName = _props2.loggedInChannelName,\n loggedInChannelShortId = _props2.loggedInChannelShortId,\n publishInChannel = _props2.publishInChannel,\n selectedChannel = _props2.selectedChannel,\n urlError = _props2.urlError;\n\n return _react2.default.createElement(\n 'div',\n { className: 'column column--10 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary span--relative' },\n _react2.default.createElement(\n 'span',\n { className: 'url-text--secondary' },\n 'spee.ch / '\n ),\n _react2.default.createElement(_PublishUrlMiddleDisplay2.default, {\n publishInChannel: publishInChannel,\n selectedChannel: selectedChannel,\n loggedInChannelName: loggedInChannelName,\n loggedInChannelShortId: loggedInChannelShortId\n }),\n _react2.default.createElement('input', { type: 'text', id: 'claim-name-input', className: 'input-text', name: 'claim', placeholder: 'your-url-here', onChange: this.handleInput, value: claim }),\n claim && !urlError && _react2.default.createElement(\n 'span',\n { id: 'input-success-claim-name', className: 'info-message--success span--absolute' },\n '\\u2713'\n ),\n urlError && _react2.default.createElement(\n 'span',\n { id: 'input-success-channel-name', className: 'info-message--failure span--absolute' },\n '\\u2716'\n )\n ),\n _react2.default.createElement(\n 'div',\n null,\n urlError ? _react2.default.createElement(\n 'p',\n { id: 'input-error-claim-name', className: 'info-message--failure' },\n urlError\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Choose a custom url'\n )\n )\n );\n }\n }]);\n\n return PublishUrlInput;\n}(_react2.default.Component);\n\nexports.default = PublishUrlInput;\n\n/***/ }),\n/* 519 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(8);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction UrlMiddle(_ref) {\n var publishInChannel = _ref.publishInChannel,\n selectedChannel = _ref.selectedChannel,\n loggedInChannelName = _ref.loggedInChannelName,\n loggedInChannelShortId = _ref.loggedInChannelShortId;\n\n if (publishInChannel) {\n if (selectedChannel === loggedInChannelName) {\n return _react2.default.createElement(\n 'span',\n { id: 'url-channel', className: 'url-text--secondary' },\n loggedInChannelName,\n ':',\n loggedInChannelShortId,\n ' /'\n );\n }\n return _react2.default.createElement(\n 'span',\n { id: 'url-channel-placeholder', className: 'url-text--secondary tooltip' },\n '@channel',\n _react2.default.createElement(\n 'span',\n {\n className: 'tooltip-text' },\n 'Select a channel below'\n ),\n ' /'\n );\n }\n return _react2.default.createElement(\n 'span',\n { id: 'url-no-channel-placeholder', className: 'url-text--secondary tooltip' },\n 'xyz',\n _react2.default.createElement(\n 'span',\n { className: 'tooltip-text' },\n 'This will be a random id'\n ),\n ' /'\n );\n}\n\nUrlMiddle.propTypes = {\n publishInChannel: _propTypes2.default.bool.isRequired,\n loggedInChannelName: _propTypes2.default.string,\n loggedInChannelShortId: _propTypes2.default.string\n};\n\nexports.default = UrlMiddle;\n\n/***/ }),\n/* 520 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _publish = __webpack_require__(24);\n\nvar _view = __webpack_require__(521);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var file = _ref.publish.file;\n\n return {\n file: file\n };\n};\n\nvar mapDispatchToProps = {\n onNewThumbnail: _publish.onNewThumbnail\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 521 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction dataURItoBlob(dataURI) {\n // convert base64/URLEncoded data component to raw binary data held in a string\n var byteString = atob(dataURI.split(',')[1]);\n // separate out the mime component\n var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n // write the bytes of the string to a typed array\n var ia = new Uint8Array(byteString.length);\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n return new Blob([ia], { type: mimeString });\n}\n\nvar PublishThumbnailInput = function (_React$Component) {\n _inherits(PublishThumbnailInput, _React$Component);\n\n function PublishThumbnailInput(props) {\n _classCallCheck(this, PublishThumbnailInput);\n\n var _this = _possibleConstructorReturn(this, (PublishThumbnailInput.__proto__ || Object.getPrototypeOf(PublishThumbnailInput)).call(this, props));\n\n _this.state = {\n videoSource: null,\n error: null,\n sliderMinRange: 1,\n sliderMaxRange: null,\n sliderValue: null\n };\n _this.handleVideoLoadedData = _this.handleVideoLoadedData.bind(_this);\n _this.handleSliderChange = _this.handleSliderChange.bind(_this);\n _this.createThumbnail = _this.createThumbnail.bind(_this);\n return _this;\n }\n\n _createClass(PublishThumbnailInput, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var file = this.props.file;\n\n this.setVideoSource(file);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n // if file changes\n if (nextProps.file && nextProps.file !== this.props.file) {\n var file = nextProps.file;\n\n this.setVideoSource(file);\n };\n }\n }, {\n key: 'setVideoSource',\n value: function setVideoSource(file) {\n var _this2 = this;\n\n var previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = function () {\n var dataUri = previewReader.result;\n var blob = dataURItoBlob(dataUri);\n var videoSource = URL.createObjectURL(blob);\n _this2.setState({ videoSource: videoSource });\n };\n }\n }, {\n key: 'handleVideoLoadedData',\n value: function handleVideoLoadedData(event) {\n var duration = event.target.duration;\n var totalMinutes = Math.floor(duration / 60);\n var totalSeconds = Math.floor(duration % 60);\n // set the slider\n this.setState({\n sliderMaxRange: duration * 100,\n sliderValue: duration * 100 / 2,\n totalMinutes: totalMinutes,\n totalSeconds: totalSeconds\n });\n // update the current time of the video\n var video = document.getElementById('video-thumb-player');\n video.currentTime = duration / 2;\n }\n }, {\n key: 'handleSliderChange',\n value: function handleSliderChange(event) {\n var value = parseInt(event.target.value);\n // update the slider value\n this.setState({\n sliderValue: value\n });\n // update the current time of the video\n var video = document.getElementById('video-thumb-player');\n video.currentTime = value / 100;\n }\n }, {\n key: 'createThumbnail',\n value: function createThumbnail() {\n // take a snapshot\n var video = document.getElementById('video-thumb-player');\n var canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);\n var dataUrl = canvas.toDataURL();\n var blob = dataURItoBlob(dataUrl);\n var snapshot = new File([blob], 'thumbnail.png', {\n type: 'image/png'\n });\n // set the thumbnail in redux store\n if (snapshot) {\n this.props.onNewThumbnail(snapshot);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _state = this.state,\n error = _state.error,\n videoSource = _state.videoSource,\n sliderMinRange = _state.sliderMinRange,\n sliderMaxRange = _state.sliderMaxRange,\n sliderValue = _state.sliderValue,\n totalMinutes = _state.totalMinutes,\n totalSeconds = _state.totalSeconds;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'label',\n { className: 'label' },\n 'Thumbnail:'\n ),\n _react2.default.createElement('video', {\n id: 'video-thumb-player',\n preload: 'metadata',\n muted: true,\n style: { display: 'none' },\n playsInline: true,\n onLoadedData: this.handleVideoLoadedData,\n src: videoSource,\n onSeeked: this.createThumbnail\n }),\n sliderValue ? _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'flex-container--row flex-container--space-between-center', style: { width: '100%' } },\n _react2.default.createElement(\n 'span',\n { className: 'info-message' },\n '0\\'00\"'\n ),\n _react2.default.createElement(\n 'span',\n { className: 'info-message' },\n totalMinutes,\n '\\'',\n totalSeconds,\n '\"'\n )\n ),\n _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement('input', {\n type: 'range',\n min: sliderMinRange,\n max: sliderMaxRange,\n value: sliderValue,\n className: 'slider',\n onChange: this.handleSliderChange\n })\n )\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'loading... '\n ),\n error ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n error\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Use slider to set thumbnail'\n )\n );\n }\n }]);\n\n return PublishThumbnailInput;\n}(_react2.default.Component);\n\nexports.default = PublishThumbnailInput;\n\n/***/ }),\n/* 522 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _publish = __webpack_require__(24);\n\nvar _view = __webpack_require__(523);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n showMetadataInputs: publish.showMetadataInputs,\n description: publish.metadata.description,\n license: publish.metadata.license,\n nsfw: publish.metadata.nsfw\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onMetadataChange: function onMetadataChange(name, value) {\n dispatch((0, _publish.updateMetadata)(name, value));\n },\n onToggleMetadataInputs: function onToggleMetadataInputs(value) {\n dispatch((0, _publish.toggleMetadataInputs)(value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 523 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ExpandingTextArea = __webpack_require__(524);\n\nvar _ExpandingTextArea2 = _interopRequireDefault(_ExpandingTextArea);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishMetadataInputs = function (_React$Component) {\n _inherits(PublishMetadataInputs, _React$Component);\n\n function PublishMetadataInputs(props) {\n _classCallCheck(this, PublishMetadataInputs);\n\n var _this = _possibleConstructorReturn(this, (PublishMetadataInputs.__proto__ || Object.getPrototypeOf(PublishMetadataInputs)).call(this, props));\n\n _this.toggleShowInputs = _this.toggleShowInputs.bind(_this);\n _this.handleInput = _this.handleInput.bind(_this);\n _this.handleSelect = _this.handleSelect.bind(_this);\n return _this;\n }\n\n _createClass(PublishMetadataInputs, [{\n key: 'toggleShowInputs',\n value: function toggleShowInputs() {\n this.props.onToggleMetadataInputs(!this.props.showMetadataInputs);\n }\n }, {\n key: 'handleInput',\n value: function handleInput(event) {\n var target = event.target;\n var value = target.type === 'checkbox' ? target.checked : target.value;\n var name = target.name;\n this.props.onMetadataChange(name, value);\n }\n }, {\n key: 'handleSelect',\n value: function handleSelect(event) {\n var name = event.target.name;\n var selectedOption = event.target.selectedOptions[0].value;\n this.props.onMetadataChange(name, selectedOption);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { id: 'publish-details', className: 'row row--padded row--no-top row--wide' },\n this.props.showMetadataInputs && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'row row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'label',\n { htmlFor: 'publish-license', className: 'label' },\n 'Description:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7 column--sml-10' },\n _react2.default.createElement(_ExpandingTextArea2.default, {\n id: 'publish-description',\n className: 'textarea textarea--primary textarea--full-width',\n rows: 1,\n maxLength: 2000,\n style: { maxHeight: 200 },\n name: 'description',\n placeholder: 'Optional description',\n value: this.props.description,\n onChange: this.handleInput })\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--med-10' },\n _react2.default.createElement(\n 'label',\n { htmlFor: 'publish-license', className: 'label' },\n 'License:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7 column--sml-10' },\n _react2.default.createElement(\n 'select',\n { type: 'text', name: 'license', id: 'publish-license', className: 'select select--primary', onChange: this.handleSelect },\n _react2.default.createElement(\n 'option',\n { value: ' ' },\n 'Unspecified'\n ),\n _react2.default.createElement(\n 'option',\n { value: 'Public Domain' },\n 'Public Domain'\n ),\n _react2.default.createElement(\n 'option',\n { value: 'Creative Commons' },\n 'Creative Commons'\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3' },\n _react2.default.createElement(\n 'label',\n { htmlFor: 'publish-nsfw', className: 'label' },\n 'Mature:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement('input', { className: 'input-checkbox', type: 'checkbox', id: 'publish-nsfw', name: 'nsfw', value: this.props.nsfw, onChange: this.handleInput })\n )\n )\n ),\n _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: this.toggleShowInputs },\n this.props.showMetadataInputs ? 'less' : 'more'\n )\n );\n }\n }]);\n\n return PublishMetadataInputs;\n}(_react2.default.Component);\n\nexports.default = PublishMetadataInputs;\n\n/***/ }),\n/* 524 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(8);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ExpandingTextarea = function (_Component) {\n _inherits(ExpandingTextarea, _Component);\n\n function ExpandingTextarea(props) {\n _classCallCheck(this, ExpandingTextarea);\n\n var _this = _possibleConstructorReturn(this, (ExpandingTextarea.__proto__ || Object.getPrototypeOf(ExpandingTextarea)).call(this, props));\n\n _this._handleChange = _this._handleChange.bind(_this);\n return _this;\n }\n\n _createClass(ExpandingTextarea, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.adjustTextarea({});\n }\n }, {\n key: '_handleChange',\n value: function _handleChange(event) {\n var onChange = this.props.onChange;\n\n if (onChange) onChange(event);\n this.adjustTextarea(event);\n }\n }, {\n key: 'adjustTextarea',\n value: function adjustTextarea(_ref) {\n var _ref$target = _ref.target,\n target = _ref$target === undefined ? this.el : _ref$target;\n\n target.style.height = 0;\n target.style.height = target.scrollHeight + 'px';\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var rest = _objectWithoutProperties(this.props, []);\n\n return _react2.default.createElement('textarea', _extends({}, rest, {\n ref: function ref(x) {\n return _this2.el = x;\n },\n onChange: this._handleChange\n }));\n }\n }]);\n\n return ExpandingTextarea;\n}(_react.Component);\n\nExpandingTextarea.propTypes = {\n onChange: _propTypes2.default.func\n};\n\nexports.default = ExpandingTextarea;\n\n/***/ }),\n/* 525 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _publish = __webpack_require__(24);\n\nvar _view = __webpack_require__(526);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n publish = _ref.publish;\n\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n publishInChannel: publish.publishInChannel,\n selectedChannel: publish.selectedChannel,\n channelError: publish.error.channel\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onPublishInChannelChange: function onPublishInChannelChange(value) {\n dispatch((0, _publish.updateError)('channel', null));\n dispatch((0, _publish.setPublishInChannel)(value));\n },\n onChannelSelect: function onChannelSelect(value) {\n dispatch((0, _publish.updateError)('channel', null));\n dispatch((0, _publish.updateSelectedChannel)(value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 526 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ChannelLoginForm = __webpack_require__(196);\n\nvar _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm);\n\nvar _ChannelCreateForm = __webpack_require__(197);\n\nvar _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm);\n\nvar _publish_channel_select_states = __webpack_require__(182);\n\nvar states = _interopRequireWildcard(_publish_channel_select_states);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelSelect = function (_React$Component) {\n _inherits(ChannelSelect, _React$Component);\n\n function ChannelSelect(props) {\n _classCallCheck(this, ChannelSelect);\n\n var _this = _possibleConstructorReturn(this, (ChannelSelect.__proto__ || Object.getPrototypeOf(ChannelSelect)).call(this, props));\n\n _this.toggleAnonymousPublish = _this.toggleAnonymousPublish.bind(_this);\n _this.handleSelection = _this.handleSelection.bind(_this);\n return _this;\n }\n\n _createClass(ChannelSelect, [{\n key: 'toggleAnonymousPublish',\n value: function toggleAnonymousPublish(event) {\n var value = event.target.value;\n if (value === 'anonymous') {\n this.props.onPublishInChannelChange(false);\n } else {\n this.props.onPublishInChannelChange(true);\n }\n }\n }, {\n key: 'handleSelection',\n value: function handleSelection(event) {\n var selectedOption = event.target.selectedOptions[0].value;\n this.props.onChannelSelect(selectedOption);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'form',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--med-10' },\n _react2.default.createElement('input', { type: 'radio', name: 'anonymous-or-channel', id: 'anonymous-radio', className: 'input-radio', value: 'anonymous', checked: !this.props.publishInChannel, onChange: this.toggleAnonymousPublish }),\n _react2.default.createElement(\n 'label',\n { className: 'label label--pointer', htmlFor: 'anonymous-radio' },\n 'Anonymous'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7 column--med-10' },\n _react2.default.createElement('input', { type: 'radio', name: 'anonymous-or-channel', id: 'channel-radio', className: 'input-radio', value: 'in a channel', checked: this.props.publishInChannel, onChange: this.toggleAnonymousPublish }),\n _react2.default.createElement(\n 'label',\n { className: 'label label--pointer', htmlFor: 'channel-radio' },\n 'In a channel'\n )\n ),\n this.props.channelError ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n this.props.channelError\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Publish anonymously or in a channel'\n )\n ),\n this.props.publishInChannel && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'column column--3' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'channel-name-select' },\n 'Channel:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement(\n 'select',\n { type: 'text', id: 'channel-name-select', className: 'select select--arrow', value: this.props.selectedChannel, onChange: this.handleSelection },\n this.props.loggedInChannelName && _react2.default.createElement(\n 'option',\n { value: this.props.loggedInChannelName, id: 'publish-channel-select-channel-option' },\n this.props.loggedInChannelName\n ),\n _react2.default.createElement(\n 'option',\n { value: states.LOGIN },\n 'Existing'\n ),\n _react2.default.createElement(\n 'option',\n { value: states.CREATE },\n 'New'\n )\n )\n ),\n this.props.selectedChannel === states.LOGIN && _react2.default.createElement(_ChannelLoginForm2.default, null),\n this.props.selectedChannel === states.CREATE && _react2.default.createElement(_ChannelCreateForm2.default, null)\n )\n );\n }\n }]);\n\n return ChannelSelect;\n}(_react2.default.Component);\n\nexports.default = ChannelSelect;\n\n/***/ }),\n/* 527 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _request = __webpack_require__(53);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelLoginForm = function (_React$Component) {\n _inherits(ChannelLoginForm, _React$Component);\n\n function ChannelLoginForm(props) {\n _classCallCheck(this, ChannelLoginForm);\n\n var _this = _possibleConstructorReturn(this, (ChannelLoginForm.__proto__ || Object.getPrototypeOf(ChannelLoginForm)).call(this, props));\n\n _this.state = {\n error: null,\n name: '',\n password: ''\n };\n _this.handleInput = _this.handleInput.bind(_this);\n _this.loginToChannel = _this.loginToChannel.bind(_this);\n return _this;\n }\n\n _createClass(ChannelLoginForm, [{\n key: 'handleInput',\n value: function handleInput(event) {\n var name = event.target.name;\n var value = event.target.value;\n this.setState(_defineProperty({}, name, value));\n }\n }, {\n key: 'loginToChannel',\n value: function loginToChannel(event) {\n var _this2 = this;\n\n event.preventDefault();\n var params = {\n method: 'POST',\n body: JSON.stringify({ username: this.state.name, password: this.state.password }),\n headers: new Headers({\n 'Content-Type': 'application/json'\n }),\n credentials: 'include'\n };\n (0, _request2.default)('login', params).then(function (_ref) {\n var success = _ref.success,\n channelName = _ref.channelName,\n shortChannelId = _ref.shortChannelId,\n channelClaimId = _ref.channelClaimId,\n message = _ref.message;\n\n if (success) {\n _this2.props.onChannelLogin(channelName, shortChannelId, channelClaimId);\n } else {\n _this2.setState({ 'error': message });\n };\n }).catch(function (error) {\n if (error.message) {\n _this2.setState({ 'error': error.message });\n } else {\n _this2.setState({ 'error': error });\n }\n });\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'form',\n { id: 'channel-login-form' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'channel-login-name-input' },\n 'Name:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary flex-container--row flex-container--left-bottom' },\n _react2.default.createElement(\n 'span',\n null,\n '@'\n ),\n _react2.default.createElement('input', { type: 'text', id: 'channel-login-name-input', className: 'input-text', name: 'name', placeholder: 'Your Channel Name', value: this.state.channelName, onChange: this.handleInput })\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'channel-login-password-input' },\n 'Password:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary' },\n _react2.default.createElement('input', { type: 'password', id: 'channel-login-password-input', name: 'password', className: 'input-text', placeholder: '', value: this.state.channelPassword, onChange: this.handleInput })\n )\n )\n ),\n this.state.error ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n this.state.error\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Enter the name and password for your channel'\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary', onClick: this.loginToChannel },\n 'Authenticate'\n )\n )\n );\n }\n }]);\n\n return ChannelLoginForm;\n}(_react2.default.Component);\n\nexports.default = ChannelLoginForm;\n\n/***/ }),\n/* 528 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ProgressBar = __webpack_require__(129);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _request = __webpack_require__(53);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelCreateForm = function (_React$Component) {\n _inherits(ChannelCreateForm, _React$Component);\n\n function ChannelCreateForm(props) {\n _classCallCheck(this, ChannelCreateForm);\n\n var _this = _possibleConstructorReturn(this, (ChannelCreateForm.__proto__ || Object.getPrototypeOf(ChannelCreateForm)).call(this, props));\n\n _this.state = {\n error: null,\n channel: '',\n password: '',\n status: null\n };\n _this.handleChannelInput = _this.handleChannelInput.bind(_this);\n _this.handleInput = _this.handleInput.bind(_this);\n _this.createChannel = _this.createChannel.bind(_this);\n return _this;\n }\n\n _createClass(ChannelCreateForm, [{\n key: 'cleanseChannelInput',\n value: function cleanseChannelInput(input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n }, {\n key: 'handleChannelInput',\n value: function handleChannelInput(event) {\n var value = event.target.value;\n value = this.cleanseChannelInput(value);\n this.setState({ channel: value });\n if (value) {\n this.updateIsChannelAvailable(value);\n } else {\n this.setState({ error: 'Please enter a channel name' });\n }\n }\n }, {\n key: 'handleInput',\n value: function handleInput(event) {\n var name = event.target.name;\n var value = event.target.value;\n this.setState(_defineProperty({}, name, value));\n }\n }, {\n key: 'updateIsChannelAvailable',\n value: function updateIsChannelAvailable(channel) {\n var _this2 = this;\n\n var channelWithAtSymbol = '@' + channel;\n (0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol).then(function () {\n _this2.setState({ 'error': null });\n }).catch(function (error) {\n _this2.setState({ 'error': error.message });\n });\n }\n }, {\n key: 'checkIsChannelAvailable',\n value: function checkIsChannelAvailable(channel) {\n var channelWithAtSymbol = '@' + channel;\n return (0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol);\n }\n }, {\n key: 'checkIsPasswordProvided',\n value: function checkIsPasswordProvided(password) {\n return new Promise(function (resolve, reject) {\n if (!password || password.length < 1) {\n return reject(new Error('Please provide a password'));\n }\n resolve();\n });\n }\n }, {\n key: 'makePublishChannelRequest',\n value: function makePublishChannelRequest(username, password) {\n var params = {\n method: 'POST',\n body: JSON.stringify({ username: username, password: password }),\n headers: new Headers({\n 'Content-Type': 'application/json'\n }),\n credentials: 'include'\n };\n return new Promise(function (resolve, reject) {\n (0, _request2.default)('/signup', params).then(function (result) {\n return resolve(result);\n }).catch(function (error) {\n reject(new Error('Unfortunately, we encountered an error while creating your channel. Please let us know in Discord! ' + error.message));\n });\n });\n }\n }, {\n key: 'createChannel',\n value: function createChannel(event) {\n var _this3 = this;\n\n event.preventDefault();\n this.checkIsPasswordProvided(this.state.password).then(function () {\n return _this3.checkIsChannelAvailable(_this3.state.channel);\n }).then(function () {\n _this3.setState({ status: 'We are publishing your new channel. Sit tight...' });\n return _this3.makePublishChannelRequest(_this3.state.channel, _this3.state.password);\n }).then(function (result) {\n _this3.setState({ status: null });\n _this3.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId);\n }).catch(function (error) {\n if (error.message) {\n _this3.setState({ 'error': error.message, status: null });\n } else {\n _this3.setState({ 'error': error, status: null });\n };\n });\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n !this.state.status ? _react2.default.createElement(\n 'form',\n { id: 'publish-channel-form' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'new-channel-name' },\n 'Name:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary flex-container--row flex-container--left-bottom span--relative' },\n _react2.default.createElement(\n 'span',\n null,\n '@'\n ),\n _react2.default.createElement('input', { type: 'text', name: 'channel', id: 'new-channel-name', className: 'input-text', placeholder: 'exampleChannelName', value: this.state.channel, onChange: this.handleChannelInput }),\n this.state.channel && !this.state.error && _react2.default.createElement(\n 'span',\n { id: 'input-success-channel-name', className: 'info-message--success span--absolute' },\n '\\u2713'\n ),\n this.state.error && _react2.default.createElement(\n 'span',\n { id: 'input-success-channel-name', className: 'info-message--failure span--absolute' },\n '\\u2716'\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'new-channel-password' },\n 'Password:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary' },\n _react2.default.createElement('input', { type: 'password', name: 'password', id: 'new-channel-password', className: 'input-text', placeholder: '', value: this.state.password, onChange: this.handleInput })\n )\n )\n ),\n this.state.error ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n this.state.error\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Choose a name and password for your channel'\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary', onClick: this.createChannel },\n 'Create Channel'\n )\n )\n ) : _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n this.state.status\n ),\n _react2.default.createElement(_ProgressBar2.default, { size: 12 })\n )\n );\n }\n }]);\n\n return ChannelCreateForm;\n}(_react2.default.Component);\n\nexports.default = ChannelCreateForm;\n\n/***/ }),\n/* 529 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ActiveStatusBar = function ActiveStatusBar() {\n return _react2.default.createElement(\n 'span',\n { className: 'progress-bar progress-bar--active' },\n '| '\n );\n};\n\nexports.default = ActiveStatusBar;\n\n/***/ }),\n/* 530 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar InactiveStatusBar = function InactiveStatusBar() {\n return _react2.default.createElement(\n 'span',\n { className: 'progress-bar progress-bar--inactive' },\n '| '\n );\n};\n\nexports.default = InactiveStatusBar;\n\n/***/ }),\n/* 531 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _publish = __webpack_require__(24);\n\nvar _view = __webpack_require__(532);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n status: publish.status.status,\n message: publish.status.message\n };\n};\n\nvar mapDispatchToProps = {\n clearFile: _publish.clearFile\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 532 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ProgressBar = __webpack_require__(129);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _publish_claim_states = __webpack_require__(192);\n\nvar publishStates = _interopRequireWildcard(_publish_claim_states);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishStatus = function (_React$Component) {\n _inherits(PublishStatus, _React$Component);\n\n function PublishStatus() {\n _classCallCheck(this, PublishStatus);\n\n return _possibleConstructorReturn(this, (PublishStatus.__proto__ || Object.getPrototypeOf(PublishStatus)).apply(this, arguments));\n }\n\n _createClass(PublishStatus, [{\n key: 'render',\n value: function render() {\n var _props = this.props,\n status = _props.status,\n message = _props.message,\n clearFile = _props.clearFile;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column flex-container--center-center' },\n status === publishStates.LOAD_START && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'File is loading to server'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'blue' },\n '0%'\n )\n ),\n status === publishStates.LOADING && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'File is loading to server'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'blue' },\n message\n )\n )\n ),\n status === publishStates.PUBLISHING && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'Upload complete. Your file is now being published on the blockchain...'\n ),\n _react2.default.createElement(_ProgressBar2.default, { size: 12 }),\n _react2.default.createElement(\n 'p',\n null,\n 'Curious what magic is happening here? ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' },\n 'Learn more.'\n )\n )\n ),\n status === publishStates.SUCCESS && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'Your publish is complete! You are being redirected to it now.'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'If you are not automatically redirected, ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: message },\n 'click here.'\n )\n )\n ),\n status === publishStates.FAILED && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'Something went wrong...'\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'strong',\n null,\n message\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'For help, post the above error text in the #speech channel on the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' },\n 'lbry discord'\n )\n ),\n _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: clearFile },\n 'Reset'\n )\n )\n );\n }\n }]);\n\n return PublishStatus;\n}(_react2.default.Component);\n\n;\n\nexports.default = PublishStatus;\n\n/***/ }),\n/* 533 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _view = __webpack_require__(534);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n message: publish.disabledMessage\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 534 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishDisabledMessage = function (_React$Component) {\n _inherits(PublishDisabledMessage, _React$Component);\n\n function PublishDisabledMessage() {\n _classCallCheck(this, PublishDisabledMessage);\n\n return _possibleConstructorReturn(this, (PublishDisabledMessage.__proto__ || Object.getPrototypeOf(PublishDisabledMessage)).apply(this, arguments));\n }\n\n _createClass(PublishDisabledMessage, [{\n key: 'render',\n value: function render() {\n var message = this.props.message;\n console.log('this.props.message:', message);\n return _react2.default.createElement(\n 'div',\n { className: 'row dropzone--disabled row--tall flex-container--column flex-container--center-center' },\n _react2.default.createElement(\n 'p',\n { className: 'text--disabled' },\n 'Publishing is currently disabled.'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'text--disabled' },\n message\n )\n );\n }\n }]);\n\n return PublishDisabledMessage;\n}(_react2.default.Component);\n\nexports.default = PublishDisabledMessage;\n\n/***/ }),\n/* 535 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _NavBar = __webpack_require__(54);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _SEO = __webpack_require__(61);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AboutPage = function (_React$Component) {\n _inherits(AboutPage, _React$Component);\n\n function AboutPage() {\n _classCallCheck(this, AboutPage);\n\n return _possibleConstructorReturn(this, (AboutPage.__proto__ || Object.getPrototypeOf(AboutPage)).apply(this, arguments));\n }\n\n _createClass(AboutPage, [{\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: 'About', pageUri: 'about' }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'p',\n { className: 'pull-quote' },\n 'Spee.ch is an open-source project. Please contribute to the existing site, or fork it and make your own.'\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://twitter.com/spee_ch' },\n 'TWITTER'\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch' },\n 'GITHUB'\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://discord.gg/YjYbwhS' },\n 'DISCORD CHANNEL'\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch/blob/master/README.md' },\n 'DOCUMENTATION'\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'p',\n null,\n 'Spee.ch is a media-hosting site that reads from and publishes content to the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://lbry.io' },\n 'LBRY'\n ),\n ' blockchain.'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'Spee.ch is a hosting service, but with the added benefit that it stores your content on a decentralized network of computers -- the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://lbry.io/get' },\n 'LBRY'\n ),\n ' network. This means that your images are stored in multiple locations without a single point of failure.'\n ),\n _react2.default.createElement(\n 'h3',\n null,\n 'Contribute'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'If you have an idea for your own spee.ch-like site on top of LBRY, fork our ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://github.com/lbryio/spee.ch' },\n 'github repo'\n ),\n ' and go to town!'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'If you want to improve spee.ch, join our ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://discord.gg/YjYbwhS' },\n 'discord channel'\n ),\n ' or solve one of our ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://github.com/lbryio/spee.ch/issues' },\n 'github issues'\n ),\n '.'\n )\n )\n )\n )\n );\n }\n }]);\n\n return AboutPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = AboutPage;\n\n/***/ }),\n/* 536 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _view = __webpack_require__(537);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel;\n\n return {\n loggedInChannelName: channel.loggedInChannel.name\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 537 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(34);\n\nvar _SEO = __webpack_require__(61);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _NavBar = __webpack_require__(54);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _ChannelLoginForm = __webpack_require__(196);\n\nvar _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm);\n\nvar _ChannelCreateForm = __webpack_require__(197);\n\nvar _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LoginPage = function (_React$Component) {\n _inherits(LoginPage, _React$Component);\n\n function LoginPage() {\n _classCallCheck(this, LoginPage);\n\n return _possibleConstructorReturn(this, (LoginPage.__proto__ || Object.getPrototypeOf(LoginPage)).apply(this, arguments));\n }\n\n _createClass(LoginPage, [{\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(newProps) {\n // re-route the user to the homepage if the user is logged in\n if (newProps.loggedInChannelName !== this.props.loggedInChannelName) {\n this.props.history.push('/');\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: 'Login', pageUri: 'login' }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'p',\n null,\n 'Channels allow you to publish and group content under an identity. You can create a channel for yourself, or share one with like-minded friends. You can create 1 channel, or 100, so whether you\\'re ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: '/@catalonia2017:43dcf47163caa21d8404d9fe9b30f78ef3e146a8' },\n 'documenting important events'\n ),\n ', or making a public repository for ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: '/@catGifs' },\n 'cat gifs'\n ),\n ' (password: \\'1234\\'), try creating a channel for it!'\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'h3',\n { className: 'h3--no-bottom' },\n 'Log in to an existing channel:'\n ),\n _react2.default.createElement(_ChannelLoginForm2.default, null),\n _react2.default.createElement(\n 'h3',\n { className: 'h3--no-bottom' },\n 'Create a brand new channel:'\n ),\n _react2.default.createElement(_ChannelCreateForm2.default, null)\n )\n )\n )\n );\n }\n }]);\n\n return LoginPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = (0, _reactRouterDom.withRouter)(LoginPage);\n\n/***/ }),\n/* 538 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _show = __webpack_require__(52);\n\nvar _view = __webpack_require__(539);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n return {\n error: show.request.error,\n requestType: show.request.type\n };\n};\n\nvar mapDispatchToProps = {\n onHandleShowPageUri: _show.onHandleShowPageUri\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 539 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ErrorPage = __webpack_require__(130);\n\nvar _ErrorPage2 = _interopRequireDefault(_ErrorPage);\n\nvar _ShowAssetLite = __webpack_require__(540);\n\nvar _ShowAssetLite2 = _interopRequireDefault(_ShowAssetLite);\n\nvar _ShowAssetDetails = __webpack_require__(543);\n\nvar _ShowAssetDetails2 = _interopRequireDefault(_ShowAssetDetails);\n\nvar _ShowChannel = __webpack_require__(549);\n\nvar _ShowChannel2 = _interopRequireDefault(_ShowChannel);\n\nvar _show_request_types = __webpack_require__(189);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowPage = function (_React$Component) {\n _inherits(ShowPage, _React$Component);\n\n function ShowPage() {\n _classCallCheck(this, ShowPage);\n\n return _possibleConstructorReturn(this, (ShowPage.__proto__ || Object.getPrototypeOf(ShowPage)).apply(this, arguments));\n }\n\n _createClass(ShowPage, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.props.onHandleShowPageUri(this.props.match.params);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n if (nextProps.match.params !== this.props.match.params) {\n this.props.onHandleShowPageUri(nextProps.match.params);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n error = _props.error,\n requestType = _props.requestType;\n\n if (error) {\n return _react2.default.createElement(_ErrorPage2.default, { error: error });\n }\n switch (requestType) {\n case _show_request_types.CHANNEL:\n return _react2.default.createElement(_ShowChannel2.default, null);\n case _show_request_types.ASSET_LITE:\n return _react2.default.createElement(_ShowAssetLite2.default, null);\n case _show_request_types.ASSET_DETAILS:\n return _react2.default.createElement(_ShowAssetDetails2.default, null);\n default:\n return _react2.default.createElement(\n 'p',\n null,\n 'loading...'\n );\n }\n }\n }]);\n\n return ShowPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowPage;\n\n/***/ }),\n/* 540 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _view = __webpack_require__(541);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select request info\n var requestId = show.request.id;\n // select asset info\n var asset = void 0;\n var request = show.requestList[requestId] || null;\n var assetList = show.assetList;\n if (request && assetList) {\n var assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset: asset\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 541 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(61);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _reactRouterDom = __webpack_require__(34);\n\nvar _AssetDisplay = __webpack_require__(198);\n\nvar _AssetDisplay2 = _interopRequireDefault(_AssetDisplay);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowLite = function (_React$Component) {\n _inherits(ShowLite, _React$Component);\n\n function ShowLite() {\n _classCallCheck(this, ShowLite);\n\n return _possibleConstructorReturn(this, (ShowLite.__proto__ || Object.getPrototypeOf(ShowLite)).apply(this, arguments));\n }\n\n _createClass(ShowLite, [{\n key: 'render',\n value: function render() {\n var asset = this.props.asset;\n\n if (asset) {\n var _asset$claimData = asset.claimData,\n name = _asset$claimData.name,\n claimId = _asset$claimData.claimId;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column flex-container--center-center show-lite-container' },\n _react2.default.createElement(_SEO2.default, { pageTitle: name, asset: asset }),\n _react2.default.createElement(_AssetDisplay2.default, null),\n _react2.default.createElement(\n _reactRouterDom.Link,\n { id: 'asset-boilerpate', className: 'link--primary fine-print', to: '/' + claimId + '/' + name },\n 'hosted via Spee.ch'\n )\n );\n }\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded flex-container--column flex-container--center-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'loading asset data...'\n )\n );\n }\n }]);\n\n return ShowLite;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowLite;\n\n/***/ }),\n/* 542 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ProgressBar = __webpack_require__(129);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _asset_display_states = __webpack_require__(126);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AssetDisplay = function (_React$Component) {\n _inherits(AssetDisplay, _React$Component);\n\n function AssetDisplay() {\n _classCallCheck(this, AssetDisplay);\n\n return _possibleConstructorReturn(this, (AssetDisplay.__proto__ || Object.getPrototypeOf(AssetDisplay)).apply(this, arguments));\n }\n\n _createClass(AssetDisplay, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props$asset$claimDat = this.props.asset.claimData,\n name = _props$asset$claimDat.name,\n claimId = _props$asset$claimDat.claimId;\n\n this.props.onFileRequest(name, claimId);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n status = _props.status,\n error = _props.error,\n _props$asset$claimDat2 = _props.asset.claimData,\n name = _props$asset$claimDat2.name,\n claimId = _props$asset$claimDat2.claimId,\n contentType = _props$asset$claimDat2.contentType,\n fileExt = _props$asset$claimDat2.fileExt,\n thumbnail = _props$asset$claimDat2.thumbnail;\n\n return _react2.default.createElement(\n 'div',\n { id: 'asset-display-component' },\n status === _asset_display_states.LOCAL_CHECK && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n null,\n 'Checking to see if Spee.ch has your asset locally...'\n )\n ),\n status === _asset_display_states.UNAVAILABLE && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n null,\n 'Sit tight, we\\'re searching the LBRY blockchain for your asset!'\n ),\n _react2.default.createElement(_ProgressBar2.default, { size: 12 }),\n _react2.default.createElement(\n 'p',\n null,\n 'Curious what magic is happening here? ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' },\n 'Learn more.'\n )\n )\n ),\n status === _asset_display_states.ERROR && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n null,\n 'Unfortunately, we couldn\\'t download your asset from LBRY. You can help us out by sharing the below error message in the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' },\n 'LBRY discord'\n ),\n '.'\n ),\n _react2.default.createElement(\n 'i',\n null,\n _react2.default.createElement(\n 'p',\n { id: 'error-message' },\n error\n )\n )\n ),\n status === _asset_display_states.AVAILABLE && function () {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n return _react2.default.createElement('img', {\n className: 'asset',\n src: '/' + claimId + '/' + name + '.' + fileExt,\n alt: name });\n case 'image/gif':\n return _react2.default.createElement('img', {\n className: 'asset',\n src: '/' + claimId + '/' + name + '.' + fileExt,\n alt: name\n });\n case 'video/mp4':\n return _react2.default.createElement(\n 'video',\n { className: 'asset video', controls: true, poster: thumbnail },\n _react2.default.createElement('source', {\n src: '/' + claimId + '/' + name + '.' + fileExt\n }),\n _react2.default.createElement(\n 'p',\n null,\n 'Your browser does not support the ',\n _react2.default.createElement(\n 'code',\n null,\n 'video'\n ),\n ' element.'\n )\n );\n default:\n return _react2.default.createElement(\n 'p',\n null,\n 'Unsupported file type'\n );\n }\n }()\n );\n }\n }]);\n\n return AssetDisplay;\n}(_react2.default.Component);\n\n;\n\nexports.default = AssetDisplay;\n\n/***/ }),\n/* 543 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _view = __webpack_require__(544);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select request info\n var requestId = show.request.id;\n // select asset info\n var asset = void 0;\n var request = show.requestList[requestId] || null;\n var assetList = show.assetList;\n if (request && assetList) {\n var assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset: asset\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 544 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(61);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _NavBar = __webpack_require__(54);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _ErrorPage = __webpack_require__(130);\n\nvar _ErrorPage2 = _interopRequireDefault(_ErrorPage);\n\nvar _AssetTitle = __webpack_require__(545);\n\nvar _AssetTitle2 = _interopRequireDefault(_AssetTitle);\n\nvar _AssetDisplay = __webpack_require__(198);\n\nvar _AssetDisplay2 = _interopRequireDefault(_AssetDisplay);\n\nvar _AssetInfo = __webpack_require__(547);\n\nvar _AssetInfo2 = _interopRequireDefault(_AssetInfo);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowAssetDetails = function (_React$Component) {\n _inherits(ShowAssetDetails, _React$Component);\n\n function ShowAssetDetails() {\n _classCallCheck(this, ShowAssetDetails);\n\n return _possibleConstructorReturn(this, (ShowAssetDetails.__proto__ || Object.getPrototypeOf(ShowAssetDetails)).apply(this, arguments));\n }\n\n _createClass(ShowAssetDetails, [{\n key: 'render',\n value: function render() {\n var asset = this.props.asset;\n\n if (asset) {\n var name = asset.claimData.name;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: name + ' - details', asset: asset }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(_AssetTitle2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded show-details-container' },\n _react2.default.createElement(_AssetDisplay2.default, null)\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(_AssetInfo2.default, null)\n )\n )\n )\n );\n };\n return _react2.default.createElement(_ErrorPage2.default, { error: 'loading asset data...' });\n }\n }]);\n\n return ShowAssetDetails;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowAssetDetails;\n\n/***/ }),\n/* 545 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _view = __webpack_require__(546);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _show = __webpack_require__(68);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n var _selectAsset = (0, _show.selectAsset)(show),\n title = _selectAsset.claimData.title;\n\n return {\n title: title\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 546 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AssetTitle = function AssetTitle(_ref) {\n var title = _ref.title;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'span',\n { className: 'text--large' },\n title\n )\n );\n};\n\nexports.default = AssetTitle;\n\n/***/ }),\n/* 547 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _view = __webpack_require__(548);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _show = __webpack_require__(68);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select asset\n var asset = (0, _show.selectAsset)(show);\n // return props\n return {\n asset: asset\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 548 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(34);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AssetInfo = function (_React$Component) {\n _inherits(AssetInfo, _React$Component);\n\n function AssetInfo(props) {\n _classCallCheck(this, AssetInfo);\n\n var _this = _possibleConstructorReturn(this, (AssetInfo.__proto__ || Object.getPrototypeOf(AssetInfo)).call(this, props));\n\n _this.copyToClipboard = _this.copyToClipboard.bind(_this);\n return _this;\n }\n\n _createClass(AssetInfo, [{\n key: 'copyToClipboard',\n value: function copyToClipboard(event) {\n var elementToCopy = event.target.dataset.elementtocopy;\n var element = document.getElementById(elementToCopy);\n element.select();\n try {\n document.execCommand('copy');\n } catch (err) {\n this.setState({ error: 'Oops, unable to copy' });\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props$asset = this.props.asset,\n shortId = _props$asset.shortId,\n _props$asset$claimDat = _props$asset.claimData,\n channelName = _props$asset$claimDat.channelName,\n certificateId = _props$asset$claimDat.certificateId,\n description = _props$asset$claimDat.description,\n name = _props$asset$claimDat.name,\n claimId = _props$asset$claimDat.claimId,\n fileExt = _props$asset$claimDat.fileExt,\n contentType = _props$asset$claimDat.contentType,\n thumbnail = _props$asset$claimDat.thumbnail,\n host = _props$asset$claimDat.host;\n\n return _react2.default.createElement(\n 'div',\n null,\n channelName && _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Channel:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { to: '/' + channelName + ':' + certificateId },\n channelName\n )\n )\n )\n ),\n description && _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n description\n )\n ),\n _react2.default.createElement(\n 'div',\n { id: 'show-share-buttons' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Share:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'div',\n {\n className: 'row row--short row--wide flex-container--row flex-container--space-between-bottom flex-container--wrap' },\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://twitter.com/intent/tweet?text=' + host + '/' + shortId + '/' + name },\n 'twitter'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://www.facebook.com/sharer/sharer.php?u=' + host + '/' + shortId + '/' + name },\n 'facebook'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'http://tumblr.com/widgets/share/tool?canonicalUrl=' + host + '/' + shortId + '/' + name },\n 'tumblr'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://www.reddit.com/submit?url=' + host + '/' + shortId + '/' + name + '&title=' + name },\n 'reddit'\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'div',\n { id: 'show-short-link' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Link:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--short row--wide' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement(\n 'div',\n { className: 'input-error', id: 'input-error-copy-short-link', hidden: 'true' },\n 'error here'\n ),\n _react2.default.createElement('input', { type: 'text', id: 'short-link', className: 'input-disabled input-text--full-width', readOnly: true,\n spellCheck: 'false',\n value: host + '/' + shortId + '/' + name + '.' + fileExt,\n onClick: this.select })\n ),\n _react2.default.createElement('div', { className: 'column column--1' }),\n _react2.default.createElement(\n 'div',\n { className: 'column column--2' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary button--wide', 'data-elementtocopy': 'short-link',\n onClick: this.copyToClipboard },\n 'copy'\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { id: 'show-embed-code' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Embed:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--short row--wide' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement(\n 'div',\n { className: 'input-error', id: 'input-error-copy-embed-text', hidden: 'true' },\n 'error here'\n ),\n contentType === 'video/mp4' ? _react2.default.createElement('input', { type: 'text', id: 'embed-text', className: 'input-disabled input-text--full-width', readOnly: true,\n onClick: this.select, spellCheck: 'false',\n value: '' }) : _react2.default.createElement('input', { type: 'text', id: 'embed-text', className: 'input-disabled input-text--full-width', readOnly: true,\n onClick: this.select, spellCheck: 'false',\n value: ''\n })\n ),\n _react2.default.createElement('div', { className: 'column column--1' }),\n _react2.default.createElement(\n 'div',\n { className: 'column column--2' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary button--wide', 'data-elementtocopy': 'embed-text',\n onClick: this.copyToClipboard },\n 'copy'\n )\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'flex-container--row flex-container--space-between-bottom' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { className: 'link--primary', to: '/' + shortId + '/' + name + '.' + fileExt },\n _react2.default.createElement(\n 'span',\n {\n className: 'text' },\n 'Direct Link'\n )\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: host + '/' + claimId + '/' + name + '.' + fileExt, download: name },\n 'Download'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://lbry.io/dmca' },\n 'Report'\n )\n )\n );\n }\n }]);\n\n return AssetInfo;\n}(_react2.default.Component);\n\n;\n\nexports.default = AssetInfo;\n\n/***/ }),\n/* 549 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _view = __webpack_require__(550);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select request info\n var requestId = show.request.id;\n // select request\n var previousRequest = show.requestList[requestId] || null;\n // select channel\n var channel = void 0;\n if (previousRequest) {\n var channelKey = previousRequest.key;\n channel = show.channelList[channelKey] || null;\n }\n return {\n channel: channel\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 550 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(61);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _ErrorPage = __webpack_require__(130);\n\nvar _ErrorPage2 = _interopRequireDefault(_ErrorPage);\n\nvar _NavBar = __webpack_require__(54);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _ChannelClaimsDisplay = __webpack_require__(551);\n\nvar _ChannelClaimsDisplay2 = _interopRequireDefault(_ChannelClaimsDisplay);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowChannel = function (_React$Component) {\n _inherits(ShowChannel, _React$Component);\n\n function ShowChannel() {\n _classCallCheck(this, ShowChannel);\n\n return _possibleConstructorReturn(this, (ShowChannel.__proto__ || Object.getPrototypeOf(ShowChannel)).apply(this, arguments));\n }\n\n _createClass(ShowChannel, [{\n key: 'render',\n value: function render() {\n var channel = this.props.channel;\n\n if (channel) {\n var name = channel.name,\n longId = channel.longId,\n shortId = channel.shortId;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: name, channel: channel }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(\n 'h2',\n null,\n 'channel name: ',\n name\n ),\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'full channel id: ',\n longId\n ),\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'short channel id: ',\n shortId\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(_ChannelClaimsDisplay2.default, null)\n )\n )\n );\n };\n return _react2.default.createElement(_ErrorPage2.default, { error: 'loading channel data...' });\n }\n }]);\n\n return ShowChannel;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowChannel;\n\n/***/ }),\n/* 551 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _show = __webpack_require__(52);\n\nvar _view = __webpack_require__(552);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select channel key\n var request = show.requestList[show.request.id];\n var channelKey = request.key;\n // select channel claims\n var channel = show.channelList[channelKey] || null;\n // return props\n return {\n channelKey: channelKey,\n channel: channel\n };\n};\n\nvar mapDispatchToProps = {\n onUpdateChannelClaims: _show.onUpdateChannelClaims\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 552 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _AssetPreview = __webpack_require__(553);\n\nvar _AssetPreview2 = _interopRequireDefault(_AssetPreview);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelClaimsDisplay = function (_React$Component) {\n _inherits(ChannelClaimsDisplay, _React$Component);\n\n function ChannelClaimsDisplay(props) {\n _classCallCheck(this, ChannelClaimsDisplay);\n\n var _this = _possibleConstructorReturn(this, (ChannelClaimsDisplay.__proto__ || Object.getPrototypeOf(ChannelClaimsDisplay)).call(this, props));\n\n _this.showNextResultsPage = _this.showNextResultsPage.bind(_this);\n _this.showPreviousResultsPage = _this.showPreviousResultsPage.bind(_this);\n return _this;\n }\n\n _createClass(ChannelClaimsDisplay, [{\n key: 'showPreviousResultsPage',\n value: function showPreviousResultsPage() {\n var currentPage = this.props.channel.claimsData.currentPage;\n\n var previousPage = parseInt(currentPage) - 1;\n this.showNewPage(previousPage);\n }\n }, {\n key: 'showNextResultsPage',\n value: function showNextResultsPage() {\n var currentPage = this.props.channel.claimsData.currentPage;\n\n var nextPage = parseInt(currentPage) + 1;\n this.showNewPage(nextPage);\n }\n }, {\n key: 'showNewPage',\n value: function showNewPage(page) {\n var _props = this.props,\n channelKey = _props.channelKey,\n _props$channel = _props.channel,\n name = _props$channel.name,\n longId = _props$channel.longId;\n\n this.props.onUpdateChannelClaims(channelKey, name, longId, page);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props$channel$claims = this.props.channel.claimsData,\n claims = _props$channel$claims.claims,\n currentPage = _props$channel$claims.currentPage,\n totalPages = _props$channel$claims.totalPages;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall' },\n claims.length > 0 ? _react2.default.createElement(\n 'div',\n null,\n claims.map(function (claim, index) {\n return _react2.default.createElement(_AssetPreview2.default, {\n claimData: claim,\n key: claim.name + '-' + index\n });\n }),\n _react2.default.createElement(\n 'div',\n null,\n currentPage > 1 && _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: this.showPreviousResultsPage },\n 'Previous Page'\n ),\n currentPage < totalPages && _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: this.showNextResultsPage },\n 'Next Page'\n )\n )\n ) : _react2.default.createElement(\n 'p',\n null,\n 'There are no claims in this channel'\n )\n );\n }\n }]);\n\n return ChannelClaimsDisplay;\n}(_react2.default.Component);\n\n;\n\nexports.default = ChannelClaimsDisplay;\n\n/***/ }),\n/* 553 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _view = __webpack_require__(554);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var defaultThumbnail = _ref.site.defaults.defaultThumbnail;\n\n return {\n defaultThumbnail: defaultThumbnail\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 554 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(34);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AssetPreview = function AssetPreview(_ref) {\n var defaultThumbnail = _ref.defaultThumbnail,\n _ref$claimData = _ref.claimData,\n name = _ref$claimData.name,\n claimId = _ref$claimData.claimId,\n fileExt = _ref$claimData.fileExt,\n contentType = _ref$claimData.contentType,\n thumbnail = _ref$claimData.thumbnail;\n\n var directSourceLink = claimId + '/' + name + '.' + fileExt;\n var showUrlLink = '/' + claimId + '/' + name;\n return _react2.default.createElement(\n 'div',\n { className: 'asset-holder' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { to: showUrlLink },\n function () {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n case 'image/gif':\n return _react2.default.createElement('img', {\n className: 'asset-preview',\n src: directSourceLink,\n alt: name\n });\n case 'video/mp4':\n return _react2.default.createElement('img', {\n className: 'asset-preview video',\n src: thumbnail || defaultThumbnail,\n alt: name\n });\n default:\n return _react2.default.createElement(\n 'p',\n null,\n 'unsupported file type'\n );\n }\n }()\n )\n );\n};\n\nexports.default = AssetPreview;\n\n/***/ }),\n/* 555 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(6);\n\nvar _view = __webpack_require__(556);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var _ref$site = _ref.site,\n host = _ref$site.host,\n title = _ref$site.title;\n\n return {\n host: host,\n title: title\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 556 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _NavBar = __webpack_require__(54);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _reactHelmet = __webpack_require__(193);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar FourOhForPage = function (_React$Component) {\n _inherits(FourOhForPage, _React$Component);\n\n function FourOhForPage() {\n _classCallCheck(this, FourOhForPage);\n\n return _possibleConstructorReturn(this, (FourOhForPage.__proto__ || Object.getPrototypeOf(FourOhForPage)).apply(this, arguments));\n }\n\n _createClass(FourOhForPage, [{\n key: 'render',\n value: function render() {\n var _props = this.props,\n title = _props.title,\n host = _props.host;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n _reactHelmet2.default,\n null,\n _react2.default.createElement(\n 'title',\n null,\n title,\n ' - 404'\n ),\n _react2.default.createElement('link', { rel: 'canonical', href: host + '/404' })\n ),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'h2',\n null,\n '404'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'That page does not exist'\n )\n )\n );\n }\n }]);\n\n return FourOhForPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = FourOhForPage;\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// bundle.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"public/bundle/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 199);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap d8bb4dffe3e079942c72","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_export.js\n// module id = 0\n// module chunks = 0","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react/index.js\n// module id = 1\n// module chunks = 0","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js\n// module id = 2\n// module chunks = 0","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_global.js\n// module id = 3\n// module chunks = 0","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js\n// module id = 4\n// module chunks = 0","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js\n// module id = 5\n// module chunks = 0","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js\n// module id = 7\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/prop-types/index.js\n// module id = 8\n// module chunks = 0","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js\n// module id = 9\n// module chunks = 0","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js\n// module id = 10\n// module chunks = 0","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js\n// module id = 11\n// module chunks = 0","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js\n// module id = 12\n// module chunks = 0","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n\n if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n throw new Error(\n 'The warning format should be able to uniquely identify this ' +\n 'warning. Please, use a more descriptive format than: ' + format\n );\n }\n\n if (!condition) {\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch(x) {}\n }\n };\n}\n\nmodule.exports = warning;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/warning/browser.js\n// module id = 13\n// module chunks = 0","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js\n// module id = 14\n// module chunks = 0","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_has.js\n// module id = 15\n// module chunks = 0","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js\n// module id = 16\n// module chunks = 0","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js\n// module id = 17\n// module chunks = 0","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js\n// module id = 18\n// module chunks = 0","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js\n// module id = 19\n// module chunks = 0","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js\n// module id = 20\n// module chunks = 0","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js\n// module id = 21\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/invariant/browser.js\n// module id = 22\n// module chunks = 0","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexport var sym = function sym(id) {\n return '@@redux-saga/' + id;\n};\n\nexport var TASK = /*#__PURE__*/sym('TASK');\nexport var HELPER = /*#__PURE__*/sym('HELPER');\nexport var MATCH = /*#__PURE__*/sym('MATCH');\nexport var CANCEL = /*#__PURE__*/sym('CANCEL_PROMISE');\nexport var SAGA_ACTION = /*#__PURE__*/sym('SAGA_ACTION');\nexport var SELF_CANCELLATION = /*#__PURE__*/sym('SELF_CANCELLATION');\nexport var konst = function konst(v) {\n return function () {\n return v;\n };\n};\nexport var kTrue = /*#__PURE__*/konst(true);\nexport var kFalse = /*#__PURE__*/konst(false);\nexport var noop = function noop() {};\nexport var ident = function ident(v) {\n return v;\n};\n\nexport function check(value, predicate, error) {\n if (!predicate(value)) {\n log('error', 'uncaught at check', error);\n throw new Error(error);\n }\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nexport function hasOwn(object, property) {\n return is.notUndef(object) && hasOwnProperty.call(object, property);\n}\n\nexport var is = {\n undef: function undef(v) {\n return v === null || v === undefined;\n },\n notUndef: function notUndef(v) {\n return v !== null && v !== undefined;\n },\n func: function func(f) {\n return typeof f === 'function';\n },\n number: function number(n) {\n return typeof n === 'number';\n },\n string: function string(s) {\n return typeof s === 'string';\n },\n array: Array.isArray,\n object: function object(obj) {\n return obj && !is.array(obj) && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object';\n },\n promise: function promise(p) {\n return p && is.func(p.then);\n },\n iterator: function iterator(it) {\n return it && is.func(it.next) && is.func(it.throw);\n },\n iterable: function iterable(it) {\n return it && is.func(Symbol) ? is.func(it[Symbol.iterator]) : is.array(it);\n },\n task: function task(t) {\n return t && t[TASK];\n },\n observable: function observable(ob) {\n return ob && is.func(ob.subscribe);\n },\n buffer: function buffer(buf) {\n return buf && is.func(buf.isEmpty) && is.func(buf.take) && is.func(buf.put);\n },\n pattern: function pattern(pat) {\n return pat && (is.string(pat) || (typeof pat === 'undefined' ? 'undefined' : _typeof(pat)) === 'symbol' || is.func(pat) || is.array(pat));\n },\n channel: function channel(ch) {\n return ch && is.func(ch.take) && is.func(ch.close);\n },\n helper: function helper(it) {\n return it && it[HELPER];\n },\n stringableFunc: function stringableFunc(f) {\n return is.func(f) && hasOwn(f, 'toString');\n }\n};\n\nexport var object = {\n assign: function assign(target, source) {\n for (var i in source) {\n if (hasOwn(source, i)) {\n target[i] = source[i];\n }\n }\n }\n};\n\nexport function remove(array, item) {\n var index = array.indexOf(item);\n if (index >= 0) {\n array.splice(index, 1);\n }\n}\n\nexport var array = {\n from: function from(obj) {\n var arr = Array(obj.length);\n for (var i in obj) {\n if (hasOwn(obj, i)) {\n arr[i] = obj[i];\n }\n }\n return arr;\n }\n};\n\nexport function deferred() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var def = _extends({}, props);\n var promise = new Promise(function (resolve, reject) {\n def.resolve = resolve;\n def.reject = reject;\n });\n def.promise = promise;\n return def;\n}\n\nexport function arrayOfDeffered(length) {\n var arr = [];\n for (var i = 0; i < length; i++) {\n arr.push(deferred());\n }\n return arr;\n}\n\nexport function delay(ms) {\n var val = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var timeoutId = void 0;\n var promise = new Promise(function (resolve) {\n timeoutId = setTimeout(function () {\n return resolve(val);\n }, ms);\n });\n\n promise[CANCEL] = function () {\n return clearTimeout(timeoutId);\n };\n\n return promise;\n}\n\nexport function createMockTask() {\n var _ref;\n\n var running = true;\n var _result = void 0,\n _error = void 0;\n\n return _ref = {}, _ref[TASK] = true, _ref.isRunning = function isRunning() {\n return running;\n }, _ref.result = function result() {\n return _result;\n }, _ref.error = function error() {\n return _error;\n }, _ref.setRunning = function setRunning(b) {\n return running = b;\n }, _ref.setResult = function setResult(r) {\n return _result = r;\n }, _ref.setError = function setError(e) {\n return _error = e;\n }, _ref;\n}\n\nexport function autoInc() {\n var seed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n return function () {\n return ++seed;\n };\n}\n\nexport var uid = /*#__PURE__*/autoInc();\n\nvar kThrow = function kThrow(err) {\n throw err;\n};\nvar kReturn = function kReturn(value) {\n return { value: value, done: true };\n};\nexport function makeIterator(next) {\n var thro = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : kThrow;\n var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var isHelper = arguments[3];\n\n var iterator = { name: name, next: next, throw: thro, return: kReturn };\n\n if (isHelper) {\n iterator[HELPER] = true;\n }\n if (typeof Symbol !== 'undefined') {\n iterator[Symbol.iterator] = function () {\n return iterator;\n };\n }\n return iterator;\n}\n\n/**\n Print error in a useful way whether in a browser environment\n (with expandable error stack traces), or in a node.js environment\n (text-only log output)\n **/\nexport function log(level, message) {\n var error = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n /*eslint-disable no-console*/\n if (typeof window === 'undefined') {\n console.log('redux-saga ' + level + ': ' + message + '\\n' + (error && error.stack || error));\n } else {\n console[level](message, error);\n }\n}\n\nexport function deprecate(fn, deprecationWarning) {\n return function () {\n if (process.env.NODE_ENV === 'development') log('warn', deprecationWarning);\n return fn.apply(undefined, arguments);\n };\n}\n\nexport var updateIncentive = function updateIncentive(deprecated, preferred) {\n return deprecated + ' has been deprecated in favor of ' + preferred + ', please update your code';\n};\n\nexport var internalErr = function internalErr(err) {\n return new Error('\\n redux-saga: Error checking hooks detected an inconsistent state. This is likely a bug\\n in redux-saga code and not yours. Thanks for reporting this in the project\\'s github repo.\\n Error: ' + err + '\\n');\n};\n\nexport var createSetContextWarning = function createSetContextWarning(ctx, props) {\n return (ctx ? ctx + '.' : '') + 'setContext(props): argument ' + props + ' is not a plain object';\n};\n\nexport var wrapSagaDispatch = function wrapSagaDispatch(dispatch) {\n return function (action) {\n return dispatch(Object.defineProperty(action, SAGA_ACTION, { value: true }));\n };\n};\n\nexport var cloneableGenerator = function cloneableGenerator(generatorFunc) {\n return function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var history = [];\n var gen = generatorFunc.apply(undefined, args);\n return {\n next: function next(arg) {\n history.push(arg);\n return gen.next(arg);\n },\n clone: function clone() {\n var clonedGen = cloneableGenerator(generatorFunc).apply(undefined, args);\n history.forEach(function (arg) {\n return clonedGen.next(arg);\n });\n return clonedGen;\n },\n return: function _return(value) {\n return gen.return(value);\n },\n throw: function _throw(exception) {\n return gen.throw(exception);\n }\n };\n };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux-saga/es/internal/utils.js\n// module id = 23\n// module chunks = 0","import * as actions from 'constants/publish_action_types';\n\n// export action creators\nexport function selectFile (file) {\n return {\n type: actions.FILE_SELECTED,\n data: file,\n };\n};\n\nexport function clearFile () {\n return {\n type: actions.FILE_CLEAR,\n };\n};\n\nexport function updateMetadata (name, value) {\n return {\n type: actions.METADATA_UPDATE,\n data: {\n name,\n value,\n },\n };\n};\n\nexport function updateClaim (value) {\n return {\n type: actions.CLAIM_UPDATE,\n data: value,\n };\n};\n\nexport function setPublishInChannel (channel) {\n return {\n type: actions.SET_PUBLISH_IN_CHANNEL,\n channel,\n };\n};\n\nexport function updatePublishStatus (status, message) {\n return {\n type: actions.PUBLISH_STATUS_UPDATE,\n data: {\n status,\n message,\n },\n };\n};\n\nexport function updateError (name, value) {\n return {\n type: actions.ERROR_UPDATE,\n data: {\n name,\n value,\n },\n };\n};\n\nexport function updateSelectedChannel (channelName) {\n return {\n type: actions.SELECTED_CHANNEL_UPDATE,\n data: channelName,\n };\n};\n\nexport function toggleMetadataInputs (showMetadataInputs) {\n return {\n type: actions.TOGGLE_METADATA_INPUTS,\n data: showMetadataInputs,\n };\n};\n\nexport function onNewThumbnail (file) {\n return {\n type: actions.THUMBNAIL_NEW,\n data: file,\n };\n};\n\nexport function startPublish (history) {\n return {\n type: actions.PUBLISH_START,\n data: { history },\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/actions/publish.js","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js\n// module id = 25\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js\n// module id = 26\n// module chunks = 0","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js\n// module id = 27\n// module chunks = 0","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_core.js\n// module id = 28\n// module chunks = 0","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js\n// module id = 29\n// module chunks = 0","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js\n// module id = 30\n// module chunks = 0","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js\n// module id = 31\n// module chunks = 0","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js\n// module id = 32\n// module chunks = 0","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js\n// module id = 33\n// module chunks = 0","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js\n// module id = 35\n// module chunks = 0","var Map = require('./es6.map');\nvar $export = require('./_export');\nvar shared = require('./_shared')('metadata');\nvar store = shared.store || (shared.store = new (require('./es6.weak-map'))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js\n// module id = 36\n// module chunks = 0","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js\n// module id = 37\n// module chunks = 0","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js\n// module id = 38\n// module chunks = 0","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js\n// module id = 39\n// module chunks = 0","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_uid.js\n// module id = 40\n// module chunks = 0","module.exports = false;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_library.js\n// module id = 41\n// module chunks = 0","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js\n// module id = 42\n// module chunks = 0","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_to-absolute-index.js\n// module id = 43\n// module chunks = 0","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js\n// module id = 44\n// module chunks = 0","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js\n// module id = 45\n// module chunks = 0","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js\n// module id = 46\n// module chunks = 0","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js\n// module id = 47\n// module chunks = 0","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js\n// module id = 48\n// module chunks = 0","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js\n// module id = 49\n// module chunks = 0","import { sym, is, ident, check, deprecate, updateIncentive, createSetContextWarning, SELF_CANCELLATION } from './utils';\nimport { takeEveryHelper, takeLatestHelper, throttleHelper } from './sagaHelpers';\n\nvar IO = /*#__PURE__*/sym('IO');\nvar TAKE = 'TAKE';\nvar PUT = 'PUT';\nvar ALL = 'ALL';\nvar RACE = 'RACE';\nvar CALL = 'CALL';\nvar CPS = 'CPS';\nvar FORK = 'FORK';\nvar JOIN = 'JOIN';\nvar CANCEL = 'CANCEL';\nvar SELECT = 'SELECT';\nvar ACTION_CHANNEL = 'ACTION_CHANNEL';\nvar CANCELLED = 'CANCELLED';\nvar FLUSH = 'FLUSH';\nvar GET_CONTEXT = 'GET_CONTEXT';\nvar SET_CONTEXT = 'SET_CONTEXT';\n\nvar TEST_HINT = '\\n(HINT: if you are getting this errors in tests, consider using createMockTask from redux-saga/utils)';\n\nvar effect = function effect(type, payload) {\n var _ref;\n\n return _ref = {}, _ref[IO] = true, _ref[type] = payload, _ref;\n};\n\nexport var detach = function detach(eff) {\n check(asEffect.fork(eff), is.object, 'detach(eff): argument must be a fork effect');\n eff[FORK].detached = true;\n return eff;\n};\n\nexport function take() {\n var patternOrChannel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '*';\n\n if (arguments.length) {\n check(arguments[0], is.notUndef, 'take(patternOrChannel): patternOrChannel is undefined');\n }\n if (is.pattern(patternOrChannel)) {\n return effect(TAKE, { pattern: patternOrChannel });\n }\n if (is.channel(patternOrChannel)) {\n return effect(TAKE, { channel: patternOrChannel });\n }\n throw new Error('take(patternOrChannel): argument ' + String(patternOrChannel) + ' is not valid channel or a valid pattern');\n}\n\ntake.maybe = function () {\n var eff = take.apply(undefined, arguments);\n eff[TAKE].maybe = true;\n return eff;\n};\n\nexport var takem = /*#__PURE__*/deprecate(take.maybe, /*#__PURE__*/updateIncentive('takem', 'take.maybe'));\n\nexport function put(channel, action) {\n if (arguments.length > 1) {\n check(channel, is.notUndef, 'put(channel, action): argument channel is undefined');\n check(channel, is.channel, 'put(channel, action): argument ' + channel + ' is not a valid channel');\n check(action, is.notUndef, 'put(channel, action): argument action is undefined');\n } else {\n check(channel, is.notUndef, 'put(action): argument action is undefined');\n action = channel;\n channel = null;\n }\n return effect(PUT, { channel: channel, action: action });\n}\n\nput.resolve = function () {\n var eff = put.apply(undefined, arguments);\n eff[PUT].resolve = true;\n return eff;\n};\n\nput.sync = /*#__PURE__*/deprecate(put.resolve, /*#__PURE__*/updateIncentive('put.sync', 'put.resolve'));\n\nexport function all(effects) {\n return effect(ALL, effects);\n}\n\nexport function race(effects) {\n return effect(RACE, effects);\n}\n\nfunction getFnCallDesc(meth, fn, args) {\n check(fn, is.notUndef, meth + ': argument fn is undefined');\n\n var context = null;\n if (is.array(fn)) {\n var _fn = fn;\n context = _fn[0];\n fn = _fn[1];\n } else if (fn.fn) {\n var _fn2 = fn;\n context = _fn2.context;\n fn = _fn2.fn;\n }\n if (context && is.string(fn) && is.func(context[fn])) {\n fn = context[fn];\n }\n check(fn, is.func, meth + ': argument ' + fn + ' is not a function');\n\n return { context: context, fn: fn, args: args };\n}\n\nexport function call(fn) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return effect(CALL, getFnCallDesc('call', fn, args));\n}\n\nexport function apply(context, fn) {\n var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n return effect(CALL, getFnCallDesc('apply', { context: context, fn: fn }, args));\n}\n\nexport function cps(fn) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return effect(CPS, getFnCallDesc('cps', fn, args));\n}\n\nexport function fork(fn) {\n for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return effect(FORK, getFnCallDesc('fork', fn, args));\n}\n\nexport function spawn(fn) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n return detach(fork.apply(undefined, [fn].concat(args)));\n}\n\nexport function join() {\n for (var _len5 = arguments.length, tasks = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n tasks[_key5] = arguments[_key5];\n }\n\n if (tasks.length > 1) {\n return all(tasks.map(function (t) {\n return join(t);\n }));\n }\n var task = tasks[0];\n check(task, is.notUndef, 'join(task): argument task is undefined');\n check(task, is.task, 'join(task): argument ' + task + ' is not a valid Task object ' + TEST_HINT);\n return effect(JOIN, task);\n}\n\nexport function cancel() {\n for (var _len6 = arguments.length, tasks = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n tasks[_key6] = arguments[_key6];\n }\n\n if (tasks.length > 1) {\n return all(tasks.map(function (t) {\n return cancel(t);\n }));\n }\n var task = tasks[0];\n if (tasks.length === 1) {\n check(task, is.notUndef, 'cancel(task): argument task is undefined');\n check(task, is.task, 'cancel(task): argument ' + task + ' is not a valid Task object ' + TEST_HINT);\n }\n return effect(CANCEL, task || SELF_CANCELLATION);\n}\n\nexport function select(selector) {\n for (var _len7 = arguments.length, args = Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {\n args[_key7 - 1] = arguments[_key7];\n }\n\n if (arguments.length === 0) {\n selector = ident;\n } else {\n check(selector, is.notUndef, 'select(selector,[...]): argument selector is undefined');\n check(selector, is.func, 'select(selector,[...]): argument ' + selector + ' is not a function');\n }\n return effect(SELECT, { selector: selector, args: args });\n}\n\n/**\n channel(pattern, [buffer]) => creates an event channel for store actions\n**/\nexport function actionChannel(pattern, buffer) {\n check(pattern, is.notUndef, 'actionChannel(pattern,...): argument pattern is undefined');\n if (arguments.length > 1) {\n check(buffer, is.notUndef, 'actionChannel(pattern, buffer): argument buffer is undefined');\n check(buffer, is.buffer, 'actionChannel(pattern, buffer): argument ' + buffer + ' is not a valid buffer');\n }\n return effect(ACTION_CHANNEL, { pattern: pattern, buffer: buffer });\n}\n\nexport function cancelled() {\n return effect(CANCELLED, {});\n}\n\nexport function flush(channel) {\n check(channel, is.channel, 'flush(channel): argument ' + channel + ' is not valid channel');\n return effect(FLUSH, channel);\n}\n\nexport function getContext(prop) {\n check(prop, is.string, 'getContext(prop): argument ' + prop + ' is not a string');\n return effect(GET_CONTEXT, prop);\n}\n\nexport function setContext(props) {\n check(props, is.object, createSetContextWarning(null, props));\n return effect(SET_CONTEXT, props);\n}\n\nexport function takeEvery(patternOrChannel, worker) {\n for (var _len8 = arguments.length, args = Array(_len8 > 2 ? _len8 - 2 : 0), _key8 = 2; _key8 < _len8; _key8++) {\n args[_key8 - 2] = arguments[_key8];\n }\n\n return fork.apply(undefined, [takeEveryHelper, patternOrChannel, worker].concat(args));\n}\n\nexport function takeLatest(patternOrChannel, worker) {\n for (var _len9 = arguments.length, args = Array(_len9 > 2 ? _len9 - 2 : 0), _key9 = 2; _key9 < _len9; _key9++) {\n args[_key9 - 2] = arguments[_key9];\n }\n\n return fork.apply(undefined, [takeLatestHelper, patternOrChannel, worker].concat(args));\n}\n\nexport function throttle(ms, pattern, worker) {\n for (var _len10 = arguments.length, args = Array(_len10 > 3 ? _len10 - 3 : 0), _key10 = 3; _key10 < _len10; _key10++) {\n args[_key10 - 3] = arguments[_key10];\n }\n\n return fork.apply(undefined, [throttleHelper, ms, pattern, worker].concat(args));\n}\n\nvar createAsEffectType = function createAsEffectType(type) {\n return function (effect) {\n return effect && effect[IO] && effect[type];\n };\n};\n\nexport var asEffect = {\n take: /*#__PURE__*/createAsEffectType(TAKE),\n put: /*#__PURE__*/createAsEffectType(PUT),\n all: /*#__PURE__*/createAsEffectType(ALL),\n race: /*#__PURE__*/createAsEffectType(RACE),\n call: /*#__PURE__*/createAsEffectType(CALL),\n cps: /*#__PURE__*/createAsEffectType(CPS),\n fork: /*#__PURE__*/createAsEffectType(FORK),\n join: /*#__PURE__*/createAsEffectType(JOIN),\n cancel: /*#__PURE__*/createAsEffectType(CANCEL),\n select: /*#__PURE__*/createAsEffectType(SELECT),\n actionChannel: /*#__PURE__*/createAsEffectType(ACTION_CHANNEL),\n cancelled: /*#__PURE__*/createAsEffectType(CANCELLED),\n flush: /*#__PURE__*/createAsEffectType(FLUSH),\n getContext: /*#__PURE__*/createAsEffectType(GET_CONTEXT),\n setContext: /*#__PURE__*/createAsEffectType(SET_CONTEXT)\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux-saga/es/internal/io.js\n// module id = 50\n// module chunks = 0","import * as actions from 'constants/show_action_types';\n\nimport { CHANNEL, ASSET_LITE, ASSET_DETAILS } from 'constants/show_request_types';\n\n// basic request parsing\nexport function onHandleShowPageUri (params) {\n return {\n type: actions.HANDLE_SHOW_URI,\n data: params,\n };\n};\n\nexport function onRequestError (error) {\n return {\n type: actions.REQUEST_ERROR,\n data: error,\n };\n};\n\nexport function onNewChannelRequest (channelName, channelId) {\n const requestType = CHANNEL;\n const requestId = `cr#${channelName}#${channelId}`;\n return {\n type: actions.CHANNEL_REQUEST_NEW,\n data: { requestType, requestId, channelName, channelId },\n };\n};\n\nexport function onNewAssetRequest (name, id, channelName, channelId, extension) {\n const requestType = extension ? ASSET_LITE : ASSET_DETAILS;\n const requestId = `ar#${name}#${id}#${channelName}#${channelId}`;\n return {\n type: actions.ASSET_REQUEST_NEW,\n data: {\n requestType,\n requestId,\n name,\n modifier: {\n id,\n channel: {\n name: channelName,\n id : channelId,\n },\n },\n },\n };\n};\n\nexport function onRequestUpdate (requestType, requestId) {\n return {\n type: actions.REQUEST_UPDATE,\n data: {\n requestType,\n requestId,\n },\n };\n};\n\nexport function addRequestToRequestList (id, error, key) {\n return {\n type: actions.REQUEST_LIST_ADD,\n data: { id, error, key },\n };\n};\n\n// asset actions\n\nexport function addAssetToAssetList (id, error, name, claimId, shortId, claimData) {\n return {\n type: actions.ASSET_ADD,\n data: { id, error, name, claimId, shortId, claimData },\n };\n}\n\n// channel actions\n\nexport function addNewChannelToChannelList (id, name, shortId, longId, claimsData) {\n return {\n type: actions.CHANNEL_ADD,\n data: { id, name, shortId, longId, claimsData },\n };\n};\n\nexport function onUpdateChannelClaims (channelKey, name, longId, page) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_ASYNC,\n data: {channelKey, name, longId, page},\n };\n};\n\nexport function updateChannelClaims (channelListId, claimsData) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_SUCCESS,\n data: {channelListId, claimsData},\n };\n};\n\n// display a file\n\nexport function fileRequested (name, claimId) {\n return {\n type: actions.FILE_REQUESTED,\n data: { name, claimId },\n };\n};\n\nexport function updateFileAvailability (status) {\n return {\n type: actions.FILE_AVAILABILITY_UPDATE,\n data: status,\n };\n};\n\nexport function updateDisplayAssetError (error) {\n return {\n type: actions.DISPLAY_ASSET_ERROR,\n data: error,\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/actions/show.js","import 'cross-fetch/polyfill';\n\n/**\n * Parses the JSON returned by a network request\n *\n * @param {object} response A response from a network request\n *\n * @return {object} The parsed JSON from the request\n */\nfunction parseJSON (response) {\n if (response.status === 204 || response.status === 205) {\n return null;\n }\n return response.json();\n}\n\n/**\n * Parses the status returned by a network request\n *\n * @param {object} response A response from a network request\n * @param {object} response The parsed JSON from the network request\n *\n * @return {object | undefined} Returns object with status and statusText, or undefined\n */\nfunction checkStatus (response, jsonResponse) {\n if (response.status >= 200 && response.status < 300) {\n return jsonResponse;\n }\n const error = new Error(jsonResponse.message);\n error.response = response;\n throw error;\n}\n\n/**\n * Requests a URL, returning a promise\n *\n * @param {string} url The URL we want to request\n * @param {object} [options] The options we want to pass to \"fetch\"\n *\n * @return {object} The response data\n */\n\nexport default function request (url, options) {\n return fetch(url, options)\n .then(response => {\n return Promise.all([response, parseJSON(response)]);\n })\n .then(([response, jsonResponse]) => {\n return checkStatus(response, jsonResponse);\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/request.js","import { connect } from 'react-redux';\nimport { updateLoggedInChannel } from 'actions/channel';\nimport {updateSelectedChannel} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, site }) => {\n return {\n channelName : channel.loggedInChannel.name,\n channelShortId: channel.loggedInChannel.shortId,\n channelLongId : channel.loggedInChannel.longId,\n siteDescription: site.description,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onChannelLogin: (name, shortId, longId) => {\n dispatch(updateLoggedInChannel(name, shortId, longId));\n dispatch(updateSelectedChannel(name));\n },\n onChannelLogout: () => {\n dispatch(updateLoggedInChannel(null, null, null));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/NavBar/index.js","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_set-to-string-tag.js\n// module id = 55\n// module chunks = 0","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_string-trim.js\n// module id = 56\n// module chunks = 0","module.exports = {};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_iterators.js\n// module id = 57\n// module chunks = 0","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_validate-collection.js\n// module id = 58\n// module chunks = 0","// request actions\nexport const HANDLE_SHOW_URI = 'HANDLE_SHOW_URI';\nexport const REQUEST_ERROR = 'REQUEST_ERROR';\nexport const REQUEST_UPDATE = 'REQUEST_UPDATE';\nexport const ASSET_REQUEST_NEW = 'ASSET_REQUEST_NEW';\nexport const CHANNEL_REQUEST_NEW = 'CHANNEL_REQUEST_NEW';\nexport const REQUEST_LIST_ADD = 'REQUEST_LIST_ADD';\n\n// asset actions\nexport const ASSET_ADD = `ASSET_ADD`;\n\n// channel actions\nexport const CHANNEL_ADD = 'CHANNEL_ADD';\n\nexport const CHANNEL_CLAIMS_UPDATE_ASYNC = 'CHANNEL_CLAIMS_UPDATE_ASYNC';\nexport const CHANNEL_CLAIMS_UPDATE_SUCCESS = 'CHANNEL_CLAIMS_UPDATE_SUCCESS';\n\n// asset/file display actions\nexport const FILE_REQUESTED = 'FILE_REQUESTED';\nexport const FILE_AVAILABILITY_UPDATE = 'FILE_AVAILABILITY_UPDATE';\nexport const DISPLAY_ASSET_ERROR = 'DISPLAY_ASSET_ERROR';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/show_action_types.js","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nimport { is, check, remove, MATCH, internalErr, SAGA_ACTION } from './utils';\nimport { buffers } from './buffers';\nimport { asap } from './scheduler';\n\nvar CHANNEL_END_TYPE = '@@redux-saga/CHANNEL_END';\nexport var END = { type: CHANNEL_END_TYPE };\nexport var isEnd = function isEnd(a) {\n return a && a.type === CHANNEL_END_TYPE;\n};\n\nexport function emitter() {\n var subscribers = [];\n\n function subscribe(sub) {\n subscribers.push(sub);\n return function () {\n return remove(subscribers, sub);\n };\n }\n\n function emit(item) {\n var arr = subscribers.slice();\n for (var i = 0, len = arr.length; i < len; i++) {\n arr[i](item);\n }\n }\n\n return {\n subscribe: subscribe,\n emit: emit\n };\n}\n\nexport var INVALID_BUFFER = 'invalid buffer passed to channel factory function';\nexport var UNDEFINED_INPUT_ERROR = 'Saga was provided with an undefined action';\n\nif (process.env.NODE_ENV !== 'production') {\n UNDEFINED_INPUT_ERROR += '\\nHints:\\n - check that your Action Creator returns a non-undefined value\\n - if the Saga was started using runSaga, check that your subscribe source provides the action to its listeners\\n ';\n}\n\nexport function channel() {\n var buffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : buffers.fixed();\n\n var closed = false;\n var takers = [];\n\n check(buffer, is.buffer, INVALID_BUFFER);\n\n function checkForbiddenStates() {\n if (closed && takers.length) {\n throw internalErr('Cannot have a closed channel with pending takers');\n }\n if (takers.length && !buffer.isEmpty()) {\n throw internalErr('Cannot have pending takers with non empty buffer');\n }\n }\n\n function put(input) {\n checkForbiddenStates();\n check(input, is.notUndef, UNDEFINED_INPUT_ERROR);\n if (closed) {\n return;\n }\n if (!takers.length) {\n return buffer.put(input);\n }\n for (var i = 0; i < takers.length; i++) {\n var cb = takers[i];\n if (!cb[MATCH] || cb[MATCH](input)) {\n takers.splice(i, 1);\n return cb(input);\n }\n }\n }\n\n function take(cb) {\n checkForbiddenStates();\n check(cb, is.func, \"channel.take's callback must be a function\");\n\n if (closed && buffer.isEmpty()) {\n cb(END);\n } else if (!buffer.isEmpty()) {\n cb(buffer.take());\n } else {\n takers.push(cb);\n cb.cancel = function () {\n return remove(takers, cb);\n };\n }\n }\n\n function flush(cb) {\n checkForbiddenStates(); // TODO: check if some new state should be forbidden now\n check(cb, is.func, \"channel.flush' callback must be a function\");\n if (closed && buffer.isEmpty()) {\n cb(END);\n return;\n }\n cb(buffer.flush());\n }\n\n function close() {\n checkForbiddenStates();\n if (!closed) {\n closed = true;\n if (takers.length) {\n var arr = takers;\n takers = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n arr[i](END);\n }\n }\n }\n }\n\n return {\n take: take,\n put: put,\n flush: flush,\n close: close,\n get __takers__() {\n return takers;\n },\n get __closed__() {\n return closed;\n }\n };\n}\n\nexport function eventChannel(subscribe) {\n var buffer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : buffers.none();\n var matcher = arguments[2];\n\n /**\n should be if(typeof matcher !== undefined) instead?\n see PR #273 for a background discussion\n **/\n if (arguments.length > 2) {\n check(matcher, is.func, 'Invalid match function passed to eventChannel');\n }\n\n var chan = channel(buffer);\n var close = function close() {\n if (!chan.__closed__) {\n if (unsubscribe) {\n unsubscribe();\n }\n chan.close();\n }\n };\n var unsubscribe = subscribe(function (input) {\n if (isEnd(input)) {\n close();\n return;\n }\n if (matcher && !matcher(input)) {\n return;\n }\n chan.put(input);\n });\n if (chan.__closed__) {\n unsubscribe();\n }\n\n if (!is.func(unsubscribe)) {\n throw new Error('in eventChannel: subscribe should return a function to unsubscribe');\n }\n\n return {\n take: chan.take,\n flush: chan.flush,\n close: close\n };\n}\n\nexport function stdChannel(subscribe) {\n var chan = eventChannel(function (cb) {\n return subscribe(function (input) {\n if (input[SAGA_ACTION]) {\n cb(input);\n return;\n }\n asap(function () {\n return cb(input);\n });\n });\n });\n\n return _extends({}, chan, {\n take: function take(cb, matcher) {\n if (arguments.length > 1) {\n check(matcher, is.func, \"channel.take's matcher argument must be a function\");\n cb[MATCH] = matcher;\n }\n chan.take(cb);\n }\n });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux-saga/es/internal/channel.js\n// module id = 60\n// module chunks = 0","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ site }) => {\n const { defaultDescription, defaultThumbnail, description: siteDescription, host: siteHost, title: siteTitle, twitter: siteTwitter } = site;\n return {\n defaultDescription,\n defaultThumbnail,\n siteDescription,\n siteHost,\n siteTitle,\n siteTwitter,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/SEO/index.js","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 62\n// module chunks = 0","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_iobject.js\n// module id = 63\n// module chunks = 0","exports.f = {}.propertyIsEnumerable;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-pie.js\n// module id = 64\n// module chunks = 0","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_classof.js\n// module id = 65\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\nvar addLeadingSlash = exports.addLeadingSlash = function addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n};\n\nvar stripLeadingSlash = exports.stripLeadingSlash = function stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n};\n\nvar hasBasename = exports.hasBasename = function hasBasename(path, prefix) {\n return new RegExp('^' + prefix + '(\\\\/|\\\\?|#|$)', 'i').test(path);\n};\n\nvar stripBasename = exports.stripBasename = function stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n};\n\nvar stripTrailingSlash = exports.stripTrailingSlash = function stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n};\n\nvar parsePath = exports.parsePath = function parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n\n var hashIndex = pathname.indexOf('#');\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n};\n\nvar createPath = exports.createPath = function createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n\n\n var path = pathname || '/';\n\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : '?' + search;\n\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : '#' + hash;\n\n return path;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/history/PathUtils.js\n// module id = 66\n// module chunks = 0","export var addLeadingSlash = function addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n};\n\nexport var stripLeadingSlash = function stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n};\n\nexport var hasBasename = function hasBasename(path, prefix) {\n return new RegExp('^' + prefix + '(\\\\/|\\\\?|#|$)', 'i').test(path);\n};\n\nexport var stripBasename = function stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n};\n\nexport var stripTrailingSlash = function stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n};\n\nexport var parsePath = function parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n\n var hashIndex = pathname.indexOf('#');\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n};\n\nexport var createPath = function createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n\n\n var path = pathname || '/';\n\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : '?' + search;\n\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : '#' + hash;\n\n return path;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/history/es/PathUtils.js\n// module id = 67\n// module chunks = 0","export const selectAsset = (show) => {\n const request = show.requestList[show.request.id];\n const assetKey = request.key;\n return show.assetList[assetKey];\n};\n\nexport const selectShowState = (state) => {\n return state.show;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/selectors/show.js","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_shared.js\n// module id = 69\n// module chunks = 0","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-includes.js\n// module id = 70\n// module chunks = 0","exports.f = Object.getOwnPropertySymbols;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gops.js\n// module id = 71\n// module chunks = 0","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_is-array.js\n// module id = 72\n// module chunks = 0","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_is-regexp.js\n// module id = 73\n// module chunks = 0","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-detect.js\n// module id = 74\n// module chunks = 0","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_flags.js\n// module id = 75\n// module chunks = 0","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_fix-re-wks.js\n// module id = 76\n// module chunks = 0","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_species-constructor.js\n// module id = 77\n// module chunks = 0","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_collection.js\n// module id = 78\n// module chunks = 0","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_typed.js\n// module id = 79\n// module chunks = 0","'use strict';\n// Forced replacement prototype accessors methods\nmodule.exports = require('./_library') || !require('./_fails')(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete require('./_global')[K];\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-forced-pam.js\n// module id = 80\n// module chunks = 0","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-of.js\n// module id = 81\n// module chunks = 0","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar ctx = require('./_ctx');\nvar forOf = require('./_for-of');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-from.js\n// module id = 82\n// module chunks = 0","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/emptyFunction.js\n// module id = 83\n// module chunks = 0","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport { parsePath } from './PathUtils';\n\nexport var createLocation = function createLocation(path, state, key, currentLocation) {\n var location = void 0;\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n};\n\nexport var locationsAreEqual = function locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/history/es/LocationUtils.js\n// module id = 84\n// module chunks = 0","import { kTrue, noop } from './utils';\n\nexport var BUFFER_OVERFLOW = \"Channel's Buffer overflow!\";\n\nvar ON_OVERFLOW_THROW = 1;\nvar ON_OVERFLOW_DROP = 2;\nvar ON_OVERFLOW_SLIDE = 3;\nvar ON_OVERFLOW_EXPAND = 4;\n\nvar zeroBuffer = { isEmpty: kTrue, put: noop, take: noop };\n\nfunction ringBuffer() {\n var limit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;\n var overflowAction = arguments[1];\n\n var arr = new Array(limit);\n var length = 0;\n var pushIndex = 0;\n var popIndex = 0;\n\n var push = function push(it) {\n arr[pushIndex] = it;\n pushIndex = (pushIndex + 1) % limit;\n length++;\n };\n\n var take = function take() {\n if (length != 0) {\n var it = arr[popIndex];\n arr[popIndex] = null;\n length--;\n popIndex = (popIndex + 1) % limit;\n return it;\n }\n };\n\n var flush = function flush() {\n var items = [];\n while (length) {\n items.push(take());\n }\n return items;\n };\n\n return {\n isEmpty: function isEmpty() {\n return length == 0;\n },\n put: function put(it) {\n if (length < limit) {\n push(it);\n } else {\n var doubledLimit = void 0;\n switch (overflowAction) {\n case ON_OVERFLOW_THROW:\n throw new Error(BUFFER_OVERFLOW);\n case ON_OVERFLOW_SLIDE:\n arr[pushIndex] = it;\n pushIndex = (pushIndex + 1) % limit;\n popIndex = pushIndex;\n break;\n case ON_OVERFLOW_EXPAND:\n doubledLimit = 2 * limit;\n\n arr = flush();\n\n length = arr.length;\n pushIndex = arr.length;\n popIndex = 0;\n\n arr.length = doubledLimit;\n limit = doubledLimit;\n\n push(it);\n break;\n default:\n // DROP\n }\n }\n },\n take: take,\n flush: flush\n };\n}\n\nexport var buffers = {\n none: function none() {\n return zeroBuffer;\n },\n fixed: function fixed(limit) {\n return ringBuffer(limit, ON_OVERFLOW_THROW);\n },\n dropping: function dropping(limit) {\n return ringBuffer(limit, ON_OVERFLOW_DROP);\n },\n sliding: function sliding(limit) {\n return ringBuffer(limit, ON_OVERFLOW_SLIDE);\n },\n expanding: function expanding(initialSize) {\n return ringBuffer(initialSize, ON_OVERFLOW_EXPAND);\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux-saga/es/internal/buffers.js\n// module id = 85\n// module chunks = 0","export const selectSiteState = (state) => {\n return state.site;\n};\n\nexport const selectSiteHost = (state) => {\n return state.site.host;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/selectors/site.js","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_dom-create.js\n// module id = 87\n// module chunks = 0","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_wks-define.js\n// module id = 88\n// module chunks = 0","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_shared-key.js\n// module id = 89\n// module chunks = 0","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_enum-bug-keys.js\n// module id = 90\n// module chunks = 0","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_html.js\n// module id = 91\n// module chunks = 0","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_set-proto.js\n// module id = 92\n// module chunks = 0","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_string-ws.js\n// module id = 93\n// module chunks = 0","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_inherit-if-required.js\n// module id = 94\n// module chunks = 0","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_string-repeat.js\n// module id = 95\n// module chunks = 0","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_math-sign.js\n// module id = 96\n// module chunks = 0","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_math-expm1.js\n// module id = 97\n// module chunks = 0","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_string-at.js\n// module id = 98\n// module chunks = 0","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-define.js\n// module id = 99\n// module chunks = 0","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-create.js\n// module id = 100\n// module chunks = 0","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_string-context.js\n// module id = 101\n// module chunks = 0","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_fails-is-regexp.js\n// module id = 102\n// module chunks = 0","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_is-array-iter.js\n// module id = 103\n// module chunks = 0","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_create-property.js\n// module id = 104\n// module chunks = 0","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/core.get-iterator-method.js\n// module id = 105\n// module chunks = 0","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-create.js\n// module id = 106\n// module chunks = 0","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-fill.js\n// module id = 107\n// module chunks = 0","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.iterator.js\n// module id = 108\n// module chunks = 0","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_task.js\n// module id = 109\n// module chunks = 0","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_microtask.js\n// module id = 110\n// module chunks = 0","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_new-promise-capability.js\n// module id = 111\n// module chunks = 0","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_typed-buffer.js\n// module id = 112\n// module chunks = 0","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_user-agent.js\n// module id = 113\n// module chunks = 0","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/object-assign/index.js\n// module id = 114\n// module chunks = 0","/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nexport default function warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n /* eslint-disable no-empty */\n } catch (e) {}\n /* eslint-enable no-empty */\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-redux/es/utils/warning.js\n// module id = 115\n// module chunks = 0","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash-es/isPlainObject.js\n// module id = 117\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\nexports.locationsAreEqual = exports.createLocation = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _resolvePathname = require('resolve-pathname');\n\nvar _resolvePathname2 = _interopRequireDefault(_resolvePathname);\n\nvar _valueEqual = require('value-equal');\n\nvar _valueEqual2 = _interopRequireDefault(_valueEqual);\n\nvar _PathUtils = require('./PathUtils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar createLocation = exports.createLocation = function createLocation(path, state, key, currentLocation) {\n var location = void 0;\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = (0, _PathUtils.parsePath)(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = (0, _resolvePathname2.default)(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n};\n\nvar locationsAreEqual = exports.locationsAreEqual = function locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && (0, _valueEqual2.default)(a.state, b.state);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/history/LocationUtils.js\n// module id = 118\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar createTransitionManager = function createTransitionManager() {\n var prompt = null;\n\n var setPrompt = function setPrompt(nextPrompt) {\n (0, _warning2.default)(prompt == null, 'A history supports only one prompt at a time');\n\n prompt = nextPrompt;\n\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n };\n\n var confirmTransitionTo = function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n (0, _warning2.default)(false, 'A history needs a getUserConfirmation function in order to use a prompt message');\n\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n };\n\n var listeners = [];\n\n var appendListener = function appendListener(fn) {\n var isActive = true;\n\n var listener = function listener() {\n if (isActive) fn.apply(undefined, arguments);\n };\n\n listeners.push(listener);\n\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n };\n\n var notifyListeners = function notifyListeners() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(undefined, args);\n });\n };\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n};\n\nexports.default = createTransitionManager;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/history/createTransitionManager.js\n// module id = 119\n// module chunks = 0","// Written in this round about way for babel-transform-imports\nimport Router from 'react-router/es/Router';\n\nexport default Router;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router-dom/es/Router.js\n// module id = 120\n// module chunks = 0","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport warning from 'warning';\nimport invariant from 'invariant';\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\n/**\n * The public API for putting history on context.\n */\n\nvar Router = function (_React$Component) {\n _inherits(Router, _React$Component);\n\n function Router() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Router);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n match: _this.computeMatch(_this.props.history.location.pathname)\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Router.prototype.getChildContext = function getChildContext() {\n return {\n router: _extends({}, this.context.router, {\n history: this.props.history,\n route: {\n location: this.props.history.location,\n match: this.state.match\n }\n })\n };\n };\n\n Router.prototype.computeMatch = function computeMatch(pathname) {\n return {\n path: '/',\n url: '/',\n params: {},\n isExact: pathname === '/'\n };\n };\n\n Router.prototype.componentWillMount = function componentWillMount() {\n var _this2 = this;\n\n var _props = this.props,\n children = _props.children,\n history = _props.history;\n\n\n invariant(children == null || React.Children.count(children) === 1, 'A may have only one child element');\n\n // Do this here so we can setState when a changes the\n // location in componentWillMount. This happens e.g. when doing\n // server rendering using a .\n this.unlisten = history.listen(function () {\n _this2.setState({\n match: _this2.computeMatch(history.location.pathname)\n });\n });\n };\n\n Router.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n warning(this.props.history === nextProps.history, 'You cannot change ');\n };\n\n Router.prototype.componentWillUnmount = function componentWillUnmount() {\n this.unlisten();\n };\n\n Router.prototype.render = function render() {\n var children = this.props.children;\n\n return children ? React.Children.only(children) : null;\n };\n\n return Router;\n}(React.Component);\n\nRouter.propTypes = {\n history: PropTypes.object.isRequired,\n children: PropTypes.node\n};\nRouter.contextTypes = {\n router: PropTypes.object\n};\nRouter.childContextTypes = {\n router: PropTypes.object.isRequired\n};\n\n\nexport default Router;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router/es/Router.js\n// module id = 121\n// module chunks = 0","import pathToRegexp from 'path-to-regexp';\n\nvar patternCache = {};\nvar cacheLimit = 10000;\nvar cacheCount = 0;\n\nvar compilePath = function compilePath(pattern, options) {\n var cacheKey = '' + options.end + options.strict + options.sensitive;\n var cache = patternCache[cacheKey] || (patternCache[cacheKey] = {});\n\n if (cache[pattern]) return cache[pattern];\n\n var keys = [];\n var re = pathToRegexp(pattern, keys, options);\n var compiledPattern = { re: re, keys: keys };\n\n if (cacheCount < cacheLimit) {\n cache[pattern] = compiledPattern;\n cacheCount++;\n }\n\n return compiledPattern;\n};\n\n/**\n * Public API for matching a URL pathname to a path pattern.\n */\nvar matchPath = function matchPath(pathname) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (typeof options === 'string') options = { path: options };\n\n var _options = options,\n _options$path = _options.path,\n path = _options$path === undefined ? '/' : _options$path,\n _options$exact = _options.exact,\n exact = _options$exact === undefined ? false : _options$exact,\n _options$strict = _options.strict,\n strict = _options$strict === undefined ? false : _options$strict,\n _options$sensitive = _options.sensitive,\n sensitive = _options$sensitive === undefined ? false : _options$sensitive;\n\n var _compilePath = compilePath(path, { end: exact, strict: strict, sensitive: sensitive }),\n re = _compilePath.re,\n keys = _compilePath.keys;\n\n var match = re.exec(pathname);\n\n if (!match) return null;\n\n var url = match[0],\n values = match.slice(1);\n\n var isExact = pathname === url;\n\n if (exact && !isExact) return null;\n\n return {\n path: path, // the path pattern used to match\n url: path === '/' && url === '' ? '/' : url, // the matched portion of the URL\n isExact: isExact, // whether or not we matched exactly\n params: keys.reduce(function (memo, key, index) {\n memo[key.name] = values[index];\n return memo;\n }, {})\n };\n};\n\nexport default matchPath;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router/es/matchPath.js\n// module id = 122\n// module chunks = 0","import warning from 'warning';\n\nvar createTransitionManager = function createTransitionManager() {\n var prompt = null;\n\n var setPrompt = function setPrompt(nextPrompt) {\n warning(prompt == null, 'A history supports only one prompt at a time');\n\n prompt = nextPrompt;\n\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n };\n\n var confirmTransitionTo = function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message');\n\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n };\n\n var listeners = [];\n\n var appendListener = function appendListener(fn) {\n var isActive = true;\n\n var listener = function listener() {\n if (isActive) fn.apply(undefined, arguments);\n };\n\n listeners.push(listener);\n\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n };\n\n var notifyListeners = function notifyListeners() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(undefined, args);\n });\n };\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n};\n\nexport default createTransitionManager;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/history/es/createTransitionManager.js\n// module id = 123\n// module chunks = 0","export const FILE_SELECTED = 'FILE_SELECTED';\nexport const FILE_CLEAR = 'FILE_CLEAR';\nexport const METADATA_UPDATE = 'METADATA_UPDATE';\nexport const CLAIM_UPDATE = 'CLAIM_UPDATE';\nexport const SET_PUBLISH_IN_CHANNEL = 'SET_PUBLISH_IN_CHANNEL';\nexport const PUBLISH_STATUS_UPDATE = 'PUBLISH_STATUS_UPDATE';\nexport const ERROR_UPDATE = 'ERROR_UPDATE';\nexport const SELECTED_CHANNEL_UPDATE = 'SELECTED_CHANNEL_UPDATE';\nexport const TOGGLE_METADATA_INPUTS = 'TOGGLE_METADATA_INPUTS';\nexport const THUMBNAIL_NEW = 'THUMBNAIL_NEW';\nexport const PUBLISH_START = 'PUBLISH_START';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/publish_action_types.js","function SiteConfig () {\n this.analytics = {\n googleId: 'default',\n };\n this.assetDefaults = {\n description: 'An asset published on Spee.ch',\n thumbnail : 'https://spee.ch/assets/img/video_thumb_default.png',\n title : 'Spee.ch',\n };\n this.auth = {\n sessionKey: 'default',\n };\n this.details = {\n description: 'Open-source, decentralized image and video sharing.',\n host : 'default',\n port : 3000,\n title : 'Spee.ch',\n twitter : '@spee_ch',\n };\n this.publishing = {\n additionalClaimAddresses: [],\n disabled : false,\n disabledMessage : 'Please check back soon.',\n primaryClaimAddress : 'default',\n thumbnailChannel : 'default',\n thumbnailChannelId : 'default',\n uploadDirectory : '/home/lbry/Uploads',\n };\n this.configure = (config) => {\n if (!config) {\n return console.log('No site config received.');\n }\n const { analytics, assetDefaults, auth, details, publishing } = config;\n this.analytics = analytics;\n this.assetDefaults = assetDefaults;\n this.auth = auth;\n this.details = details;\n this.publishing = publishing;\n };\n};\n\nmodule.exports = new SiteConfig();\n\n\n\n// WEBPACK FOOTER //\n// ./config/siteConfig.js","export const LOCAL_CHECK = 'LOCAL_CHECK';\nexport const UNAVAILABLE = 'UNAVAILABLE';\nexport const ERROR = 'ERROR';\nexport const AVAILABLE = 'AVAILABLE';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/asset_display_states.js","import { is, makeIterator } from '../utils';\n\nvar done = { done: true, value: undefined };\nexport var qEnd = {};\n\nexport function safeName(patternOrChannel) {\n if (is.channel(patternOrChannel)) {\n return 'channel';\n } else if (Array.isArray(patternOrChannel)) {\n return String(patternOrChannel.map(function (entry) {\n return String(entry);\n }));\n } else {\n return String(patternOrChannel);\n }\n}\n\nexport default function fsmIterator(fsm, q0) {\n var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'iterator';\n\n var updateState = void 0,\n qNext = q0;\n\n function next(arg, error) {\n if (qNext === qEnd) {\n return done;\n }\n\n if (error) {\n qNext = qEnd;\n throw error;\n } else {\n updateState && updateState(arg);\n\n var _fsm$qNext = fsm[qNext](),\n q = _fsm$qNext[0],\n output = _fsm$qNext[1],\n _updateState = _fsm$qNext[2];\n\n qNext = q;\n updateState = _updateState;\n return qNext === qEnd ? done : output;\n }\n }\n\n return makeIterator(next, function (error) {\n return next(null, error);\n }, name, true);\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux-saga/es/internal/sagaHelpers/fsmIterator.js\n// module id = 127\n// module chunks = 0","import * as actions from 'constants/channel_action_types';\n\n// export action creators\n\nexport function updateLoggedInChannel (name, shortId, longId) {\n return {\n type: actions.CHANNEL_UPDATE,\n data: {\n name,\n shortId,\n longId,\n },\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/actions/channel.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ActiveStatusBar from 'components/ActiveStatusBar';\nimport InactiveStatusBar from 'components/InactiveStatusBar';\n\nclass ProgressBar extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n bars : [],\n index : 0,\n incrementer: 1,\n };\n this.createBars = this.createBars.bind(this);\n this.startProgressBar = this.startProgressBar.bind(this);\n this.updateProgressBar = this.updateProgressBar.bind(this);\n this.stopProgressBar = this.stopProgressBar.bind(this);\n }\n componentDidMount () {\n this.createBars();\n this.startProgressBar();\n }\n componentWillUnmount () {\n this.stopProgressBar();\n }\n createBars () {\n const bars = [];\n for (let i = 0; i <= this.props.size; i++) {\n bars.push({isActive: false});\n }\n this.setState({ bars });\n }\n startProgressBar () {\n this.updateInterval = setInterval(this.updateProgressBar.bind(this), 300);\n };\n updateProgressBar () {\n let index = this.state.index;\n let incrementer = this.state.incrementer;\n let bars = this.state.bars;\n // flip incrementer if necessary, to stay in bounds\n if ((index < 0) || (index > this.props.size)) {\n incrementer = incrementer * -1;\n index += incrementer;\n }\n // update the indexed bar\n if (incrementer > 0) {\n bars[index].isActive = true;\n } else {\n bars[index].isActive = false;\n };\n // increment index\n index += incrementer;\n // update state\n this.setState({\n bars,\n incrementer,\n index,\n });\n };\n stopProgressBar () {\n clearInterval(this.updateInterval);\n };\n render () {\n return (\n
\n {this.state.bars.map((bar, index) => bar.isActive ? : )}\n
\n );\n }\n};\n\nProgressBar.propTypes = {\n size: PropTypes.number.isRequired,\n};\n\nexport default ProgressBar;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/ProgressBar/index.jsx","import React from 'react';\nimport PropTypes from 'prop-types';\nimport NavBar from 'containers/NavBar';\n\nclass ErrorPage extends React.Component {\n render () {\n const { error } = this.props;\n return (\n
\n \n
\n

{error}

\n
\n
\n );\n }\n};\n\nErrorPage.propTypes = {\n error: PropTypes.string.isRequired,\n};\n\nexport default ErrorPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/ErrorPage/index.jsx","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_ie8-dom-define.js\n// module id = 131\n// module chunks = 0","exports.f = require('./_wks');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_wks-ext.js\n// module id = 132\n// module chunks = 0","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys-internal.js\n// module id = 133\n// module chunks = 0","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-dps.js\n// module id = 134\n// module chunks = 0","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn-ext.js\n// module id = 135\n// module chunks = 0","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-assign.js\n// module id = 136\n// module chunks = 0","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_bind.js\n// module id = 137\n// module chunks = 0","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_invoke.js\n// module id = 138\n// module chunks = 0","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_parse-int.js\n// module id = 139\n// module chunks = 0","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_parse-float.js\n// module id = 140\n// module chunks = 0","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_a-number-value.js\n// module id = 141\n// module chunks = 0","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_is-integer.js\n// module id = 142\n// module chunks = 0","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_math-log1p.js\n// module id = 143\n// module chunks = 0","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_math-fround.js\n// module id = 144\n// module chunks = 0","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-call.js\n// module id = 145\n// module chunks = 0","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-reduce.js\n// module id = 146\n// module chunks = 0","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-copy-within.js\n// module id = 147\n// module chunks = 0","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_iter-step.js\n// module id = 148\n// module chunks = 0","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.flags.js\n// module id = 149\n// module chunks = 0","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_perform.js\n// module id = 150\n// module chunks = 0","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_promise-resolve.js\n// module id = 151\n// module chunks = 0","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.map.js\n// module id = 152\n// module chunks = 0","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-strong.js\n// module id = 153\n// module chunks = 0","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.set.js\n// module id = 154\n// module chunks = 0","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-map.js\n// module id = 155\n// module chunks = 0","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-weak.js\n// module id = 156\n// module chunks = 0","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_to-index.js\n// module id = 157\n// module chunks = 0","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_own-keys.js\n// module id = 158\n// module chunks = 0","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_flatten-into-array.js\n// module id = 159\n// module chunks = 0","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_string-pad.js\n// module id = 160\n// module chunks = 0","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_object-to-array.js\n// module id = 161\n// module chunks = 0","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof');\nvar from = require('./_array-from-iterable');\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + \"#toJSON isn't generic\");\n return from(this);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_collection-to-json.js\n// module id = 162\n// module chunks = 0","var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-from-iterable.js\n// module id = 163\n// module chunks = 0","// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_math-scale.js\n// module id = 164\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\nvar emptyObject = {};\n\nif (process.env.NODE_ENV !== 'production') {\n Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/emptyObject.js\n// module id = 165\n// module chunks = 0","import PropTypes from 'prop-types';\n\nexport var subscriptionShape = PropTypes.shape({\n trySubscribe: PropTypes.func.isRequired,\n tryUnsubscribe: PropTypes.func.isRequired,\n notifyNestedSubs: PropTypes.func.isRequired,\n isSubscribed: PropTypes.func.isRequired\n});\n\nexport var storeShape = PropTypes.shape({\n subscribe: PropTypes.func.isRequired,\n dispatch: PropTypes.func.isRequired,\n getState: PropTypes.func.isRequired\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-redux/es/utils/PropTypes.js\n// module id = 166\n// module chunks = 0","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nimport hoistStatics from 'hoist-non-react-statics';\nimport invariant from 'invariant';\nimport { Component, createElement } from 'react';\n\nimport Subscription from '../utils/Subscription';\nimport { storeShape, subscriptionShape } from '../utils/PropTypes';\n\nvar hotReloadingVersion = 0;\nvar dummyState = {};\nfunction noop() {}\nfunction makeSelectorStateful(sourceSelector, store) {\n // wrap the selector in an object that tracks its results between runs.\n var selector = {\n run: function runComponentSelector(props) {\n try {\n var nextProps = sourceSelector(store.getState(), props);\n if (nextProps !== selector.props || selector.error) {\n selector.shouldComponentUpdate = true;\n selector.props = nextProps;\n selector.error = null;\n }\n } catch (error) {\n selector.shouldComponentUpdate = true;\n selector.error = error;\n }\n }\n };\n\n return selector;\n}\n\nexport default function connectAdvanced(\n/*\n selectorFactory is a func that is responsible for returning the selector function used to\n compute new props from state, props, and dispatch. For example:\n export default connectAdvanced((dispatch, options) => (state, props) => ({\n thing: state.things[props.thingId],\n saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),\n }))(YourComponent)\n Access to dispatch is provided to the factory so selectorFactories can bind actionCreators\n outside of their selector as an optimization. Options passed to connectAdvanced are passed to\n the selectorFactory, along with displayName and WrappedComponent, as the second argument.\n Note that selectorFactory is responsible for all caching/memoization of inbound and outbound\n props. Do not use connectAdvanced directly without memoizing results between calls to your\n selector, otherwise the Connect component will re-render on every state or props change.\n*/\nselectorFactory) {\n var _contextTypes, _childContextTypes;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$getDisplayName = _ref.getDisplayName,\n getDisplayName = _ref$getDisplayName === undefined ? function (name) {\n return 'ConnectAdvanced(' + name + ')';\n } : _ref$getDisplayName,\n _ref$methodName = _ref.methodName,\n methodName = _ref$methodName === undefined ? 'connectAdvanced' : _ref$methodName,\n _ref$renderCountProp = _ref.renderCountProp,\n renderCountProp = _ref$renderCountProp === undefined ? undefined : _ref$renderCountProp,\n _ref$shouldHandleStat = _ref.shouldHandleStateChanges,\n shouldHandleStateChanges = _ref$shouldHandleStat === undefined ? true : _ref$shouldHandleStat,\n _ref$storeKey = _ref.storeKey,\n storeKey = _ref$storeKey === undefined ? 'store' : _ref$storeKey,\n _ref$withRef = _ref.withRef,\n withRef = _ref$withRef === undefined ? false : _ref$withRef,\n connectOptions = _objectWithoutProperties(_ref, ['getDisplayName', 'methodName', 'renderCountProp', 'shouldHandleStateChanges', 'storeKey', 'withRef']);\n\n var subscriptionKey = storeKey + 'Subscription';\n var version = hotReloadingVersion++;\n\n var contextTypes = (_contextTypes = {}, _contextTypes[storeKey] = storeShape, _contextTypes[subscriptionKey] = subscriptionShape, _contextTypes);\n var childContextTypes = (_childContextTypes = {}, _childContextTypes[subscriptionKey] = subscriptionShape, _childContextTypes);\n\n return function wrapWithConnect(WrappedComponent) {\n invariant(typeof WrappedComponent == 'function', 'You must pass a component to the function returned by ' + (methodName + '. Instead received ' + JSON.stringify(WrappedComponent)));\n\n var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n\n var displayName = getDisplayName(wrappedComponentName);\n\n var selectorFactoryOptions = _extends({}, connectOptions, {\n getDisplayName: getDisplayName,\n methodName: methodName,\n renderCountProp: renderCountProp,\n shouldHandleStateChanges: shouldHandleStateChanges,\n storeKey: storeKey,\n withRef: withRef,\n displayName: displayName,\n wrappedComponentName: wrappedComponentName,\n WrappedComponent: WrappedComponent\n });\n\n var Connect = function (_Component) {\n _inherits(Connect, _Component);\n\n function Connect(props, context) {\n _classCallCheck(this, Connect);\n\n var _this = _possibleConstructorReturn(this, _Component.call(this, props, context));\n\n _this.version = version;\n _this.state = {};\n _this.renderCount = 0;\n _this.store = props[storeKey] || context[storeKey];\n _this.propsMode = Boolean(props[storeKey]);\n _this.setWrappedInstance = _this.setWrappedInstance.bind(_this);\n\n invariant(_this.store, 'Could not find \"' + storeKey + '\" in either the context or props of ' + ('\"' + displayName + '\". Either wrap the root component in a , ') + ('or explicitly pass \"' + storeKey + '\" as a prop to \"' + displayName + '\".'));\n\n _this.initSelector();\n _this.initSubscription();\n return _this;\n }\n\n Connect.prototype.getChildContext = function getChildContext() {\n var _ref2;\n\n // If this component received store from props, its subscription should be transparent\n // to any descendants receiving store+subscription from context; it passes along\n // subscription passed to it. Otherwise, it shadows the parent subscription, which allows\n // Connect to control ordering of notifications to flow top-down.\n var subscription = this.propsMode ? null : this.subscription;\n return _ref2 = {}, _ref2[subscriptionKey] = subscription || this.context[subscriptionKey], _ref2;\n };\n\n Connect.prototype.componentDidMount = function componentDidMount() {\n if (!shouldHandleStateChanges) return;\n\n // componentWillMount fires during server side rendering, but componentDidMount and\n // componentWillUnmount do not. Because of this, trySubscribe happens during ...didMount.\n // Otherwise, unsubscription would never take place during SSR, causing a memory leak.\n // To handle the case where a child component may have triggered a state change by\n // dispatching an action in its componentWillMount, we have to re-run the select and maybe\n // re-render.\n this.subscription.trySubscribe();\n this.selector.run(this.props);\n if (this.selector.shouldComponentUpdate) this.forceUpdate();\n };\n\n Connect.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n this.selector.run(nextProps);\n };\n\n Connect.prototype.shouldComponentUpdate = function shouldComponentUpdate() {\n return this.selector.shouldComponentUpdate;\n };\n\n Connect.prototype.componentWillUnmount = function componentWillUnmount() {\n if (this.subscription) this.subscription.tryUnsubscribe();\n this.subscription = null;\n this.notifyNestedSubs = noop;\n this.store = null;\n this.selector.run = noop;\n this.selector.shouldComponentUpdate = false;\n };\n\n Connect.prototype.getWrappedInstance = function getWrappedInstance() {\n invariant(withRef, 'To access the wrapped instance, you need to specify ' + ('{ withRef: true } in the options argument of the ' + methodName + '() call.'));\n return this.wrappedInstance;\n };\n\n Connect.prototype.setWrappedInstance = function setWrappedInstance(ref) {\n this.wrappedInstance = ref;\n };\n\n Connect.prototype.initSelector = function initSelector() {\n var sourceSelector = selectorFactory(this.store.dispatch, selectorFactoryOptions);\n this.selector = makeSelectorStateful(sourceSelector, this.store);\n this.selector.run(this.props);\n };\n\n Connect.prototype.initSubscription = function initSubscription() {\n if (!shouldHandleStateChanges) return;\n\n // parentSub's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n var parentSub = (this.propsMode ? this.props : this.context)[subscriptionKey];\n this.subscription = new Subscription(this.store, parentSub, this.onStateChange.bind(this));\n\n // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `this.subscription` will then be null. An\n // extra null check every change can be avoided by copying the method onto `this` and then\n // replacing it with a no-op on unmount. This can probably be avoided if Subscription's\n // listeners logic is changed to not call listeners that have been unsubscribed in the\n // middle of the notification loop.\n this.notifyNestedSubs = this.subscription.notifyNestedSubs.bind(this.subscription);\n };\n\n Connect.prototype.onStateChange = function onStateChange() {\n this.selector.run(this.props);\n\n if (!this.selector.shouldComponentUpdate) {\n this.notifyNestedSubs();\n } else {\n this.componentDidUpdate = this.notifyNestedSubsOnComponentDidUpdate;\n this.setState(dummyState);\n }\n };\n\n Connect.prototype.notifyNestedSubsOnComponentDidUpdate = function notifyNestedSubsOnComponentDidUpdate() {\n // `componentDidUpdate` is conditionally implemented when `onStateChange` determines it\n // needs to notify nested subs. Once called, it unimplements itself until further state\n // changes occur. Doing it this way vs having a permanent `componentDidUpdate` that does\n // a boolean check every time avoids an extra method call most of the time, resulting\n // in some perf boost.\n this.componentDidUpdate = undefined;\n this.notifyNestedSubs();\n };\n\n Connect.prototype.isSubscribed = function isSubscribed() {\n return Boolean(this.subscription) && this.subscription.isSubscribed();\n };\n\n Connect.prototype.addExtraProps = function addExtraProps(props) {\n if (!withRef && !renderCountProp && !(this.propsMode && this.subscription)) return props;\n // make a shallow copy so that fields added don't leak to the original selector.\n // this is especially important for 'ref' since that's a reference back to the component\n // instance. a singleton memoized selector would then be holding a reference to the\n // instance, preventing the instance from being garbage collected, and that would be bad\n var withExtras = _extends({}, props);\n if (withRef) withExtras.ref = this.setWrappedInstance;\n if (renderCountProp) withExtras[renderCountProp] = this.renderCount++;\n if (this.propsMode && this.subscription) withExtras[subscriptionKey] = this.subscription;\n return withExtras;\n };\n\n Connect.prototype.render = function render() {\n var selector = this.selector;\n selector.shouldComponentUpdate = false;\n\n if (selector.error) {\n throw selector.error;\n } else {\n return createElement(WrappedComponent, this.addExtraProps(selector.props));\n }\n };\n\n return Connect;\n }(Component);\n\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = displayName;\n Connect.childContextTypes = childContextTypes;\n Connect.contextTypes = contextTypes;\n Connect.propTypes = contextTypes;\n\n if (process.env.NODE_ENV !== 'production') {\n Connect.prototype.componentWillUpdate = function componentWillUpdate() {\n var _this2 = this;\n\n // We are hot reloading!\n if (this.version !== version) {\n this.version = version;\n this.initSelector();\n\n // If any connected descendants don't hot reload (and resubscribe in the process), their\n // listeners will be lost when we unsubscribe. Unfortunately, by copying over all\n // listeners, this does mean that the old versions of connected descendants will still be\n // notified of state changes; however, their onStateChange function is a no-op so this\n // isn't a huge deal.\n var oldListeners = [];\n\n if (this.subscription) {\n oldListeners = this.subscription.listeners.get();\n this.subscription.tryUnsubscribe();\n }\n this.initSubscription();\n if (shouldHandleStateChanges) {\n this.subscription.trySubscribe();\n oldListeners.forEach(function (listener) {\n return _this2.subscription.listeners.subscribe(listener);\n });\n }\n }\n };\n }\n\n return hoistStatics(Connect, WrappedComponent);\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-redux/es/components/connectAdvanced.js\n// module id = 167\n// module chunks = 0","/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.hoistNonReactStatics = factory());\n}(this, (function () {\n 'use strict';\n \n var REACT_STATICS = {\n childContextTypes: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n };\n \n var KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n };\n \n var defineProperty = Object.defineProperty;\n var getOwnPropertyNames = Object.getOwnPropertyNames;\n var getOwnPropertySymbols = Object.getOwnPropertySymbols;\n var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n var getPrototypeOf = Object.getPrototypeOf;\n var objectPrototype = getPrototypeOf && getPrototypeOf(Object);\n \n return function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components\n \n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n \n var keys = getOwnPropertyNames(sourceComponent);\n \n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n \n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (!REACT_STATICS[key] && !KNOWN_STATICS[key] && (!blacklist || !blacklist[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n try { // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n \n return targetComponent;\n }\n \n return targetComponent;\n };\n})));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/hoist-non-react-statics/index.js\n// module id = 168\n// module chunks = 0","import isPlainObject from 'lodash-es/isPlainObject';\nimport $$observable from 'symbol-observable';\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nexport var ActionTypes = {\n INIT: '@@redux/INIT'\n\n /**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n};export default function createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error('Expected the enhancer to be a function.');\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error('Expected the reducer to be a function.');\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n function getState() {\n return currentState;\n }\n\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Expected listener to be a function.');\n }\n\n var isSubscribed = true;\n\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n isSubscribed = false;\n\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n };\n }\n\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n }\n\n if (isDispatching) {\n throw new Error('Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error('Expected the nextReducer to be a function.');\n }\n\n currentReducer = nextReducer;\n dispatch({ type: ActionTypes.INIT });\n }\n\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object') {\n throw new TypeError('Expected the observer to be an object.');\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return { unsubscribe: unsubscribe };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n }\n\n // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n dispatch({ type: ActionTypes.INIT });\n\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux/es/createStore.js\n// module id = 169\n// module chunks = 0","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash-es/_Symbol.js\n// module id = 170\n// module chunks = 0","/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\n\nexport default function compose() {\n for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(undefined, arguments));\n };\n });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux/es/compose.js\n// module id = 172\n// module chunks = 0","import verifyPlainObject from '../utils/verifyPlainObject';\n\nexport function wrapMapToPropsConstant(getConstant) {\n return function initConstantSelector(dispatch, options) {\n var constant = getConstant(dispatch, options);\n\n function constantSelector() {\n return constant;\n }\n constantSelector.dependsOnOwnProps = false;\n return constantSelector;\n };\n}\n\n// dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n// \n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\nexport function getDependsOnOwnProps(mapToProps) {\n return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n}\n\n// Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n// \n// * Detects whether the mapToProps function being called depends on props, which\n// is used by selectorFactory to decide if it should reinvoke on props changes.\n// \n// * On first call, handles mapToProps if returns another function, and treats that\n// new function as the true mapToProps for subsequent calls.\n// \n// * On first call, verifies the first result is a plain object, in order to warn\n// the developer that their mapToProps function is not returning a valid result.\n// \nexport function wrapMapToPropsFunc(mapToProps, methodName) {\n return function initProxySelector(dispatch, _ref) {\n var displayName = _ref.displayName;\n\n var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);\n };\n\n // allow detectFactoryAndVerify to get ownProps\n proxy.dependsOnOwnProps = true;\n\n proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n proxy.mapToProps = mapToProps;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n var props = proxy(stateOrDispatch, ownProps);\n\n if (typeof props === 'function') {\n proxy.mapToProps = props;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n props = proxy(stateOrDispatch, ownProps);\n }\n\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(props, displayName, methodName);\n\n return props;\n };\n\n return proxy;\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-redux/es/connect/wrapMapToProps.js\n// module id = 173\n// module chunks = 0","function isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to) {\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n var toParts = to && to.split('/') || [];\n var fromParts = from && from.split('/') || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash = void 0;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) {\n fromParts.unshift('..');\n }if (mustEndAbs && fromParts[0] !== '' && (!fromParts[0] || !isAbsolute(fromParts[0]))) fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\nexport default resolvePathname;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/resolve-pathname/index.js\n// module id = 175\n// module chunks = 0","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction valueEqual(a, b) {\n if (a === b) return true;\n\n if (a == null || b == null) return false;\n\n if (Array.isArray(a)) {\n return Array.isArray(b) && a.length === b.length && a.every(function (item, index) {\n return valueEqual(item, b[index]);\n });\n }\n\n var aType = typeof a === 'undefined' ? 'undefined' : _typeof(a);\n var bType = typeof b === 'undefined' ? 'undefined' : _typeof(b);\n\n if (aType !== bType) return false;\n\n if (aType === 'object') {\n var aValue = a.valueOf();\n var bValue = b.valueOf();\n\n if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n\n var aKeys = Object.keys(a);\n var bKeys = Object.keys(b);\n\n if (aKeys.length !== bKeys.length) return false;\n\n return aKeys.every(function (key) {\n return valueEqual(a[key], b[key]);\n });\n }\n\n return false;\n}\n\nexport default valueEqual;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/value-equal/index.js\n// module id = 176\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\nvar canUseDOM = exports.canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nvar addEventListener = exports.addEventListener = function addEventListener(node, event, listener) {\n return node.addEventListener ? node.addEventListener(event, listener, false) : node.attachEvent('on' + event, listener);\n};\n\nvar removeEventListener = exports.removeEventListener = function removeEventListener(node, event, listener) {\n return node.removeEventListener ? node.removeEventListener(event, listener, false) : node.detachEvent('on' + event, listener);\n};\n\nvar getConfirmation = exports.getConfirmation = function getConfirmation(message, callback) {\n return callback(window.confirm(message));\n}; // eslint-disable-line no-alert\n\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\nvar supportsHistory = exports.supportsHistory = function supportsHistory() {\n var ua = window.navigator.userAgent;\n\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n\n return window.history && 'pushState' in window.history;\n};\n\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\nvar supportsPopStateOnHashChange = exports.supportsPopStateOnHashChange = function supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n};\n\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\nvar supportsGoWithoutReloadUsingHash = exports.supportsGoWithoutReloadUsingHash = function supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n};\n\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\nvar isExtraneousPopstateEvent = exports.isExtraneousPopstateEvent = function isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/history/DOMUtils.js\n// module id = 177\n// module chunks = 0","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport invariant from 'invariant';\n\nvar isModifiedEvent = function isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n};\n\n/**\n * The public API for rendering a history-aware
.\n */\n\nvar Link = function (_React$Component) {\n _inherits(Link, _React$Component);\n\n function Link() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Link);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.handleClick = function (event) {\n if (_this.props.onClick) _this.props.onClick(event);\n\n if (!event.defaultPrevented && // onClick prevented default\n event.button === 0 && // ignore right clicks\n !_this.props.target && // let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // ignore clicks with modifier keys\n ) {\n event.preventDefault();\n\n var history = _this.context.router.history;\n var _this$props = _this.props,\n replace = _this$props.replace,\n to = _this$props.to;\n\n\n if (replace) {\n history.replace(to);\n } else {\n history.push(to);\n }\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Link.prototype.render = function render() {\n var _props = this.props,\n replace = _props.replace,\n to = _props.to,\n innerRef = _props.innerRef,\n props = _objectWithoutProperties(_props, ['replace', 'to', 'innerRef']); // eslint-disable-line no-unused-vars\n\n invariant(this.context.router, 'You should not use outside a ');\n\n var href = this.context.router.history.createHref(typeof to === 'string' ? { pathname: to } : to);\n\n return React.createElement('a', _extends({}, props, { onClick: this.handleClick, href: href, ref: innerRef }));\n };\n\n return Link;\n}(React.Component);\n\nLink.propTypes = {\n onClick: PropTypes.func,\n target: PropTypes.string,\n replace: PropTypes.bool,\n to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n innerRef: PropTypes.oneOfType([PropTypes.string, PropTypes.func])\n};\nLink.defaultProps = {\n replace: false\n};\nLink.contextTypes = {\n router: PropTypes.shape({\n history: PropTypes.shape({\n push: PropTypes.func.isRequired,\n replace: PropTypes.func.isRequired,\n createHref: PropTypes.func.isRequired\n }).isRequired\n }).isRequired\n};\n\n\nexport default Link;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router-dom/es/Link.js\n// module id = 178\n// module chunks = 0","// Written in this round about way for babel-transform-imports\nimport Route from 'react-router/es/Route';\n\nexport default Route;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router-dom/es/Route.js\n// module id = 179\n// module chunks = 0","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport warning from 'warning';\nimport invariant from 'invariant';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport matchPath from './matchPath';\n\nvar isEmptyChildren = function isEmptyChildren(children) {\n return React.Children.count(children) === 0;\n};\n\n/**\n * The public API for matching a single path and rendering.\n */\n\nvar Route = function (_React$Component) {\n _inherits(Route, _React$Component);\n\n function Route() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Route);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n match: _this.computeMatch(_this.props, _this.context.router)\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Route.prototype.getChildContext = function getChildContext() {\n return {\n router: _extends({}, this.context.router, {\n route: {\n location: this.props.location || this.context.router.route.location,\n match: this.state.match\n }\n })\n };\n };\n\n Route.prototype.computeMatch = function computeMatch(_ref, router) {\n var computedMatch = _ref.computedMatch,\n location = _ref.location,\n path = _ref.path,\n strict = _ref.strict,\n exact = _ref.exact,\n sensitive = _ref.sensitive;\n\n if (computedMatch) return computedMatch; // already computed the match for us\n\n invariant(router, 'You should not use or withRouter() outside a ');\n\n var route = router.route;\n\n var pathname = (location || route.location).pathname;\n\n return path ? matchPath(pathname, { path: path, strict: strict, exact: exact, sensitive: sensitive }) : route.match;\n };\n\n Route.prototype.componentWillMount = function componentWillMount() {\n warning(!(this.props.component && this.props.render), 'You should not use and in the same route; will be ignored');\n\n warning(!(this.props.component && this.props.children && !isEmptyChildren(this.props.children)), 'You should not use and in the same route; will be ignored');\n\n warning(!(this.props.render && this.props.children && !isEmptyChildren(this.props.children)), 'You should not use and in the same route; will be ignored');\n };\n\n Route.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps, nextContext) {\n warning(!(nextProps.location && !this.props.location), ' elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.');\n\n warning(!(!nextProps.location && this.props.location), ' elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.');\n\n this.setState({\n match: this.computeMatch(nextProps, nextContext.router)\n });\n };\n\n Route.prototype.render = function render() {\n var match = this.state.match;\n var _props = this.props,\n children = _props.children,\n component = _props.component,\n render = _props.render;\n var _context$router = this.context.router,\n history = _context$router.history,\n route = _context$router.route,\n staticContext = _context$router.staticContext;\n\n var location = this.props.location || route.location;\n var props = { match: match, location: location, history: history, staticContext: staticContext };\n\n return component ? // component prop gets first priority, only called if there's a match\n match ? React.createElement(component, props) : null : render ? // render prop is next, only called if there's a match\n match ? render(props) : null : children ? // children come last, always called\n typeof children === 'function' ? children(props) : !isEmptyChildren(children) ? React.Children.only(children) : null : null;\n };\n\n return Route;\n}(React.Component);\n\nRoute.propTypes = {\n computedMatch: PropTypes.object, // private, from \n path: PropTypes.string,\n exact: PropTypes.bool,\n strict: PropTypes.bool,\n sensitive: PropTypes.bool,\n component: PropTypes.func,\n render: PropTypes.func,\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n location: PropTypes.object\n};\nRoute.contextTypes = {\n router: PropTypes.shape({\n history: PropTypes.object.isRequired,\n route: PropTypes.object.isRequired,\n staticContext: PropTypes.object\n })\n};\nRoute.childContextTypes = {\n router: PropTypes.object.isRequired\n};\n\n\nexport default Route;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router/es/Route.js\n// module id = 180\n// module chunks = 0","export var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nexport var addEventListener = function addEventListener(node, event, listener) {\n return node.addEventListener ? node.addEventListener(event, listener, false) : node.attachEvent('on' + event, listener);\n};\n\nexport var removeEventListener = function removeEventListener(node, event, listener) {\n return node.removeEventListener ? node.removeEventListener(event, listener, false) : node.detachEvent('on' + event, listener);\n};\n\nexport var getConfirmation = function getConfirmation(message, callback) {\n return callback(window.confirm(message));\n}; // eslint-disable-line no-alert\n\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\nexport var supportsHistory = function supportsHistory() {\n var ua = window.navigator.userAgent;\n\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n\n return window.history && 'pushState' in window.history;\n};\n\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\nexport var supportsPopStateOnHashChange = function supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n};\n\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\nexport var supportsGoWithoutReloadUsingHash = function supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n};\n\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\nexport var isExtraneousPopstateEvent = function isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/history/es/DOMUtils.js\n// module id = 181\n// module chunks = 0","export const LOGIN = 'Existing';\nexport const CREATE = 'New';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/publish_channel_select_states.js","export const CHANNEL_UPDATE = 'CHANNEL_UPDATE';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/channel_action_types.js","import middleware from './internal/middleware';\nexport default middleware;\n\nexport { runSaga } from './internal/runSaga';\nexport { END, eventChannel, channel } from './internal/channel';\nexport { buffers } from './internal/buffers';\nexport { takeEvery, takeLatest, throttle } from './internal/sagaHelpers';\nexport { delay, CANCEL } from './internal/utils';\nexport { detach } from './internal/io';\n\nimport * as effects from './effects';\nimport * as utils from './utils';\n\nexport { effects, utils };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux-saga/es/index.js\n// module id = 184\n// module chunks = 0","var queue = [];\n/**\n Variable to hold a counting semaphore\n - Incrementing adds a lock and puts the scheduler in a `suspended` state (if it's not\n already suspended)\n - Decrementing releases a lock. Zero locks puts the scheduler in a `released` state. This\n triggers flushing the queued tasks.\n**/\nvar semaphore = 0;\n\n/**\n Executes a task 'atomically'. Tasks scheduled during this execution will be queued\n and flushed after this task has finished (assuming the scheduler endup in a released\n state).\n**/\nfunction exec(task) {\n try {\n suspend();\n task();\n } finally {\n release();\n }\n}\n\n/**\n Executes or queues a task depending on the state of the scheduler (`suspended` or `released`)\n**/\nexport function asap(task) {\n queue.push(task);\n\n if (!semaphore) {\n suspend();\n flush();\n }\n}\n\n/**\n Puts the scheduler in a `suspended` state. Scheduled tasks will be queued until the\n scheduler is released.\n**/\nexport function suspend() {\n semaphore++;\n}\n\n/**\n Puts the scheduler in a `released` state.\n**/\nfunction release() {\n semaphore--;\n}\n\n/**\n Releases the current lock. Executes all queued tasks if the scheduler is in the released state.\n**/\nexport function flush() {\n release();\n\n var task = void 0;\n while (!semaphore && (task = queue.shift()) !== undefined) {\n exec(task);\n }\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux-saga/es/internal/scheduler.js\n// module id = 185\n// module chunks = 0","import { is, check, uid as nextSagaId, wrapSagaDispatch, noop, log } from './utils';\nimport proc from './proc';\n\nvar RUN_SAGA_SIGNATURE = 'runSaga(storeInterface, saga, ...args)';\nvar NON_GENERATOR_ERR = RUN_SAGA_SIGNATURE + ': saga argument must be a Generator function!';\n\nexport function runSaga(storeInterface, saga) {\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var iterator = void 0;\n\n if (is.iterator(storeInterface)) {\n if (process.env.NODE_ENV === 'development') {\n log('warn', 'runSaga(iterator, storeInterface) has been deprecated in favor of ' + RUN_SAGA_SIGNATURE);\n }\n iterator = storeInterface;\n storeInterface = saga;\n } else {\n check(saga, is.func, NON_GENERATOR_ERR);\n iterator = saga.apply(undefined, args);\n check(iterator, is.iterator, NON_GENERATOR_ERR);\n }\n\n var _storeInterface = storeInterface,\n subscribe = _storeInterface.subscribe,\n dispatch = _storeInterface.dispatch,\n getState = _storeInterface.getState,\n context = _storeInterface.context,\n sagaMonitor = _storeInterface.sagaMonitor,\n logger = _storeInterface.logger,\n onError = _storeInterface.onError;\n\n\n var effectId = nextSagaId();\n\n if (sagaMonitor) {\n // monitors are expected to have a certain interface, let's fill-in any missing ones\n sagaMonitor.effectTriggered = sagaMonitor.effectTriggered || noop;\n sagaMonitor.effectResolved = sagaMonitor.effectResolved || noop;\n sagaMonitor.effectRejected = sagaMonitor.effectRejected || noop;\n sagaMonitor.effectCancelled = sagaMonitor.effectCancelled || noop;\n sagaMonitor.actionDispatched = sagaMonitor.actionDispatched || noop;\n\n sagaMonitor.effectTriggered({ effectId: effectId, root: true, parentEffectId: 0, effect: { root: true, saga: saga, args: args } });\n }\n\n var task = proc(iterator, subscribe, wrapSagaDispatch(dispatch), getState, context, { sagaMonitor: sagaMonitor, logger: logger, onError: onError }, effectId, saga.name);\n\n if (sagaMonitor) {\n sagaMonitor.effectResolved(effectId, task);\n }\n\n return task;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux-saga/es/internal/runSaga.js\n// module id = 186\n// module chunks = 0","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _defineEnumerableProperties(obj, descs) { for (var key in descs) { var desc = descs[key]; desc.configurable = desc.enumerable = true; if (\"value\" in desc) desc.writable = true; Object.defineProperty(obj, key, desc); } return obj; }\n\nimport { noop, kTrue, is, log as _log, check, deferred, uid as nextEffectId, array, remove, object, TASK, CANCEL, SELF_CANCELLATION, makeIterator, createSetContextWarning, deprecate, updateIncentive } from './utils';\nimport { asap, suspend, flush } from './scheduler';\nimport { asEffect } from './io';\nimport { stdChannel as _stdChannel, eventChannel, isEnd } from './channel';\nimport { buffers } from './buffers';\n\nexport var NOT_ITERATOR_ERROR = 'proc first argument (Saga function result) must be an iterator';\n\nexport var CHANNEL_END = {\n toString: function toString() {\n return '@@redux-saga/CHANNEL_END';\n }\n};\nexport var TASK_CANCEL = {\n toString: function toString() {\n return '@@redux-saga/TASK_CANCEL';\n }\n};\n\nvar matchers = {\n wildcard: function wildcard() {\n return kTrue;\n },\n default: function _default(pattern) {\n return (typeof pattern === 'undefined' ? 'undefined' : _typeof(pattern)) === 'symbol' ? function (input) {\n return input.type === pattern;\n } : function (input) {\n return input.type === String(pattern);\n };\n },\n array: function array(patterns) {\n return function (input) {\n return patterns.some(function (p) {\n return matcher(p)(input);\n });\n };\n },\n predicate: function predicate(_predicate) {\n return function (input) {\n return _predicate(input);\n };\n }\n};\n\nfunction matcher(pattern) {\n // prettier-ignore\n return (pattern === '*' ? matchers.wildcard : is.array(pattern) ? matchers.array : is.stringableFunc(pattern) ? matchers.default : is.func(pattern) ? matchers.predicate : matchers.default)(pattern);\n}\n\n/**\n Used to track a parent task and its forks\n In the new fork model, forked tasks are attached by default to their parent\n We model this using the concept of Parent task && main Task\n main task is the main flow of the current Generator, the parent tasks is the\n aggregation of the main tasks + all its forked tasks.\n Thus the whole model represents an execution tree with multiple branches (vs the\n linear execution tree in sequential (non parallel) programming)\n\n A parent tasks has the following semantics\n - It completes if all its forks either complete or all cancelled\n - If it's cancelled, all forks are cancelled as well\n - It aborts if any uncaught error bubbles up from forks\n - If it completes, the return value is the one returned by the main task\n**/\nfunction forkQueue(name, mainTask, cb) {\n var tasks = [],\n result = void 0,\n completed = false;\n addTask(mainTask);\n\n function abort(err) {\n cancelAll();\n cb(err, true);\n }\n\n function addTask(task) {\n tasks.push(task);\n task.cont = function (res, isErr) {\n if (completed) {\n return;\n }\n\n remove(tasks, task);\n task.cont = noop;\n if (isErr) {\n abort(res);\n } else {\n if (task === mainTask) {\n result = res;\n }\n if (!tasks.length) {\n completed = true;\n cb(result);\n }\n }\n };\n // task.cont.cancel = task.cancel\n }\n\n function cancelAll() {\n if (completed) {\n return;\n }\n completed = true;\n tasks.forEach(function (t) {\n t.cont = noop;\n t.cancel();\n });\n tasks = [];\n }\n\n return {\n addTask: addTask,\n cancelAll: cancelAll,\n abort: abort,\n getTasks: function getTasks() {\n return tasks;\n },\n taskNames: function taskNames() {\n return tasks.map(function (t) {\n return t.name;\n });\n }\n };\n}\n\nfunction createTaskIterator(_ref) {\n var context = _ref.context,\n fn = _ref.fn,\n args = _ref.args;\n\n if (is.iterator(fn)) {\n return fn;\n }\n\n // catch synchronous failures; see #152 and #441\n var result = void 0,\n error = void 0;\n try {\n result = fn.apply(context, args);\n } catch (err) {\n error = err;\n }\n\n // i.e. a generator function returns an iterator\n if (is.iterator(result)) {\n return result;\n }\n\n // do not bubble up synchronous failures for detached forks\n // instead create a failed task. See #152 and #441\n return error ? makeIterator(function () {\n throw error;\n }) : makeIterator(function () {\n var pc = void 0;\n var eff = { done: false, value: result };\n var ret = function ret(value) {\n return { done: true, value: value };\n };\n return function (arg) {\n if (!pc) {\n pc = true;\n return eff;\n } else {\n return ret(arg);\n }\n };\n }());\n}\n\nvar wrapHelper = function wrapHelper(helper) {\n return { fn: helper };\n};\n\nexport default function proc(iterator) {\n var subscribe = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {\n return noop;\n };\n var dispatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : noop;\n var getState = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;\n var parentContext = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n var parentEffectId = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n var name = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 'anonymous';\n var cont = arguments[8];\n\n check(iterator, is.iterator, NOT_ITERATOR_ERROR);\n\n var effectsString = '[...effects]';\n var runParallelEffect = deprecate(runAllEffect, updateIncentive(effectsString, 'all(' + effectsString + ')'));\n\n var sagaMonitor = options.sagaMonitor,\n logger = options.logger,\n onError = options.onError;\n\n var log = logger || _log;\n var logError = function logError(err) {\n var message = err.sagaStack;\n\n if (!message && err.stack) {\n message = err.stack.split('\\n')[0].indexOf(err.message) !== -1 ? err.stack : 'Error: ' + err.message + '\\n' + err.stack;\n }\n\n log('error', 'uncaught at ' + name, message || err.message || err);\n };\n var stdChannel = _stdChannel(subscribe);\n var taskContext = Object.create(parentContext);\n /**\n Tracks the current effect cancellation\n Each time the generator progresses. calling runEffect will set a new value\n on it. It allows propagating cancellation to child effects\n **/\n next.cancel = noop;\n\n /**\n Creates a new task descriptor for this generator, We'll also create a main task\n to track the main flow (besides other forked tasks)\n **/\n var task = newTask(parentEffectId, name, iterator, cont);\n var mainTask = { name: name, cancel: cancelMain, isRunning: true };\n var taskQueue = forkQueue(name, mainTask, end);\n\n /**\n cancellation of the main task. We'll simply resume the Generator with a Cancel\n **/\n function cancelMain() {\n if (mainTask.isRunning && !mainTask.isCancelled) {\n mainTask.isCancelled = true;\n next(TASK_CANCEL);\n }\n }\n\n /**\n This may be called by a parent generator to trigger/propagate cancellation\n cancel all pending tasks (including the main task), then end the current task.\n Cancellation propagates down to the whole execution tree holded by this Parent task\n It's also propagated to all joiners of this task and their execution tree/joiners\n Cancellation is noop for terminated/Cancelled tasks tasks\n **/\n function cancel() {\n /**\n We need to check both Running and Cancelled status\n Tasks can be Cancelled but still Running\n **/\n if (iterator._isRunning && !iterator._isCancelled) {\n iterator._isCancelled = true;\n taskQueue.cancelAll();\n /**\n Ending with a Never result will propagate the Cancellation to all joiners\n **/\n end(TASK_CANCEL);\n }\n }\n /**\n attaches cancellation logic to this task's continuation\n this will permit cancellation to propagate down the call chain\n **/\n cont && (cont.cancel = cancel);\n\n // tracks the running status\n iterator._isRunning = true;\n\n // kicks up the generator\n next();\n\n // then return the task descriptor to the caller\n return task;\n\n /**\n This is the generator driver\n It's a recursive async/continuation function which calls itself\n until the generator terminates or throws\n **/\n function next(arg, isErr) {\n // Preventive measure. If we end up here, then there is really something wrong\n if (!mainTask.isRunning) {\n throw new Error('Trying to resume an already finished generator');\n }\n\n try {\n var result = void 0;\n if (isErr) {\n result = iterator.throw(arg);\n } else if (arg === TASK_CANCEL) {\n /**\n getting TASK_CANCEL automatically cancels the main task\n We can get this value here\n - By cancelling the parent task manually\n - By joining a Cancelled task\n **/\n mainTask.isCancelled = true;\n /**\n Cancels the current effect; this will propagate the cancellation down to any called tasks\n **/\n next.cancel();\n /**\n If this Generator has a `return` method then invokes it\n This will jump to the finally block\n **/\n result = is.func(iterator.return) ? iterator.return(TASK_CANCEL) : { done: true, value: TASK_CANCEL };\n } else if (arg === CHANNEL_END) {\n // We get CHANNEL_END by taking from a channel that ended using `take` (and not `takem` used to trap End of channels)\n result = is.func(iterator.return) ? iterator.return() : { done: true };\n } else {\n result = iterator.next(arg);\n }\n\n if (!result.done) {\n runEffect(result.value, parentEffectId, '', next);\n } else {\n /**\n This Generator has ended, terminate the main task and notify the fork queue\n **/\n mainTask.isMainRunning = false;\n mainTask.cont && mainTask.cont(result.value);\n }\n } catch (error) {\n if (mainTask.isCancelled) {\n logError(error);\n }\n mainTask.isMainRunning = false;\n mainTask.cont(error, true);\n }\n }\n\n function end(result, isErr) {\n iterator._isRunning = false;\n stdChannel.close();\n if (!isErr) {\n iterator._result = result;\n iterator._deferredEnd && iterator._deferredEnd.resolve(result);\n } else {\n if (result instanceof Error) {\n Object.defineProperty(result, 'sagaStack', {\n value: 'at ' + name + ' \\n ' + (result.sagaStack || result.stack),\n configurable: true\n });\n }\n if (!task.cont) {\n if (result instanceof Error && onError) {\n onError(result);\n } else {\n logError(result);\n }\n }\n iterator._error = result;\n iterator._isAborted = true;\n iterator._deferredEnd && iterator._deferredEnd.reject(result);\n }\n task.cont && task.cont(result, isErr);\n task.joiners.forEach(function (j) {\n return j.cb(result, isErr);\n });\n task.joiners = null;\n }\n\n function runEffect(effect, parentEffectId) {\n var label = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var cb = arguments[3];\n\n var effectId = nextEffectId();\n sagaMonitor && sagaMonitor.effectTriggered({ effectId: effectId, parentEffectId: parentEffectId, label: label, effect: effect });\n\n /**\n completion callback and cancel callback are mutually exclusive\n We can't cancel an already completed effect\n And We can't complete an already cancelled effectId\n **/\n var effectSettled = void 0;\n\n // Completion callback passed to the appropriate effect runner\n function currCb(res, isErr) {\n if (effectSettled) {\n return;\n }\n\n effectSettled = true;\n cb.cancel = noop; // defensive measure\n if (sagaMonitor) {\n isErr ? sagaMonitor.effectRejected(effectId, res) : sagaMonitor.effectResolved(effectId, res);\n }\n cb(res, isErr);\n }\n // tracks down the current cancel\n currCb.cancel = noop;\n\n // setup cancellation logic on the parent cb\n cb.cancel = function () {\n // prevents cancelling an already completed effect\n if (effectSettled) {\n return;\n }\n\n effectSettled = true;\n /**\n propagates cancel downward\n catch uncaught cancellations errors; since we can no longer call the completion\n callback, log errors raised during cancellations into the console\n **/\n try {\n currCb.cancel();\n } catch (err) {\n logError(err);\n }\n currCb.cancel = noop; // defensive measure\n\n sagaMonitor && sagaMonitor.effectCancelled(effectId);\n };\n\n /**\n each effect runner must attach its own logic of cancellation to the provided callback\n it allows this generator to propagate cancellation downward.\n ATTENTION! effect runners must setup the cancel logic by setting cb.cancel = [cancelMethod]\n And the setup must occur before calling the callback\n This is a sort of inversion of control: called async functions are responsible\n for completing the flow by calling the provided continuation; while caller functions\n are responsible for aborting the current flow by calling the attached cancel function\n Library users can attach their own cancellation logic to promises by defining a\n promise[CANCEL] method in their returned promises\n ATTENTION! calling cancel must have no effect on an already completed or cancelled effect\n **/\n var data = void 0;\n // prettier-ignore\n return (\n // Non declarative effect\n is.promise(effect) ? resolvePromise(effect, currCb) : is.helper(effect) ? runForkEffect(wrapHelper(effect), effectId, currCb) : is.iterator(effect) ? resolveIterator(effect, effectId, name, currCb)\n\n // declarative effects\n : is.array(effect) ? runParallelEffect(effect, effectId, currCb) : (data = asEffect.take(effect)) ? runTakeEffect(data, currCb) : (data = asEffect.put(effect)) ? runPutEffect(data, currCb) : (data = asEffect.all(effect)) ? runAllEffect(data, effectId, currCb) : (data = asEffect.race(effect)) ? runRaceEffect(data, effectId, currCb) : (data = asEffect.call(effect)) ? runCallEffect(data, effectId, currCb) : (data = asEffect.cps(effect)) ? runCPSEffect(data, currCb) : (data = asEffect.fork(effect)) ? runForkEffect(data, effectId, currCb) : (data = asEffect.join(effect)) ? runJoinEffect(data, currCb) : (data = asEffect.cancel(effect)) ? runCancelEffect(data, currCb) : (data = asEffect.select(effect)) ? runSelectEffect(data, currCb) : (data = asEffect.actionChannel(effect)) ? runChannelEffect(data, currCb) : (data = asEffect.flush(effect)) ? runFlushEffect(data, currCb) : (data = asEffect.cancelled(effect)) ? runCancelledEffect(data, currCb) : (data = asEffect.getContext(effect)) ? runGetContextEffect(data, currCb) : (data = asEffect.setContext(effect)) ? runSetContextEffect(data, currCb) : /* anything else returned as is */currCb(effect)\n );\n }\n\n function resolvePromise(promise, cb) {\n var cancelPromise = promise[CANCEL];\n if (is.func(cancelPromise)) {\n cb.cancel = cancelPromise;\n } else if (is.func(promise.abort)) {\n cb.cancel = function () {\n return promise.abort();\n };\n // TODO: add support for the fetch API, whenever they get around to\n // adding cancel support\n }\n promise.then(cb, function (error) {\n return cb(error, true);\n });\n }\n\n function resolveIterator(iterator, effectId, name, cb) {\n proc(iterator, subscribe, dispatch, getState, taskContext, options, effectId, name, cb);\n }\n\n function runTakeEffect(_ref2, cb) {\n var channel = _ref2.channel,\n pattern = _ref2.pattern,\n maybe = _ref2.maybe;\n\n channel = channel || stdChannel;\n var takeCb = function takeCb(inp) {\n return inp instanceof Error ? cb(inp, true) : isEnd(inp) && !maybe ? cb(CHANNEL_END) : cb(inp);\n };\n try {\n channel.take(takeCb, matcher(pattern));\n } catch (err) {\n return cb(err, true);\n }\n cb.cancel = takeCb.cancel;\n }\n\n function runPutEffect(_ref3, cb) {\n var channel = _ref3.channel,\n action = _ref3.action,\n resolve = _ref3.resolve;\n\n /**\n Schedule the put in case another saga is holding a lock.\n The put will be executed atomically. ie nested puts will execute after\n this put has terminated.\n **/\n asap(function () {\n var result = void 0;\n try {\n result = (channel ? channel.put : dispatch)(action);\n } catch (error) {\n // If we have a channel or `put.resolve` was used then bubble up the error.\n if (channel || resolve) return cb(error, true);\n logError(error);\n }\n\n if (resolve && is.promise(result)) {\n resolvePromise(result, cb);\n } else {\n return cb(result);\n }\n });\n // Put effects are non cancellables\n }\n\n function runCallEffect(_ref4, effectId, cb) {\n var context = _ref4.context,\n fn = _ref4.fn,\n args = _ref4.args;\n\n var result = void 0;\n // catch synchronous failures; see #152\n try {\n result = fn.apply(context, args);\n } catch (error) {\n return cb(error, true);\n }\n return is.promise(result) ? resolvePromise(result, cb) : is.iterator(result) ? resolveIterator(result, effectId, fn.name, cb) : cb(result);\n }\n\n function runCPSEffect(_ref5, cb) {\n var context = _ref5.context,\n fn = _ref5.fn,\n args = _ref5.args;\n\n // CPS (ie node style functions) can define their own cancellation logic\n // by setting cancel field on the cb\n\n // catch synchronous failures; see #152\n try {\n var cpsCb = function cpsCb(err, res) {\n return is.undef(err) ? cb(res) : cb(err, true);\n };\n fn.apply(context, args.concat(cpsCb));\n if (cpsCb.cancel) {\n cb.cancel = function () {\n return cpsCb.cancel();\n };\n }\n } catch (error) {\n return cb(error, true);\n }\n }\n\n function runForkEffect(_ref6, effectId, cb) {\n var context = _ref6.context,\n fn = _ref6.fn,\n args = _ref6.args,\n detached = _ref6.detached;\n\n var taskIterator = createTaskIterator({ context: context, fn: fn, args: args });\n\n try {\n suspend();\n var _task = proc(taskIterator, subscribe, dispatch, getState, taskContext, options, effectId, fn.name, detached ? null : noop);\n\n if (detached) {\n cb(_task);\n } else {\n if (taskIterator._isRunning) {\n taskQueue.addTask(_task);\n cb(_task);\n } else if (taskIterator._error) {\n taskQueue.abort(taskIterator._error);\n } else {\n cb(_task);\n }\n }\n } finally {\n flush();\n }\n // Fork effects are non cancellables\n }\n\n function runJoinEffect(t, cb) {\n if (t.isRunning()) {\n var joiner = { task: task, cb: cb };\n cb.cancel = function () {\n return remove(t.joiners, joiner);\n };\n t.joiners.push(joiner);\n } else {\n t.isAborted() ? cb(t.error(), true) : cb(t.result());\n }\n }\n\n function runCancelEffect(taskToCancel, cb) {\n if (taskToCancel === SELF_CANCELLATION) {\n taskToCancel = task;\n }\n if (taskToCancel.isRunning()) {\n taskToCancel.cancel();\n }\n cb();\n // cancel effects are non cancellables\n }\n\n function runAllEffect(effects, effectId, cb) {\n var keys = Object.keys(effects);\n\n if (!keys.length) {\n return cb(is.array(effects) ? [] : {});\n }\n\n var completedCount = 0;\n var completed = void 0;\n var results = {};\n var childCbs = {};\n\n function checkEffectEnd() {\n if (completedCount === keys.length) {\n completed = true;\n cb(is.array(effects) ? array.from(_extends({}, results, { length: keys.length })) : results);\n }\n }\n\n keys.forEach(function (key) {\n var chCbAtKey = function chCbAtKey(res, isErr) {\n if (completed) {\n return;\n }\n if (isErr || isEnd(res) || res === CHANNEL_END || res === TASK_CANCEL) {\n cb.cancel();\n cb(res, isErr);\n } else {\n results[key] = res;\n completedCount++;\n checkEffectEnd();\n }\n };\n chCbAtKey.cancel = noop;\n childCbs[key] = chCbAtKey;\n });\n\n cb.cancel = function () {\n if (!completed) {\n completed = true;\n keys.forEach(function (key) {\n return childCbs[key].cancel();\n });\n }\n };\n\n keys.forEach(function (key) {\n return runEffect(effects[key], effectId, key, childCbs[key]);\n });\n }\n\n function runRaceEffect(effects, effectId, cb) {\n var completed = void 0;\n var keys = Object.keys(effects);\n var childCbs = {};\n\n keys.forEach(function (key) {\n var chCbAtKey = function chCbAtKey(res, isErr) {\n if (completed) {\n return;\n }\n\n if (isErr) {\n // Race Auto cancellation\n cb.cancel();\n cb(res, true);\n } else if (!isEnd(res) && res !== CHANNEL_END && res !== TASK_CANCEL) {\n var _response;\n\n cb.cancel();\n completed = true;\n var response = (_response = {}, _response[key] = res, _response);\n cb(is.array(effects) ? [].slice.call(_extends({}, response, { length: keys.length })) : response);\n }\n };\n chCbAtKey.cancel = noop;\n childCbs[key] = chCbAtKey;\n });\n\n cb.cancel = function () {\n // prevents unnecessary cancellation\n if (!completed) {\n completed = true;\n keys.forEach(function (key) {\n return childCbs[key].cancel();\n });\n }\n };\n keys.forEach(function (key) {\n if (completed) {\n return;\n }\n runEffect(effects[key], effectId, key, childCbs[key]);\n });\n }\n\n function runSelectEffect(_ref7, cb) {\n var selector = _ref7.selector,\n args = _ref7.args;\n\n try {\n var state = selector.apply(undefined, [getState()].concat(args));\n cb(state);\n } catch (error) {\n cb(error, true);\n }\n }\n\n function runChannelEffect(_ref8, cb) {\n var pattern = _ref8.pattern,\n buffer = _ref8.buffer;\n\n var match = matcher(pattern);\n match.pattern = pattern;\n cb(eventChannel(subscribe, buffer || buffers.fixed(), match));\n }\n\n function runCancelledEffect(data, cb) {\n cb(!!mainTask.isCancelled);\n }\n\n function runFlushEffect(channel, cb) {\n channel.flush(cb);\n }\n\n function runGetContextEffect(prop, cb) {\n cb(taskContext[prop]);\n }\n\n function runSetContextEffect(props, cb) {\n object.assign(taskContext, props);\n cb();\n }\n\n function newTask(id, name, iterator, cont) {\n var _done, _ref9, _mutatorMap;\n\n iterator._deferredEnd = null;\n return _ref9 = {}, _ref9[TASK] = true, _ref9.id = id, _ref9.name = name, _done = 'done', _mutatorMap = {}, _mutatorMap[_done] = _mutatorMap[_done] || {}, _mutatorMap[_done].get = function () {\n if (iterator._deferredEnd) {\n return iterator._deferredEnd.promise;\n } else {\n var def = deferred();\n iterator._deferredEnd = def;\n if (!iterator._isRunning) {\n iterator._error ? def.reject(iterator._error) : def.resolve(iterator._result);\n }\n return def.promise;\n }\n }, _ref9.cont = cont, _ref9.joiners = [], _ref9.cancel = cancel, _ref9.isRunning = function isRunning() {\n return iterator._isRunning;\n }, _ref9.isCancelled = function isCancelled() {\n return iterator._isCancelled;\n }, _ref9.isAborted = function isAborted() {\n return iterator._isAborted;\n }, _ref9.result = function result() {\n return iterator._result;\n }, _ref9.error = function error() {\n return iterator._error;\n }, _ref9.setContext = function setContext(props) {\n check(props, is.object, createSetContextWarning('task', props));\n object.assign(taskContext, props);\n }, _defineEnumerableProperties(_ref9, _mutatorMap), _ref9;\n }\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux-saga/es/internal/proc.js\n// module id = 187\n// module chunks = 0","import takeEveryHelper from './takeEvery';\nimport takeLatestHelper from './takeLatest';\nimport throttleHelper from './throttle';\n\nimport { deprecate } from '../utils';\n\nvar deprecationWarning = function deprecationWarning(helperName) {\n return 'import { ' + helperName + ' } from \\'redux-saga\\' has been deprecated in favor of import { ' + helperName + ' } from \\'redux-saga/effects\\'.\\nThe latter will not work with yield*, as helper effects are wrapped automatically for you in fork effect.\\nTherefore yield ' + helperName + ' will return task descriptor to your saga and execute next lines of code.';\n};\n\nvar takeEvery = /*#__PURE__*/deprecate(takeEveryHelper, /*#__PURE__*/deprecationWarning('takeEvery'));\nvar takeLatest = /*#__PURE__*/deprecate(takeLatestHelper, /*#__PURE__*/deprecationWarning('takeLatest'));\nvar throttle = /*#__PURE__*/deprecate(throttleHelper, /*#__PURE__*/deprecationWarning('throttle'));\n\nexport { takeEvery, takeLatest, throttle, takeEveryHelper, takeLatestHelper, throttleHelper };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux-saga/es/internal/sagaHelpers/index.js\n// module id = 188\n// module chunks = 0","export const CHANNEL = 'CHANNEL';\nexport const ASSET_LITE = 'ASSET_LITE';\nexport const ASSET_DETAILS = 'ASSET_DETAILS';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/show_request_types.js","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { addRequestToRequestList, onRequestError, onRequestUpdate, addAssetToAssetList } from 'actions/show';\nimport { getLongClaimId, getShortId, getClaimData } from 'api/assetApi';\nimport { selectShowState } from 'selectors/show';\nimport { selectSiteHost } from 'selectors/site';\n\nexport function * newAssetRequest (action) {\n const { requestType, requestId, name, modifier } = action.data;\n // put an action to update the request in redux\n yield put(onRequestUpdate(requestType, requestId));\n // is this an existing request?\n // If this uri is in the request list, it's already been fetched\n const state = yield select(selectShowState);\n const host = yield select(selectSiteHost);\n if (state.requestList[requestId]) {\n return null;\n }\n // get long id && add request to request list\n let longId;\n try {\n ({data: longId} = yield call(getLongClaimId, host, name, modifier));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n const assetKey = `a#${name}#${longId}`;\n yield put(addRequestToRequestList(requestId, null, assetKey));\n // is this an existing asset?\n // If this asset is in the asset list, it's already been fetched\n if (state.assetList[assetKey]) {\n return null;\n }\n // get short Id\n let shortId;\n try {\n ({data: shortId} = yield call(getShortId, host, name, longId));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // get asset claim data\n let claimData;\n try {\n ({data: claimData} = yield call(getClaimData, host, name, longId));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // add asset to asset list\n yield put(addAssetToAssetList(assetKey, null, name, longId, shortId, claimData));\n // clear any errors in request error\n yield put(onRequestError(null));\n};\n\nexport function * watchNewAssetRequest () {\n yield takeLatest(actions.ASSET_REQUEST_NEW, newAssetRequest);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/show_asset.js","import {call, put, select, takeLatest} from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { addNewChannelToChannelList, addRequestToRequestList, onRequestError, onRequestUpdate, updateChannelClaims } from 'actions/show';\nimport { getChannelClaims, getChannelData } from 'api/channelApi';\nimport { selectShowState } from 'selectors/show';\nimport { selectSiteHost } from 'selectors/site';\n\nexport function * newChannelRequest (action) {\n const { requestType, requestId, channelName, channelId } = action.data;\n // put an action to update the request in redux\n yield put(onRequestUpdate(requestType, requestId));\n // is this an existing request?\n // If this uri is in the request list, it's already been fetched\n const state = yield select(selectShowState);\n const host = yield select(selectSiteHost);\n if (state.requestList[requestId]) {\n return null;\n }\n // get channel long id\n let longId, shortId;\n try {\n ({ data: {longChannelClaimId: longId, shortChannelClaimId: shortId} } = yield call(getChannelData, host, channelName, channelId));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // store the request in the channel requests list\n const channelKey = `c#${channelName}#${longId}`;\n yield put(addRequestToRequestList(requestId, null, channelKey));\n // is this an existing channel?\n // If this channel is in the channel list, it's already been fetched\n if (state.channelList[channelKey]) {\n return null;\n }\n // get channel claims data\n let claimsData;\n try {\n ({ data: claimsData } = yield call(getChannelClaims, host, longId, channelName, 1));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // store the channel data in the channel list\n yield put(addNewChannelToChannelList(channelKey, channelName, shortId, longId, claimsData));\n // clear any request errors\n yield put(onRequestError(null));\n}\n\nexport function * watchNewChannelRequest () {\n yield takeLatest(actions.CHANNEL_REQUEST_NEW, newChannelRequest);\n};\n\nfunction * getNewClaimsAndUpdateChannel (action) {\n const { channelKey, name, longId, page } = action.data;\n const host = yield select(selectSiteHost);\n let claimsData;\n try {\n ({ data: claimsData } = yield call(getChannelClaims, host, longId, name, page));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n yield put(updateChannelClaims(channelKey, claimsData));\n}\n\nexport function * watchUpdateChannelClaims () {\n yield takeLatest(actions.CHANNEL_CLAIMS_UPDATE_ASYNC, getNewClaimsAndUpdateChannel);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/show_channel.js","export const LOAD_START = 'LOAD_START';\nexport const LOADING = 'LOADING';\nexport const PUBLISHING = 'PUBLISHING';\nexport const SUCCESS = 'SUCCESS';\nexport const FAILED = 'FAILED';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/publish_claim_states.js","exports.__esModule = true;\nexports.Helmet = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactSideEffect = require(\"react-side-effect\");\n\nvar _reactSideEffect2 = _interopRequireDefault(_reactSideEffect);\n\nvar _deepEqual = require(\"deep-equal\");\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _HelmetUtils = require(\"./HelmetUtils.js\");\n\nvar _HelmetConstants = require(\"./HelmetConstants.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Helmet = function Helmet(Component) {\n var _class, _temp;\n\n return _temp = _class = function (_React$Component) {\n _inherits(HelmetWrapper, _React$Component);\n\n function HelmetWrapper() {\n _classCallCheck(this, HelmetWrapper);\n\n return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !(0, _deepEqual2.default)(this.props, nextProps);\n };\n\n HelmetWrapper.prototype.mapNestedChildrenToProps = function mapNestedChildrenToProps(child, nestedChildren) {\n if (!nestedChildren) {\n return null;\n }\n\n switch (child.type) {\n case _HelmetConstants.TAG_NAMES.SCRIPT:\n case _HelmetConstants.TAG_NAMES.NOSCRIPT:\n return {\n innerHTML: nestedChildren\n };\n\n case _HelmetConstants.TAG_NAMES.STYLE:\n return {\n cssText: nestedChildren\n };\n }\n\n throw new Error(\"<\" + child.type + \" /> elements are self-closing and can not contain children. Refer to our API for more information.\");\n };\n\n HelmetWrapper.prototype.flattenArrayTypeChildren = function flattenArrayTypeChildren(_ref) {\n var _extends2;\n\n var child = _ref.child,\n arrayTypeChildren = _ref.arrayTypeChildren,\n newChildProps = _ref.newChildProps,\n nestedChildren = _ref.nestedChildren;\n\n return _extends({}, arrayTypeChildren, (_extends2 = {}, _extends2[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _extends2));\n };\n\n HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) {\n var _extends3, _extends4;\n\n var child = _ref2.child,\n newProps = _ref2.newProps,\n newChildProps = _ref2.newChildProps,\n nestedChildren = _ref2.nestedChildren;\n\n switch (child.type) {\n case _HelmetConstants.TAG_NAMES.TITLE:\n return _extends({}, newProps, (_extends3 = {}, _extends3[child.type] = nestedChildren, _extends3.titleAttributes = _extends({}, newChildProps), _extends3));\n\n case _HelmetConstants.TAG_NAMES.BODY:\n return _extends({}, newProps, {\n bodyAttributes: _extends({}, newChildProps)\n });\n\n case _HelmetConstants.TAG_NAMES.HTML:\n return _extends({}, newProps, {\n htmlAttributes: _extends({}, newChildProps)\n });\n }\n\n return _extends({}, newProps, (_extends4 = {}, _extends4[child.type] = _extends({}, newChildProps), _extends4));\n };\n\n HelmetWrapper.prototype.mapArrayTypeChildrenToProps = function mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n var newFlattenedProps = _extends({}, newProps);\n\n Object.keys(arrayTypeChildren).forEach(function (arrayChildName) {\n var _extends5;\n\n newFlattenedProps = _extends({}, newFlattenedProps, (_extends5 = {}, _extends5[arrayChildName] = arrayTypeChildren[arrayChildName], _extends5));\n });\n\n return newFlattenedProps;\n };\n\n HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!_HelmetConstants.VALID_TAG_NAMES.some(function (name) {\n return child.type === name;\n })) {\n if (typeof child.type === \"function\") {\n return (0, _HelmetUtils.warn)(\"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.\");\n }\n\n return (0, _HelmetUtils.warn)(\"Only elements types \" + _HelmetConstants.VALID_TAG_NAMES.join(\", \") + \" are allowed. Helmet does not support rendering <\" + child.type + \"> elements. Refer to our API for more information.\");\n }\n\n if (nestedChildren && typeof nestedChildren !== \"string\" && (!Array.isArray(nestedChildren) || nestedChildren.some(function (nestedChild) {\n return typeof nestedChild !== \"string\";\n }))) {\n throw new Error(\"Helmet expects a string as a child of <\" + child.type + \">. Did you forget to wrap your children in braces? ( <\" + child.type + \">{``} ) Refer to our API for more information.\");\n }\n }\n\n return true;\n };\n\n HelmetWrapper.prototype.mapChildrenToProps = function mapChildrenToProps(children, newProps) {\n var _this2 = this;\n\n var arrayTypeChildren = {};\n\n _react2.default.Children.forEach(children, function (child) {\n if (!child || !child.props) {\n return;\n }\n\n var _child$props = child.props,\n nestedChildren = _child$props.children,\n childProps = _objectWithoutProperties(_child$props, [\"children\"]);\n\n var newChildProps = (0, _HelmetUtils.convertReactPropstoHtmlAttributes)(childProps);\n\n _this2.warnOnInvalidChildren(child, nestedChildren);\n\n switch (child.type) {\n case _HelmetConstants.TAG_NAMES.LINK:\n case _HelmetConstants.TAG_NAMES.META:\n case _HelmetConstants.TAG_NAMES.NOSCRIPT:\n case _HelmetConstants.TAG_NAMES.SCRIPT:\n case _HelmetConstants.TAG_NAMES.STYLE:\n arrayTypeChildren = _this2.flattenArrayTypeChildren({\n child: child,\n arrayTypeChildren: arrayTypeChildren,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n\n default:\n newProps = _this2.mapObjectTypeChildren({\n child: child,\n newProps: newProps,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n }\n });\n\n newProps = this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n return newProps;\n };\n\n HelmetWrapper.prototype.render = function render() {\n var _props = this.props,\n children = _props.children,\n props = _objectWithoutProperties(_props, [\"children\"]);\n\n var newProps = _extends({}, props);\n\n if (children) {\n newProps = this.mapChildrenToProps(children, newProps);\n }\n\n return _react2.default.createElement(Component, newProps);\n };\n\n _createClass(HelmetWrapper, null, [{\n key: \"canUseDOM\",\n\n\n // Component.peek comes from react-side-effect:\n // For testing, you may use a static peek() method available on the returned component.\n // It lets you get the current state without resetting the mounted instance stack.\n // Don’t use it for anything other than testing.\n\n /**\n * @param {Object} base: {\"target\": \"_blank\", \"href\": \"http://mysite.com/\"}\n * @param {Object} bodyAttributes: {\"className\": \"root\"}\n * @param {String} defaultTitle: \"Default Title\"\n * @param {Boolean} defer: true\n * @param {Boolean} encodeSpecialCharacters: true\n * @param {Object} htmlAttributes: {\"lang\": \"en\", \"amp\": undefined}\n * @param {Array} link: [{\"rel\": \"canonical\", \"href\": \"http://mysite.com/example\"}]\n * @param {Array} meta: [{\"name\": \"description\", \"content\": \"Test description\"}]\n * @param {Array} noscript: [{\"innerHTML\": \" console.log(newState)\"\n * @param {Array} script: [{\"type\": \"text/javascript\", \"src\": \"http://mysite.com/js/test.js\"}]\n * @param {Array} style: [{\"type\": \"text/css\", \"cssText\": \"div { display: block; color: blue; }\"}]\n * @param {String} title: \"Title\"\n * @param {Object} titleAttributes: {\"itemprop\": \"name\"}\n * @param {String} titleTemplate: \"MySite.com - %s\"\n */\n set: function set(canUseDOM) {\n Component.canUseDOM = canUseDOM;\n }\n }]);\n\n return HelmetWrapper;\n }(_react2.default.Component), _class.propTypes = {\n base: _propTypes2.default.object,\n bodyAttributes: _propTypes2.default.object,\n children: _propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.node), _propTypes2.default.node]),\n defaultTitle: _propTypes2.default.string,\n defer: _propTypes2.default.bool,\n encodeSpecialCharacters: _propTypes2.default.bool,\n htmlAttributes: _propTypes2.default.object,\n link: _propTypes2.default.arrayOf(_propTypes2.default.object),\n meta: _propTypes2.default.arrayOf(_propTypes2.default.object),\n noscript: _propTypes2.default.arrayOf(_propTypes2.default.object),\n onChangeClientState: _propTypes2.default.func,\n script: _propTypes2.default.arrayOf(_propTypes2.default.object),\n style: _propTypes2.default.arrayOf(_propTypes2.default.object),\n title: _propTypes2.default.string,\n titleAttributes: _propTypes2.default.object,\n titleTemplate: _propTypes2.default.string\n }, _class.defaultProps = {\n defer: true,\n encodeSpecialCharacters: true\n }, _class.peek = Component.peek, _class.rewind = function () {\n var mappedState = Component.rewind();\n if (!mappedState) {\n // provide fallback if mappedState is undefined\n mappedState = (0, _HelmetUtils.mapStateOnServer)({\n baseTag: [],\n bodyAttributes: {},\n encodeSpecialCharacters: true,\n htmlAttributes: {},\n linkTags: [],\n metaTags: [],\n noscriptTags: [],\n scriptTags: [],\n styleTags: [],\n title: \"\",\n titleAttributes: {}\n });\n }\n\n return mappedState;\n }, _temp;\n};\n\nvar NullComponent = function NullComponent() {\n return null;\n};\n\nvar HelmetSideEffects = (0, _reactSideEffect2.default)(_HelmetUtils.reducePropsToState, _HelmetUtils.handleClientStateChange, _HelmetUtils.mapStateOnServer)(NullComponent);\n\nvar HelmetExport = Helmet(HelmetSideEffects);\nHelmetExport.renderStatic = HelmetExport.rewind;\n\nexports.Helmet = HelmetExport;\nexports.default = HelmetExport;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-helmet/lib/Helmet.js\n// module id = 193\n// module chunks = 0","exports.__esModule = true;\nvar ATTRIBUTE_NAMES = exports.ATTRIBUTE_NAMES = {\n BODY: \"bodyAttributes\",\n HTML: \"htmlAttributes\",\n TITLE: \"titleAttributes\"\n};\n\nvar TAG_NAMES = exports.TAG_NAMES = {\n BASE: \"base\",\n BODY: \"body\",\n HEAD: \"head\",\n HTML: \"html\",\n LINK: \"link\",\n META: \"meta\",\n NOSCRIPT: \"noscript\",\n SCRIPT: \"script\",\n STYLE: \"style\",\n TITLE: \"title\"\n};\n\nvar VALID_TAG_NAMES = exports.VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(function (name) {\n return TAG_NAMES[name];\n});\n\nvar TAG_PROPERTIES = exports.TAG_PROPERTIES = {\n CHARSET: \"charset\",\n CSS_TEXT: \"cssText\",\n HREF: \"href\",\n HTTPEQUIV: \"http-equiv\",\n INNER_HTML: \"innerHTML\",\n ITEM_PROP: \"itemprop\",\n NAME: \"name\",\n PROPERTY: \"property\",\n REL: \"rel\",\n SRC: \"src\"\n};\n\nvar REACT_TAG_MAP = exports.REACT_TAG_MAP = {\n accesskey: \"accessKey\",\n charset: \"charSet\",\n class: \"className\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n \"http-equiv\": \"httpEquiv\",\n itemprop: \"itemProp\",\n tabindex: \"tabIndex\"\n};\n\nvar HELMET_PROPS = exports.HELMET_PROPS = {\n DEFAULT_TITLE: \"defaultTitle\",\n DEFER: \"defer\",\n ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n TITLE_TEMPLATE: \"titleTemplate\"\n};\n\nvar HTML_TAG_MAP = exports.HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key]] = key;\n return obj;\n}, {});\n\nvar SELF_CLOSING_TAGS = exports.SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\n\nvar HELMET_ATTRIBUTE = exports.HELMET_ATTRIBUTE = \"data-react-helmet\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-helmet/lib/HelmetConstants.js\n// module id = 194\n// module chunks = 0","import { connect } from 'react-redux';\nimport { selectFile, updateError, clearFile } from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n file : publish.file,\n thumbnail: publish.thumbnail,\n fileError: publish.error.file,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n selectFile: (file) => {\n dispatch(selectFile(file));\n },\n setFileError: (value) => {\n dispatch(clearFile());\n dispatch(updateError('file', value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/Dropzone/index.js","import { connect } from 'react-redux';\nimport { updateLoggedInChannel } from 'actions/channel';\nimport View from './view';\nimport {updateSelectedChannel} from '../../actions/publish';\n\nconst mapDispatchToProps = dispatch => {\n return {\n onChannelLogin: (name, shortId, longId) => {\n dispatch(updateLoggedInChannel(name, shortId, longId));\n dispatch(updateSelectedChannel(name));\n },\n };\n};\n\nexport default connect(null, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelLoginForm/index.js","import { connect } from 'react-redux';\nimport { updateLoggedInChannel } from 'actions/channel';\nimport View from './view';\nimport {updateSelectedChannel} from 'actions/publish';\n\nconst mapDispatchToProps = dispatch => {\n return {\n onChannelLogin: (name, shortId, longId) => {\n dispatch(updateLoggedInChannel(name, shortId, longId));\n dispatch(updateSelectedChannel(name));\n },\n };\n};\n\nexport default connect(null, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelCreateForm/index.js","import { connect } from 'react-redux';\nimport View from './view';\nimport { fileRequested } from 'actions/show';\nimport { selectAsset } from 'selectors/show';\n\nconst mapStateToProps = ({ show }) => {\n // select error and status\n const error = show.displayAsset.error;\n const status = show.displayAsset.status;\n // select asset\n const asset = selectAsset(show);\n // return props\n return {\n error,\n status,\n asset,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onFileRequest: (name, claimId) => {\n dispatch(fileRequested(name, claimId));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetDisplay/index.js","\"use strict\";\n\nrequire(\"core-js/shim\");\n\nrequire(\"regenerator-runtime/runtime\");\n\nrequire(\"core-js/fn/regexp/escape\");\n\nif (global._babelPolyfill) {\n throw new Error(\"only one instance of babel-polyfill is allowed\");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = \"defineProperty\";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, \"padLeft\", \"\".padStart);\ndefine(String.prototype, \"padRight\", \"\".padEnd);\n\n\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/lib/index.js\n// module id = 200\n// module chunks = 0","require('./modules/es6.symbol');\nrequire('./modules/es6.object.create');\nrequire('./modules/es6.object.define-property');\nrequire('./modules/es6.object.define-properties');\nrequire('./modules/es6.object.get-own-property-descriptor');\nrequire('./modules/es6.object.get-prototype-of');\nrequire('./modules/es6.object.keys');\nrequire('./modules/es6.object.get-own-property-names');\nrequire('./modules/es6.object.freeze');\nrequire('./modules/es6.object.seal');\nrequire('./modules/es6.object.prevent-extensions');\nrequire('./modules/es6.object.is-frozen');\nrequire('./modules/es6.object.is-sealed');\nrequire('./modules/es6.object.is-extensible');\nrequire('./modules/es6.object.assign');\nrequire('./modules/es6.object.is');\nrequire('./modules/es6.object.set-prototype-of');\nrequire('./modules/es6.object.to-string');\nrequire('./modules/es6.function.bind');\nrequire('./modules/es6.function.name');\nrequire('./modules/es6.function.has-instance');\nrequire('./modules/es6.parse-int');\nrequire('./modules/es6.parse-float');\nrequire('./modules/es6.number.constructor');\nrequire('./modules/es6.number.to-fixed');\nrequire('./modules/es6.number.to-precision');\nrequire('./modules/es6.number.epsilon');\nrequire('./modules/es6.number.is-finite');\nrequire('./modules/es6.number.is-integer');\nrequire('./modules/es6.number.is-nan');\nrequire('./modules/es6.number.is-safe-integer');\nrequire('./modules/es6.number.max-safe-integer');\nrequire('./modules/es6.number.min-safe-integer');\nrequire('./modules/es6.number.parse-float');\nrequire('./modules/es6.number.parse-int');\nrequire('./modules/es6.math.acosh');\nrequire('./modules/es6.math.asinh');\nrequire('./modules/es6.math.atanh');\nrequire('./modules/es6.math.cbrt');\nrequire('./modules/es6.math.clz32');\nrequire('./modules/es6.math.cosh');\nrequire('./modules/es6.math.expm1');\nrequire('./modules/es6.math.fround');\nrequire('./modules/es6.math.hypot');\nrequire('./modules/es6.math.imul');\nrequire('./modules/es6.math.log10');\nrequire('./modules/es6.math.log1p');\nrequire('./modules/es6.math.log2');\nrequire('./modules/es6.math.sign');\nrequire('./modules/es6.math.sinh');\nrequire('./modules/es6.math.tanh');\nrequire('./modules/es6.math.trunc');\nrequire('./modules/es6.string.from-code-point');\nrequire('./modules/es6.string.raw');\nrequire('./modules/es6.string.trim');\nrequire('./modules/es6.string.iterator');\nrequire('./modules/es6.string.code-point-at');\nrequire('./modules/es6.string.ends-with');\nrequire('./modules/es6.string.includes');\nrequire('./modules/es6.string.repeat');\nrequire('./modules/es6.string.starts-with');\nrequire('./modules/es6.string.anchor');\nrequire('./modules/es6.string.big');\nrequire('./modules/es6.string.blink');\nrequire('./modules/es6.string.bold');\nrequire('./modules/es6.string.fixed');\nrequire('./modules/es6.string.fontcolor');\nrequire('./modules/es6.string.fontsize');\nrequire('./modules/es6.string.italics');\nrequire('./modules/es6.string.link');\nrequire('./modules/es6.string.small');\nrequire('./modules/es6.string.strike');\nrequire('./modules/es6.string.sub');\nrequire('./modules/es6.string.sup');\nrequire('./modules/es6.date.now');\nrequire('./modules/es6.date.to-json');\nrequire('./modules/es6.date.to-iso-string');\nrequire('./modules/es6.date.to-string');\nrequire('./modules/es6.date.to-primitive');\nrequire('./modules/es6.array.is-array');\nrequire('./modules/es6.array.from');\nrequire('./modules/es6.array.of');\nrequire('./modules/es6.array.join');\nrequire('./modules/es6.array.slice');\nrequire('./modules/es6.array.sort');\nrequire('./modules/es6.array.for-each');\nrequire('./modules/es6.array.map');\nrequire('./modules/es6.array.filter');\nrequire('./modules/es6.array.some');\nrequire('./modules/es6.array.every');\nrequire('./modules/es6.array.reduce');\nrequire('./modules/es6.array.reduce-right');\nrequire('./modules/es6.array.index-of');\nrequire('./modules/es6.array.last-index-of');\nrequire('./modules/es6.array.copy-within');\nrequire('./modules/es6.array.fill');\nrequire('./modules/es6.array.find');\nrequire('./modules/es6.array.find-index');\nrequire('./modules/es6.array.species');\nrequire('./modules/es6.array.iterator');\nrequire('./modules/es6.regexp.constructor');\nrequire('./modules/es6.regexp.to-string');\nrequire('./modules/es6.regexp.flags');\nrequire('./modules/es6.regexp.match');\nrequire('./modules/es6.regexp.replace');\nrequire('./modules/es6.regexp.search');\nrequire('./modules/es6.regexp.split');\nrequire('./modules/es6.promise');\nrequire('./modules/es6.map');\nrequire('./modules/es6.set');\nrequire('./modules/es6.weak-map');\nrequire('./modules/es6.weak-set');\nrequire('./modules/es6.typed.array-buffer');\nrequire('./modules/es6.typed.data-view');\nrequire('./modules/es6.typed.int8-array');\nrequire('./modules/es6.typed.uint8-array');\nrequire('./modules/es6.typed.uint8-clamped-array');\nrequire('./modules/es6.typed.int16-array');\nrequire('./modules/es6.typed.uint16-array');\nrequire('./modules/es6.typed.int32-array');\nrequire('./modules/es6.typed.uint32-array');\nrequire('./modules/es6.typed.float32-array');\nrequire('./modules/es6.typed.float64-array');\nrequire('./modules/es6.reflect.apply');\nrequire('./modules/es6.reflect.construct');\nrequire('./modules/es6.reflect.define-property');\nrequire('./modules/es6.reflect.delete-property');\nrequire('./modules/es6.reflect.enumerate');\nrequire('./modules/es6.reflect.get');\nrequire('./modules/es6.reflect.get-own-property-descriptor');\nrequire('./modules/es6.reflect.get-prototype-of');\nrequire('./modules/es6.reflect.has');\nrequire('./modules/es6.reflect.is-extensible');\nrequire('./modules/es6.reflect.own-keys');\nrequire('./modules/es6.reflect.prevent-extensions');\nrequire('./modules/es6.reflect.set');\nrequire('./modules/es6.reflect.set-prototype-of');\nrequire('./modules/es7.array.includes');\nrequire('./modules/es7.array.flat-map');\nrequire('./modules/es7.array.flatten');\nrequire('./modules/es7.string.at');\nrequire('./modules/es7.string.pad-start');\nrequire('./modules/es7.string.pad-end');\nrequire('./modules/es7.string.trim-left');\nrequire('./modules/es7.string.trim-right');\nrequire('./modules/es7.string.match-all');\nrequire('./modules/es7.symbol.async-iterator');\nrequire('./modules/es7.symbol.observable');\nrequire('./modules/es7.object.get-own-property-descriptors');\nrequire('./modules/es7.object.values');\nrequire('./modules/es7.object.entries');\nrequire('./modules/es7.object.define-getter');\nrequire('./modules/es7.object.define-setter');\nrequire('./modules/es7.object.lookup-getter');\nrequire('./modules/es7.object.lookup-setter');\nrequire('./modules/es7.map.to-json');\nrequire('./modules/es7.set.to-json');\nrequire('./modules/es7.map.of');\nrequire('./modules/es7.set.of');\nrequire('./modules/es7.weak-map.of');\nrequire('./modules/es7.weak-set.of');\nrequire('./modules/es7.map.from');\nrequire('./modules/es7.set.from');\nrequire('./modules/es7.weak-map.from');\nrequire('./modules/es7.weak-set.from');\nrequire('./modules/es7.global');\nrequire('./modules/es7.system.global');\nrequire('./modules/es7.error.is-error');\nrequire('./modules/es7.math.clamp');\nrequire('./modules/es7.math.deg-per-rad');\nrequire('./modules/es7.math.degrees');\nrequire('./modules/es7.math.fscale');\nrequire('./modules/es7.math.iaddh');\nrequire('./modules/es7.math.isubh');\nrequire('./modules/es7.math.imulh');\nrequire('./modules/es7.math.rad-per-deg');\nrequire('./modules/es7.math.radians');\nrequire('./modules/es7.math.scale');\nrequire('./modules/es7.math.umulh');\nrequire('./modules/es7.math.signbit');\nrequire('./modules/es7.promise.finally');\nrequire('./modules/es7.promise.try');\nrequire('./modules/es7.reflect.define-metadata');\nrequire('./modules/es7.reflect.delete-metadata');\nrequire('./modules/es7.reflect.get-metadata');\nrequire('./modules/es7.reflect.get-metadata-keys');\nrequire('./modules/es7.reflect.get-own-metadata');\nrequire('./modules/es7.reflect.get-own-metadata-keys');\nrequire('./modules/es7.reflect.has-metadata');\nrequire('./modules/es7.reflect.has-own-metadata');\nrequire('./modules/es7.reflect.metadata');\nrequire('./modules/es7.asap');\nrequire('./modules/es7.observable');\nrequire('./modules/web.timers');\nrequire('./modules/web.immediate');\nrequire('./modules/web.dom.iterable');\nmodule.exports = require('./modules/_core');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/shim.js\n// module id = 201\n// module chunks = 0","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.symbol.js\n// module id = 202\n// module chunks = 0","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_enum-keys.js\n// module id = 203\n// module chunks = 0","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.create.js\n// module id = 204\n// module chunks = 0","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-property.js\n// module id = 205\n// module chunks = 0","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-properties.js\n// module id = 206\n// module chunks = 0","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-descriptor.js\n// module id = 207\n// module chunks = 0","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-prototype-of.js\n// module id = 208\n// module chunks = 0","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.keys.js\n// module id = 209\n// module chunks = 0","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-names.js\n// module id = 210\n// module chunks = 0","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.freeze.js\n// module id = 211\n// module chunks = 0","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.seal.js\n// module id = 212\n// module chunks = 0","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.prevent-extensions.js\n// module id = 213\n// module chunks = 0","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-frozen.js\n// module id = 214\n// module chunks = 0","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-sealed.js\n// module id = 215\n// module chunks = 0","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-extensible.js\n// module id = 216\n// module chunks = 0","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.assign.js\n// module id = 217\n// module chunks = 0","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is.js\n// module id = 218\n// module chunks = 0","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_same-value.js\n// module id = 219\n// module chunks = 0","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.set-prototype-of.js\n// module id = 220\n// module chunks = 0","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.to-string.js\n// module id = 221\n// module chunks = 0","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.bind.js\n// module id = 222\n// module chunks = 0","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.name.js\n// module id = 223\n// module chunks = 0","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.has-instance.js\n// module id = 224\n// module chunks = 0","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-int.js\n// module id = 225\n// module chunks = 0","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-float.js\n// module id = 226\n// module chunks = 0","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.constructor.js\n// module id = 227\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-fixed.js\n// module id = 228\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-precision.js\n// module id = 229\n// module chunks = 0","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.epsilon.js\n// module id = 230\n// module chunks = 0","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-finite.js\n// module id = 231\n// module chunks = 0","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-integer.js\n// module id = 232\n// module chunks = 0","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-nan.js\n// module id = 233\n// module chunks = 0","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-safe-integer.js\n// module id = 234\n// module chunks = 0","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.max-safe-integer.js\n// module id = 235\n// module chunks = 0","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.min-safe-integer.js\n// module id = 236\n// module chunks = 0","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-float.js\n// module id = 237\n// module chunks = 0","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-int.js\n// module id = 238\n// module chunks = 0","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.acosh.js\n// module id = 239\n// module chunks = 0","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.asinh.js\n// module id = 240\n// module chunks = 0","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.atanh.js\n// module id = 241\n// module chunks = 0","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cbrt.js\n// module id = 242\n// module chunks = 0","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.clz32.js\n// module id = 243\n// module chunks = 0","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cosh.js\n// module id = 244\n// module chunks = 0","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.expm1.js\n// module id = 245\n// module chunks = 0","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.fround.js\n// module id = 246\n// module chunks = 0","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.hypot.js\n// module id = 247\n// module chunks = 0","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.imul.js\n// module id = 248\n// module chunks = 0","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log10.js\n// module id = 249\n// module chunks = 0","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log1p.js\n// module id = 250\n// module chunks = 0","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log2.js\n// module id = 251\n// module chunks = 0","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sign.js\n// module id = 252\n// module chunks = 0","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sinh.js\n// module id = 253\n// module chunks = 0","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.tanh.js\n// module id = 254\n// module chunks = 0","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.trunc.js\n// module id = 255\n// module chunks = 0","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.from-code-point.js\n// module id = 256\n// module chunks = 0","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.raw.js\n// module id = 257\n// module chunks = 0","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.trim.js\n// module id = 258\n// module chunks = 0","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.iterator.js\n// module id = 259\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.code-point-at.js\n// module id = 260\n// module chunks = 0","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.ends-with.js\n// module id = 261\n// module chunks = 0","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.includes.js\n// module id = 262\n// module chunks = 0","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.repeat.js\n// module id = 263\n// module chunks = 0","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.starts-with.js\n// module id = 264\n// module chunks = 0","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.anchor.js\n// module id = 265\n// module chunks = 0","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.big.js\n// module id = 266\n// module chunks = 0","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.blink.js\n// module id = 267\n// module chunks = 0","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.bold.js\n// module id = 268\n// module chunks = 0","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fixed.js\n// module id = 269\n// module chunks = 0","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontcolor.js\n// module id = 270\n// module chunks = 0","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontsize.js\n// module id = 271\n// module chunks = 0","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.italics.js\n// module id = 272\n// module chunks = 0","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.link.js\n// module id = 273\n// module chunks = 0","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.small.js\n// module id = 274\n// module chunks = 0","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.strike.js\n// module id = 275\n// module chunks = 0","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sub.js\n// module id = 276\n// module chunks = 0","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sup.js\n// module id = 277\n// module chunks = 0","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.now.js\n// module id = 278\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-json.js\n// module id = 279\n// module chunks = 0","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-iso-string.js\n// module id = 280\n// module chunks = 0","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-iso-string.js\n// module id = 281\n// module chunks = 0","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-string.js\n// module id = 282\n// module chunks = 0","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-primitive.js\n// module id = 283\n// module chunks = 0","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-primitive.js\n// module id = 284\n// module chunks = 0","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.is-array.js\n// module id = 285\n// module chunks = 0","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.from.js\n// module id = 286\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.of.js\n// module id = 287\n// module chunks = 0","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.join.js\n// module id = 288\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.slice.js\n// module id = 289\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.sort.js\n// module id = 290\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.for-each.js\n// module id = 291\n// module chunks = 0","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-constructor.js\n// module id = 292\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.map.js\n// module id = 293\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.filter.js\n// module id = 294\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.some.js\n// module id = 295\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.every.js\n// module id = 296\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce.js\n// module id = 297\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce-right.js\n// module id = 298\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.index-of.js\n// module id = 299\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.last-index-of.js\n// module id = 300\n// module chunks = 0","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.copy-within.js\n// module id = 301\n// module chunks = 0","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.fill.js\n// module id = 302\n// module chunks = 0","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find.js\n// module id = 303\n// module chunks = 0","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find-index.js\n// module id = 304\n// module chunks = 0","require('./_set-species')('Array');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.species.js\n// module id = 305\n// module chunks = 0","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.constructor.js\n// module id = 306\n// module chunks = 0","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.to-string.js\n// module id = 307\n// module chunks = 0","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.match.js\n// module id = 308\n// module chunks = 0","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.replace.js\n// module id = 309\n// module chunks = 0","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.search.js\n// module id = 310\n// module chunks = 0","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.split.js\n// module id = 311\n// module chunks = 0","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.promise.js\n// module id = 312\n// module chunks = 0","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-set.js\n// module id = 313\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.array-buffer.js\n// module id = 314\n// module chunks = 0","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.data-view.js\n// module id = 315\n// module chunks = 0","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int8-array.js\n// module id = 316\n// module chunks = 0","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-array.js\n// module id = 317\n// module chunks = 0","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-clamped-array.js\n// module id = 318\n// module chunks = 0","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int16-array.js\n// module id = 319\n// module chunks = 0","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint16-array.js\n// module id = 320\n// module chunks = 0","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int32-array.js\n// module id = 321\n// module chunks = 0","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint32-array.js\n// module id = 322\n// module chunks = 0","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float32-array.js\n// module id = 323\n// module chunks = 0","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float64-array.js\n// module id = 324\n// module chunks = 0","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.apply.js\n// module id = 325\n// module chunks = 0","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.construct.js\n// module id = 326\n// module chunks = 0","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.define-property.js\n// module id = 327\n// module chunks = 0","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.delete-property.js\n// module id = 328\n// module chunks = 0","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.enumerate.js\n// module id = 329\n// module chunks = 0","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get.js\n// module id = 330\n// module chunks = 0","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js\n// module id = 331\n// module chunks = 0","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-prototype-of.js\n// module id = 332\n// module chunks = 0","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.has.js\n// module id = 333\n// module chunks = 0","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.is-extensible.js\n// module id = 334\n// module chunks = 0","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.own-keys.js\n// module id = 335\n// module chunks = 0","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.prevent-extensions.js\n// module id = 336\n// module chunks = 0","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set.js\n// module id = 337\n// module chunks = 0","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set-prototype-of.js\n// module id = 338\n// module chunks = 0","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.includes.js\n// module id = 339\n// module chunks = 0","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.flat-map.js\n// module id = 340\n// module chunks = 0","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatten');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.flatten.js\n// module id = 341\n// module chunks = 0","'use strict';\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = require('./_export');\nvar $at = require('./_string-at')(true);\n\n$export($export.P, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.at.js\n// module id = 342\n// module chunks = 0","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-start.js\n// module id = 343\n// module chunks = 0","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-end.js\n// module id = 344\n// module chunks = 0","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-left.js\n// module id = 345\n// module chunks = 0","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-right.js\n// module id = 346\n// module chunks = 0","'use strict';\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = require('./_export');\nvar defined = require('./_defined');\nvar toLength = require('./_to-length');\nvar isRegExp = require('./_is-regexp');\nvar getFlags = require('./_flags');\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\nrequire('./_iter-create')($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.match-all.js\n// module id = 347\n// module chunks = 0","require('./_wks-define')('asyncIterator');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.async-iterator.js\n// module id = 348\n// module chunks = 0","require('./_wks-define')('observable');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.observable.js\n// module id = 349\n// module chunks = 0","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.get-own-property-descriptors.js\n// module id = 350\n// module chunks = 0","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.values.js\n// module id = 351\n// module chunks = 0","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.entries.js\n// module id = 352\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-getter.js\n// module id = 353\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-setter.js\n// module id = 354\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-getter.js\n// module id = 355\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-setter.js\n// module id = 356\n// module chunks = 0","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Map', { toJSON: require('./_collection-to-json')('Map') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.to-json.js\n// module id = 357\n// module chunks = 0","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Set', { toJSON: require('./_collection-to-json')('Set') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.to-json.js\n// module id = 358\n// module chunks = 0","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\nrequire('./_set-collection-of')('Map');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.of.js\n// module id = 359\n// module chunks = 0","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\nrequire('./_set-collection-of')('Set');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.of.js\n// module id = 360\n// module chunks = 0","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\nrequire('./_set-collection-of')('WeakMap');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-map.of.js\n// module id = 361\n// module chunks = 0","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\nrequire('./_set-collection-of')('WeakSet');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-set.of.js\n// module id = 362\n// module chunks = 0","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\nrequire('./_set-collection-from')('Map');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.from.js\n// module id = 363\n// module chunks = 0","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\nrequire('./_set-collection-from')('Set');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.from.js\n// module id = 364\n// module chunks = 0","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\nrequire('./_set-collection-from')('WeakMap');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-map.from.js\n// module id = 365\n// module chunks = 0","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\nrequire('./_set-collection-from')('WeakSet');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-set.from.js\n// module id = 366\n// module chunks = 0","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.global.js\n// module id = 367\n// module chunks = 0","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.S, 'System', { global: require('./_global') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.system.global.js\n// module id = 368\n// module chunks = 0","// https://github.com/ljharb/proposal-is-error\nvar $export = require('./_export');\nvar cof = require('./_cof');\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.error.is-error.js\n// module id = 369\n// module chunks = 0","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.clamp.js\n// module id = 370\n// module chunks = 0","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.deg-per-rad.js\n// module id = 371\n// module chunks = 0","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.degrees.js\n// module id = 372\n// module chunks = 0","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar scale = require('./_math-scale');\nvar fround = require('./_math-fround');\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.fscale.js\n// module id = 373\n// module chunks = 0","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.iaddh.js\n// module id = 374\n// module chunks = 0","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.isubh.js\n// module id = 375\n// module chunks = 0","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.imulh.js\n// module id = 376\n// module chunks = 0","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.rad-per-deg.js\n// module id = 377\n// module chunks = 0","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.radians.js\n// module id = 378\n// module chunks = 0","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { scale: require('./_math-scale') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.scale.js\n// module id = 379\n// module chunks = 0","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.umulh.js\n// module id = 380\n// module chunks = 0","// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.signbit.js\n// module id = 381\n// module chunks = 0","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.promise.finally.js\n// module id = 382\n// module chunks = 0","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.promise.try.js\n// module id = 383\n// module chunks = 0","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.define-metadata.js\n// module id = 384\n// module chunks = 0","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.delete-metadata.js\n// module id = 385\n// module chunks = 0","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata.js\n// module id = 386\n// module chunks = 0","var Set = require('./es6.set');\nvar from = require('./_array-from-iterable');\nvar metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata-keys.js\n// module id = 387\n// module chunks = 0","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata.js\n// module id = 388\n// module chunks = 0","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js\n// module id = 389\n// module chunks = 0","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-metadata.js\n// module id = 390\n// module chunks = 0","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-own-metadata.js\n// module id = 391\n// module chunks = 0","var $metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.metadata.js\n// module id = 392\n// module chunks = 0","// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = require('./_export');\nvar microtask = require('./_microtask')();\nvar process = require('./_global').process;\nvar isNode = require('./_cof')(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.asap.js\n// module id = 393\n// module chunks = 0","'use strict';\n// https://github.com/zenparsing/es-observable\nvar $export = require('./_export');\nvar global = require('./_global');\nvar core = require('./_core');\nvar microtask = require('./_microtask')();\nvar OBSERVABLE = require('./_wks')('observable');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar anInstance = require('./_an-instance');\nvar redefineAll = require('./_redefine-all');\nvar hide = require('./_hide');\nvar forOf = require('./_for-of');\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\nrequire('./_set-species')('Observable');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/es7.observable.js\n// module id = 394\n// module chunks = 0","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/web.timers.js\n// module id = 395\n// module chunks = 0","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/web.immediate.js\n// module id = 396\n// module chunks = 0","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/web.dom.iterable.js\n// module id = 397\n// module chunks = 0","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/regenerator-runtime/runtime.js\n// module id = 398\n// module chunks = 0","require('../../modules/core.regexp.escape');\nmodule.exports = require('../../modules/_core').RegExp.escape;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/fn/regexp/escape.js\n// module id = 399\n// module chunks = 0","// https://github.com/benjamingr/RexExp.escape\nvar $export = require('./_export');\nvar $re = require('./_replacer')(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/core.regexp.escape.js\n// module id = 400\n// module chunks = 0","module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-polyfill/node_modules/core-js/modules/_replacer.js\n// module id = 401\n// module chunks = 0","(function(self) {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob()\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isDataView = function(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue+','+value : value\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n }\n\n Headers.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) { items.push(name) })\n return iteratorFor(items)\n }\n\n Headers.prototype.values = function() {\n var items = []\n this.forEach(function(value) { items.push(value) })\n return iteratorFor(items)\n }\n\n Headers.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) { items.push([name, value]) })\n return iteratorFor(items)\n }\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n Request.prototype.clone = function() {\n return new Request(this, { body: this._bodyInit })\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers()\n rawHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = 'status' in options ? options.status : 200\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = 'statusText' in options ? options.statusText : 'OK'\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n }\n\n Body.call(Response.prototype)\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n }\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n }\n\n var redirectStatuses = [301, 302, 303, 307, 308]\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n }\n\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n var xhr = new XMLHttpRequest()\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/whatwg-fetch/fetch.js\n// module id = 402\n// module chunks = 0","import React from 'react';\nimport { hydrate } from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { createStore, applyMiddleware, compose } from 'redux';\nimport { BrowserRouter } from 'react-router-dom';\nimport Reducer from 'reducers';\nimport createSagaMiddleware from 'redux-saga';\nimport rootSaga from 'sagas';\n\nimport GAListener from 'components/GAListener';\nimport App from './app';\n\n// get the state from a global variable injected into the server-generated HTML\nconst preloadedState = window.__PRELOADED_STATE__ || null;\n\n// Allow the passed state to be garbage-collected\ndelete window.__PRELOADED_STATE__;\n\n// create and apply middleware\nconst sagaMiddleware = createSagaMiddleware();\nconst middleware = applyMiddleware(sagaMiddleware);\nconst reduxMiddleware = window.__REDUX_DEVTOOLS_EXTENSION__ ? compose(middleware, window.__REDUX_DEVTOOLS_EXTENSION__()) : middleware;\n\n// create teh store\nlet store;\nif (preloadedState) {\n store = createStore(Reducer, preloadedState, reduxMiddleware);\n} else {\n store = createStore(Reducer, reduxMiddleware);\n}\n\n// run the saga middlweare\nsagaMiddleware.run(rootSaga);\n\n// render the app\nhydrate(\n \n \n \n \n \n \n ,\n document.getElementById('react-app')\n);\n\n\n\n// WEBPACK FOOTER //\n// ./client/client.js","/** @license React v16.2.0\n * react.production.min.js\n *\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var m=require(\"object-assign\"),n=require(\"fbjs/lib/emptyObject\"),p=require(\"fbjs/lib/emptyFunction\"),q=\"function\"===typeof Symbol&&Symbol[\"for\"],r=q?Symbol[\"for\"](\"react.element\"):60103,t=q?Symbol[\"for\"](\"react.call\"):60104,u=q?Symbol[\"for\"](\"react.return\"):60105,v=q?Symbol[\"for\"](\"react.portal\"):60106,w=q?Symbol[\"for\"](\"react.fragment\"):60107,x=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction y(a){for(var b=arguments.length-1,e=\"Minified React error #\"+a+\"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\\x3d\"+a,c=0;cM.length&&M.push(a)}\nfunction P(a,b,e,c){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case r:case t:case u:case v:g=!0}}if(g)return e(c,a,\"\"===b?\".\"+Q(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k=g.hasBooleanValue+g.hasNumericValue+g.hasOverloadedBooleanValue?void 0:E(\"50\",f);e.hasOwnProperty(f)&&(g.attributeName=e[f]);d.hasOwnProperty(f)&&(g.attributeNamespace=d[f]);a.hasOwnProperty(f)&&(g.mutationMethod=a[f]);ua[f]=g}}},ua={};\nfunction va(a,b){if(oa.hasOwnProperty(a)||2this.eventPool.length&&this.eventPool.push(a)}function Jb(a){a.eventPool=[];a.getPooled=Kb;a.release=Lb}function Mb(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Mb,{data:null});function Nb(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Nb,{data:null});var Pb=[9,13,27,32],Vb=l.canUseDOM&&\"CompositionEvent\"in window,Wb=null;l.canUseDOM&&\"documentMode\"in document&&(Wb=document.documentMode);var Xb;\nif(Xb=l.canUseDOM&&\"TextEvent\"in window&&!Wb){var Yb=window.opera;Xb=!(\"object\"===typeof Yb&&\"function\"===typeof Yb.version&&12>=parseInt(Yb.version(),10))}\nvar Zb=Xb,$b=l.canUseDOM&&(!Vb||Wb&&8=Wb),ac=String.fromCharCode(32),bc={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"topCompositionEnd\",\"topKeyPress\",\"topTextInput\",\"topPaste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"topBlur topCompositionEnd topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"topBlur topCompositionStart topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"topBlur topCompositionUpdate topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")}},cc=!1;\nfunction dc(a,b){switch(a){case \"topKeyUp\":return-1!==Pb.indexOf(b.keyCode);case \"topKeyDown\":return 229!==b.keyCode;case \"topKeyPress\":case \"topMouseDown\":case \"topBlur\":return!0;default:return!1}}function ec(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var fc=!1;function gc(a,b){switch(a){case \"topCompositionEnd\":return ec(b);case \"topKeyPress\":if(32!==b.which)return null;cc=!0;return ac;case \"topTextInput\":return a=b.data,a===ac&&cc?null:a;default:return null}}\nfunction hc(a,b){if(fc)return\"topCompositionEnd\"===a||!Vb&&dc(a,b)?(a=Fb(),S._root=null,S._startText=null,S._fallbackText=null,fc=!1,a):null;switch(a){case \"topPaste\":return null;case \"topKeyPress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1qd.length&&qd.push(a)}}}\nvar xd=Object.freeze({get _enabled(){return td},get _handleTopLevel(){return sd},setHandleTopLevel:function(a){sd=a},setEnabled:ud,isEnabled:function(){return td},trapBubbledEvent:U,trapCapturedEvent:wd,dispatchEvent:vd});function yd(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;c[\"ms\"+a]=\"MS\"+b;c[\"O\"+a]=\"o\"+b.toLowerCase();return c}\nvar zd={animationend:yd(\"Animation\",\"AnimationEnd\"),animationiteration:yd(\"Animation\",\"AnimationIteration\"),animationstart:yd(\"Animation\",\"AnimationStart\"),transitionend:yd(\"Transition\",\"TransitionEnd\")},Ad={},Bd={};l.canUseDOM&&(Bd=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete zd.animationend.animation,delete zd.animationiteration.animation,delete zd.animationstart.animation),\"TransitionEvent\"in window||delete zd.transitionend.transition);\nfunction Cd(a){if(Ad[a])return Ad[a];if(!zd[a])return a;var b=zd[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Bd)return Ad[a]=b[c];return\"\"}\nvar Dd={topAbort:\"abort\",topAnimationEnd:Cd(\"animationend\")||\"animationend\",topAnimationIteration:Cd(\"animationiteration\")||\"animationiteration\",topAnimationStart:Cd(\"animationstart\")||\"animationstart\",topBlur:\"blur\",topCancel:\"cancel\",topCanPlay:\"canplay\",topCanPlayThrough:\"canplaythrough\",topChange:\"change\",topClick:\"click\",topClose:\"close\",topCompositionEnd:\"compositionend\",topCompositionStart:\"compositionstart\",topCompositionUpdate:\"compositionupdate\",topContextMenu:\"contextmenu\",topCopy:\"copy\",\ntopCut:\"cut\",topDoubleClick:\"dblclick\",topDrag:\"drag\",topDragEnd:\"dragend\",topDragEnter:\"dragenter\",topDragExit:\"dragexit\",topDragLeave:\"dragleave\",topDragOver:\"dragover\",topDragStart:\"dragstart\",topDrop:\"drop\",topDurationChange:\"durationchange\",topEmptied:\"emptied\",topEncrypted:\"encrypted\",topEnded:\"ended\",topError:\"error\",topFocus:\"focus\",topInput:\"input\",topKeyDown:\"keydown\",topKeyPress:\"keypress\",topKeyUp:\"keyup\",topLoadedData:\"loadeddata\",topLoad:\"load\",topLoadedMetadata:\"loadedmetadata\",topLoadStart:\"loadstart\",\ntopMouseDown:\"mousedown\",topMouseMove:\"mousemove\",topMouseOut:\"mouseout\",topMouseOver:\"mouseover\",topMouseUp:\"mouseup\",topPaste:\"paste\",topPause:\"pause\",topPlay:\"play\",topPlaying:\"playing\",topProgress:\"progress\",topRateChange:\"ratechange\",topScroll:\"scroll\",topSeeked:\"seeked\",topSeeking:\"seeking\",topSelectionChange:\"selectionchange\",topStalled:\"stalled\",topSuspend:\"suspend\",topTextInput:\"textInput\",topTimeUpdate:\"timeupdate\",topToggle:\"toggle\",topTouchCancel:\"touchcancel\",topTouchEnd:\"touchend\",topTouchMove:\"touchmove\",\ntopTouchStart:\"touchstart\",topTransitionEnd:Cd(\"transitionend\")||\"transitionend\",topVolumeChange:\"volumechange\",topWaiting:\"waiting\",topWheel:\"wheel\"},Ed={},Fd=0,Gd=\"_reactListenersID\"+(\"\"+Math.random()).slice(2);function Hd(a){Object.prototype.hasOwnProperty.call(a,Gd)||(a[Gd]=Fd++,Ed[a[Gd]]={});return Ed[a[Gd]]}function Id(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Jd(a,b){var c=Id(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Id(c)}}function Kd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&\"text\"===a.type||\"textarea\"===b||\"true\"===a.contentEditable)}\nvar Ld=l.canUseDOM&&\"documentMode\"in document&&11>=document.documentMode,Md={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"topBlur topContextMenu topFocus topKeyDown topKeyUp topMouseDown topMouseUp topSelectionChange\".split(\" \")}},Nd=null,Od=null,Pd=null,Qd=!1;\nfunction Rd(a,b){if(Qd||null==Nd||Nd!==da())return null;var c=Nd;\"selectionStart\"in c&&Kd(c)?c={start:c.selectionStart,end:c.selectionEnd}:window.getSelection?(c=window.getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}):c=void 0;return Pd&&ea(Pd,c)?null:(Pd=c,a=T.getPooled(Md.select,Od,a,b),a.type=\"select\",a.target=Nd,Ab(a),a)}\nvar Sd={eventTypes:Md,extractEvents:function(a,b,c,d){var e=d.window===d?d.document:9===d.nodeType?d:d.ownerDocument,f;if(!(f=!e)){a:{e=Hd(e);f=Sa.onSelect;for(var g=0;ghe||(a.current=ge[he],ge[he]=null,he--)}function W(a,b){he++;ge[he]=a.current;a.current=b}new Set;var ie={current:D},X={current:!1},je=D;function ke(a){return le(a)?je:ie.current}\nfunction me(a,b){var c=a.type.contextTypes;if(!c)return D;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function le(a){return 2===a.tag&&null!=a.type.childContextTypes}function ne(a){le(a)&&(V(X,a),V(ie,a))}\nfunction oe(a,b,c){null!=ie.cursor?E(\"168\"):void 0;W(ie,b,a);W(X,c,a)}function pe(a,b){var c=a.stateNode,d=a.type.childContextTypes;if(\"function\"!==typeof c.getChildContext)return b;c=c.getChildContext();for(var e in c)e in d?void 0:E(\"108\",jd(a)||\"Unknown\",e);return B({},b,c)}function qe(a){if(!le(a))return!1;var b=a.stateNode;b=b&&b.__reactInternalMemoizedMergedChildContext||D;je=ie.current;W(ie,b,a);W(X,X.current,a);return!0}\nfunction re(a,b){var c=a.stateNode;c?void 0:E(\"169\");if(b){var d=pe(a,je);c.__reactInternalMemoizedMergedChildContext=d;V(X,a);V(ie,a);W(ie,d,a)}else V(X,a);W(X,b,a)}\nfunction Y(a,b,c){this.tag=a;this.key=b;this.stateNode=this.type=null;this.sibling=this.child=this[\"return\"]=null;this.index=0;this.memoizedState=this.updateQueue=this.memoizedProps=this.pendingProps=this.ref=null;this.internalContextTag=c;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.expirationTime=0;this.alternate=null}\nfunction se(a,b,c){var d=a.alternate;null===d?(d=new Y(a.tag,a.key,a.internalContextTag),d.type=a.type,d.stateNode=a.stateNode,d.alternate=a,a.alternate=d):(d.effectTag=0,d.nextEffect=null,d.firstEffect=null,d.lastEffect=null);d.expirationTime=c;d.pendingProps=b;d.child=a.child;d.memoizedProps=a.memoizedProps;d.memoizedState=a.memoizedState;d.updateQueue=a.updateQueue;d.sibling=a.sibling;d.index=a.index;d.ref=a.ref;return d}\nfunction te(a,b,c){var d=void 0,e=a.type,f=a.key;\"function\"===typeof e?(d=e.prototype&&e.prototype.isReactComponent?new Y(2,f,b):new Y(0,f,b),d.type=e,d.pendingProps=a.props):\"string\"===typeof e?(d=new Y(5,f,b),d.type=e,d.pendingProps=a.props):\"object\"===typeof e&&null!==e&&\"number\"===typeof e.tag?(d=e,d.pendingProps=a.props):E(\"130\",null==e?e:typeof e,\"\");d.expirationTime=c;return d}function ue(a,b,c,d){b=new Y(10,d,b);b.pendingProps=a;b.expirationTime=c;return b}\nfunction ve(a,b,c){b=new Y(6,null,b);b.pendingProps=a;b.expirationTime=c;return b}function we(a,b,c){b=new Y(7,a.key,b);b.type=a.handler;b.pendingProps=a;b.expirationTime=c;return b}function xe(a,b,c){a=new Y(9,null,b);a.expirationTime=c;return a}function ye(a,b,c){b=new Y(4,a.key,b);b.pendingProps=a.children||[];b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}var ze=null,Ae=null;\nfunction Be(a){return function(b){try{return a(b)}catch(c){}}}function Ce(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);ze=Be(function(a){return b.onCommitFiberRoot(c,a)});Ae=Be(function(a){return b.onCommitFiberUnmount(c,a)})}catch(d){}return!0}function De(a){\"function\"===typeof ze&&ze(a)}function Ee(a){\"function\"===typeof Ae&&Ae(a)}\nfunction Fe(a){return{baseState:a,expirationTime:0,first:null,last:null,callbackList:null,hasForceUpdate:!1,isInitialized:!1}}function Ge(a,b){null===a.last?a.first=a.last=b:(a.last.next=b,a.last=b);if(0===a.expirationTime||a.expirationTime>b.expirationTime)a.expirationTime=b.expirationTime}\nfunction He(a,b){var c=a.alternate,d=a.updateQueue;null===d&&(d=a.updateQueue=Fe(null));null!==c?(a=c.updateQueue,null===a&&(a=c.updateQueue=Fe(null))):a=null;a=a!==d?a:null;null===a?Ge(d,b):null===d.last||null===a.last?(Ge(d,b),Ge(a,b)):(Ge(d,b),a.last=b)}function Ie(a,b,c,d){a=a.partialState;return\"function\"===typeof a?a.call(b,c,d):a}\nfunction Je(a,b,c,d,e,f){null!==a&&a.updateQueue===c&&(c=b.updateQueue={baseState:c.baseState,expirationTime:c.expirationTime,first:c.first,last:c.last,isInitialized:c.isInitialized,callbackList:null,hasForceUpdate:!1});c.expirationTime=0;c.isInitialized?a=c.baseState:(a=c.baseState=b.memoizedState,c.isInitialized=!0);for(var g=!0,h=c.first,k=!1;null!==h;){var q=h.expirationTime;if(q>f){var v=c.expirationTime;if(0===v||v>q)c.expirationTime=q;k||(k=!0,c.baseState=a)}else{k||(c.first=h.next,null===\nc.first&&(c.last=null));if(h.isReplace)a=Ie(h,d,a,e),g=!0;else if(q=Ie(h,d,a,e))a=g?B({},a,q):B(a,q),g=!1;h.isForced&&(c.hasForceUpdate=!0);null!==h.callback&&(q=c.callbackList,null===q&&(q=c.callbackList=[]),q.push(h))}h=h.next}null!==c.callbackList?b.effectTag|=32:null!==c.first||c.hasForceUpdate||(b.updateQueue=null);k||(c.baseState=a);return a}\nfunction Ke(a,b){var c=a.callbackList;if(null!==c)for(a.callbackList=null,a=0;aw?(k=n,n=null):k=n.sibling;var x=G(e,n,m[w],A);if(null===x){null===n&&(n=k);break}a&&n&&null===x.alternate&&b(e,n);g=f(x,g,w);null===r?h=x:r.sibling=x;r=x;n=k}if(w===m.length)return c(e,n),h;if(null===n){for(;ww?(k=n,n=null):k=n.sibling;var J=G(e,n,x.value,A);if(null===J){n||(n=k);break}a&&n&&null===J.alternate&&b(e,n);g=f(J,\ng,w);null===r?h=J:r.sibling=J;r=J;n=k}if(x.done)return c(e,n),h;if(null===n){for(;!x.done;w++,x=m.next())x=z(e,x.value,A),null!==x&&(g=f(x,g,w),null===r?h=x:r.sibling=x,r=x);return h}for(n=d(e,n);!x.done;w++,x=m.next())if(x=I(n,e,w,x.value,A),null!==x){if(a&&null!==x.alternate)n[\"delete\"](null===x.key?w:x.key);g=f(x,g,w);null===r?h=x:r.sibling=x;r=x}a&&n.forEach(function(a){return b(e,a)});return h}return function(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===Ve&&null===f.key&&(f=f.props.children);\nvar m=\"object\"===typeof f&&null!==f;if(m)switch(f.$$typeof){case Re:a:{var r=f.key;for(m=d;null!==m;){if(m.key===r)if(10===m.tag?f.type===Ve:m.type===f.type){c(a,m.sibling);d=e(m,f.type===Ve?f.props.children:f.props,h);d.ref=Ze(m,f);d[\"return\"]=a;a=d;break a}else{c(a,m);break}else b(a,m);m=m.sibling}f.type===Ve?(d=ue(f.props.children,a.internalContextTag,h,f.key),d[\"return\"]=a,a=d):(h=te(f,a.internalContextTag,h),h.ref=Ze(d,f),h[\"return\"]=a,a=h)}return g(a);case Se:a:{for(m=f.key;null!==d;){if(d.key===\nm)if(7===d.tag){c(a,d.sibling);d=e(d,f,h);d[\"return\"]=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=we(f,a.internalContextTag,h);d[\"return\"]=a;a=d}return g(a);case Te:a:{if(null!==d)if(9===d.tag){c(a,d.sibling);d=e(d,null,h);d.type=f.value;d[\"return\"]=a;a=d;break a}else c(a,d);d=xe(f,a.internalContextTag,h);d.type=f.value;d[\"return\"]=a;a=d}return g(a);case Ue:a:{for(m=f.key;null!==d;){if(d.key===m)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===\nf.implementation){c(a,d.sibling);d=e(d,f.children||[],h);d[\"return\"]=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=ye(f,a.internalContextTag,h);d[\"return\"]=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f,h)):(c(a,d),d=ve(f,a.internalContextTag,h)),d[\"return\"]=a,a=d,g(a);if(Ye(f))return L(a,d,f,h);if(Xe(f))return N(a,d,f,h);m&&$e(a,f);if(\"undefined\"===typeof f)switch(a.tag){case 2:case 1:h=a.type,E(\"152\",h.displayName||\nh.name||\"Component\")}return c(a,d)}}var bf=af(!0),cf=af(!1);\nfunction df(a,b,c,d,e){function f(a,b,c){var d=b.expirationTime;b.child=null===a?cf(b,null,c,d):bf(b,a.child,c,d)}function g(a,b){var c=b.ref;null===c||a&&a.ref===c||(b.effectTag|=128)}function h(a,b,c,d){g(a,b);if(!c)return d&&re(b,!1),q(a,b);c=b.stateNode;id.current=b;var e=c.render();b.effectTag|=1;f(a,b,e);b.memoizedState=c.state;b.memoizedProps=c.props;d&&re(b,!0);return b.child}function k(a){var b=a.stateNode;b.pendingContext?oe(a,b.pendingContext,b.pendingContext!==b.context):b.context&&oe(a,\nb.context,!1);I(a,b.containerInfo)}function q(a,b){null!==a&&b.child!==a.child?E(\"153\"):void 0;if(null!==b.child){a=b.child;var c=se(a,a.pendingProps,a.expirationTime);b.child=c;for(c[\"return\"]=b;null!==a.sibling;)a=a.sibling,c=c.sibling=se(a,a.pendingProps,a.expirationTime),c[\"return\"]=b;c.sibling=null}return b.child}function v(a,b){switch(b.tag){case 3:k(b);break;case 2:qe(b);break;case 4:I(b,b.stateNode.containerInfo)}return null}var y=a.shouldSetTextContent,u=a.useSyncScheduling,z=a.shouldDeprioritizeSubtree,\nG=b.pushHostContext,I=b.pushHostContainer,L=c.enterHydrationState,N=c.resetHydrationState,J=c.tryToClaimNextHydratableInstance;a=Le(d,e,function(a,b){a.memoizedProps=b},function(a,b){a.memoizedState=b});var w=a.adoptClassInstance,m=a.constructClassInstance,A=a.mountClassInstance,Ob=a.updateClassInstance;return{beginWork:function(a,b,c){if(0===b.expirationTime||b.expirationTime>c)return v(a,b);switch(b.tag){case 0:null!==a?E(\"155\"):void 0;var d=b.type,e=b.pendingProps,r=ke(b);r=me(b,r);d=d(e,r);b.effectTag|=\n1;\"object\"===typeof d&&null!==d&&\"function\"===typeof d.render?(b.tag=2,e=qe(b),w(b,d),A(b,c),b=h(a,b,!0,e)):(b.tag=1,f(a,b,d),b.memoizedProps=e,b=b.child);return b;case 1:a:{e=b.type;c=b.pendingProps;d=b.memoizedProps;if(X.current)null===c&&(c=d);else if(null===c||d===c){b=q(a,b);break a}d=ke(b);d=me(b,d);e=e(c,d);b.effectTag|=1;f(a,b,e);b.memoizedProps=c;b=b.child}return b;case 2:return e=qe(b),d=void 0,null===a?b.stateNode?E(\"153\"):(m(b,b.pendingProps),A(b,c),d=!0):d=Ob(a,b,c),h(a,b,d,e);case 3:return k(b),\ne=b.updateQueue,null!==e?(d=b.memoizedState,e=Je(a,b,e,null,null,c),d===e?(N(),b=q(a,b)):(d=e.element,r=b.stateNode,(null===a||null===a.child)&&r.hydrate&&L(b)?(b.effectTag|=2,b.child=cf(b,null,d,c)):(N(),f(a,b,d)),b.memoizedState=e,b=b.child)):(N(),b=q(a,b)),b;case 5:G(b);null===a&&J(b);e=b.type;var n=b.memoizedProps;d=b.pendingProps;null===d&&(d=n,null===d?E(\"154\"):void 0);r=null!==a?a.memoizedProps:null;X.current||null!==d&&n!==d?(n=d.children,y(e,d)?n=null:r&&y(e,r)&&(b.effectTag|=16),g(a,b),\n2147483647!==c&&!u&&z(e,d)?(b.expirationTime=2147483647,b=null):(f(a,b,n),b.memoizedProps=d,b=b.child)):b=q(a,b);return b;case 6:return null===a&&J(b),a=b.pendingProps,null===a&&(a=b.memoizedProps),b.memoizedProps=a,null;case 8:b.tag=7;case 7:e=b.pendingProps;if(X.current)null===e&&(e=a&&a.memoizedProps,null===e?E(\"154\"):void 0);else if(null===e||b.memoizedProps===e)e=b.memoizedProps;d=e.children;b.stateNode=null===a?cf(b,b.stateNode,d,c):bf(b,b.stateNode,d,c);b.memoizedProps=e;return b.stateNode;\ncase 9:return null;case 4:a:{I(b,b.stateNode.containerInfo);e=b.pendingProps;if(X.current)null===e&&(e=a&&a.memoizedProps,null==e?E(\"154\"):void 0);else if(null===e||b.memoizedProps===e){b=q(a,b);break a}null===a?b.child=bf(b,null,e,c):f(a,b,e);b.memoizedProps=e;b=b.child}return b;case 10:a:{c=b.pendingProps;if(X.current)null===c&&(c=b.memoizedProps);else if(null===c||b.memoizedProps===c){b=q(a,b);break a}f(a,b,c);b.memoizedProps=c;b=b.child}return b;default:E(\"156\")}},beginFailedWork:function(a,b,\nc){switch(b.tag){case 2:qe(b);break;case 3:k(b);break;default:E(\"157\")}b.effectTag|=64;null===a?b.child=null:b.child!==a.child&&(b.child=a.child);if(0===b.expirationTime||b.expirationTime>c)return v(a,b);b.firstEffect=null;b.lastEffect=null;b.child=null===a?cf(b,null,null,c):bf(b,a.child,null,c);2===b.tag&&(a=b.stateNode,b.memoizedProps=a.props,b.memoizedState=a.state);return b.child}}}\nfunction ef(a,b,c){function d(a){a.effectTag|=4}var e=a.createInstance,f=a.createTextInstance,g=a.appendInitialChild,h=a.finalizeInitialChildren,k=a.prepareUpdate,q=a.persistence,v=b.getRootHostContainer,y=b.popHostContext,u=b.getHostContext,z=b.popHostContainer,G=c.prepareToHydrateHostInstance,I=c.prepareToHydrateHostTextInstance,L=c.popHydrationState,N=void 0,J=void 0,w=void 0;a.mutation?(N=function(){},J=function(a,b,c){(b.updateQueue=c)&&d(b)},w=function(a,b,c,e){c!==e&&d(b)}):q?E(\"235\"):E(\"236\");\nreturn{completeWork:function(a,b,c){var m=b.pendingProps;if(null===m)m=b.memoizedProps;else if(2147483647!==b.expirationTime||2147483647===c)b.pendingProps=null;switch(b.tag){case 1:return null;case 2:return ne(b),null;case 3:z(b);V(X,b);V(ie,b);m=b.stateNode;m.pendingContext&&(m.context=m.pendingContext,m.pendingContext=null);if(null===a||null===a.child)L(b),b.effectTag&=-3;N(b);return null;case 5:y(b);c=v();var A=b.type;if(null!==a&&null!=b.stateNode){var p=a.memoizedProps,q=b.stateNode,x=u();q=\nk(q,A,p,m,c,x);J(a,b,q,A,p,m,c);a.ref!==b.ref&&(b.effectTag|=128)}else{if(!m)return null===b.stateNode?E(\"166\"):void 0,null;a=u();if(L(b))G(b,c,a)&&d(b);else{a=e(A,m,c,a,b);a:for(p=b.child;null!==p;){if(5===p.tag||6===p.tag)g(a,p.stateNode);else if(4!==p.tag&&null!==p.child){p.child[\"return\"]=p;p=p.child;continue}if(p===b)break;for(;null===p.sibling;){if(null===p[\"return\"]||p[\"return\"]===b)break a;p=p[\"return\"]}p.sibling[\"return\"]=p[\"return\"];p=p.sibling}h(a,A,m,c)&&d(b);b.stateNode=a}null!==b.ref&&\n(b.effectTag|=128)}return null;case 6:if(a&&null!=b.stateNode)w(a,b,a.memoizedProps,m);else{if(\"string\"!==typeof m)return null===b.stateNode?E(\"166\"):void 0,null;a=v();c=u();L(b)?I(b)&&d(b):b.stateNode=f(m,a,c,b)}return null;case 7:(m=b.memoizedProps)?void 0:E(\"165\");b.tag=8;A=[];a:for((p=b.stateNode)&&(p[\"return\"]=b);null!==p;){if(5===p.tag||6===p.tag||4===p.tag)E(\"247\");else if(9===p.tag)A.push(p.type);else if(null!==p.child){p.child[\"return\"]=p;p=p.child;continue}for(;null===p.sibling;){if(null===\np[\"return\"]||p[\"return\"]===b)break a;p=p[\"return\"]}p.sibling[\"return\"]=p[\"return\"];p=p.sibling}p=m.handler;m=p(m.props,A);b.child=bf(b,null!==a?a.child:null,m,c);return b.child;case 8:return b.tag=7,null;case 9:return null;case 10:return null;case 4:return z(b),N(b),null;case 0:E(\"167\");default:E(\"156\")}}}}\nfunction ff(a,b){function c(a){var c=a.ref;if(null!==c)try{c(null)}catch(A){b(a,A)}}function d(a){\"function\"===typeof Ee&&Ee(a);switch(a.tag){case 2:c(a);var d=a.stateNode;if(\"function\"===typeof d.componentWillUnmount)try{d.props=a.memoizedProps,d.state=a.memoizedState,d.componentWillUnmount()}catch(A){b(a,A)}break;case 5:c(a);break;case 7:e(a.stateNode);break;case 4:k&&g(a)}}function e(a){for(var b=a;;)if(d(b),null===b.child||k&&4===b.tag){if(b===a)break;for(;null===b.sibling;){if(null===b[\"return\"]||\nb[\"return\"]===a)return;b=b[\"return\"]}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}else b.child[\"return\"]=b,b=b.child}function f(a){return 5===a.tag||3===a.tag||4===a.tag}function g(a){for(var b=a,c=!1,f=void 0,g=void 0;;){if(!c){c=b[\"return\"];a:for(;;){null===c?E(\"160\"):void 0;switch(c.tag){case 5:f=c.stateNode;g=!1;break a;case 3:f=c.stateNode.containerInfo;g=!0;break a;case 4:f=c.stateNode.containerInfo;g=!0;break a}c=c[\"return\"]}c=!0}if(5===b.tag||6===b.tag)e(b),g?J(f,b.stateNode):N(f,b.stateNode);\nelse if(4===b.tag?f=b.stateNode.containerInfo:d(b),null!==b.child){b.child[\"return\"]=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b[\"return\"]||b[\"return\"]===a)return;b=b[\"return\"];4===b.tag&&(c=!1)}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}}var h=a.getPublicInstance,k=a.mutation;a=a.persistence;k||(a?E(\"235\"):E(\"236\"));var q=k.commitMount,v=k.commitUpdate,y=k.resetTextContent,u=k.commitTextUpdate,z=k.appendChild,G=k.appendChildToContainer,I=k.insertBefore,L=k.insertInContainerBefore,\nN=k.removeChild,J=k.removeChildFromContainer;return{commitResetTextContent:function(a){y(a.stateNode)},commitPlacement:function(a){a:{for(var b=a[\"return\"];null!==b;){if(f(b)){var c=b;break a}b=b[\"return\"]}E(\"160\");c=void 0}var d=b=void 0;switch(c.tag){case 5:b=c.stateNode;d=!1;break;case 3:b=c.stateNode.containerInfo;d=!0;break;case 4:b=c.stateNode.containerInfo;d=!0;break;default:E(\"161\")}c.effectTag&16&&(y(b),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c[\"return\"]||f(c[\"return\"])){c=\nnull;break a}c=c[\"return\"]}c.sibling[\"return\"]=c[\"return\"];for(c=c.sibling;5!==c.tag&&6!==c.tag;){if(c.effectTag&2)continue b;if(null===c.child||4===c.tag)continue b;else c.child[\"return\"]=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}for(var e=a;;){if(5===e.tag||6===e.tag)c?d?L(b,e.stateNode,c):I(b,e.stateNode,c):d?G(b,e.stateNode):z(b,e.stateNode);else if(4!==e.tag&&null!==e.child){e.child[\"return\"]=e;e=e.child;continue}if(e===a)break;for(;null===e.sibling;){if(null===e[\"return\"]||e[\"return\"]===\na)return;e=e[\"return\"]}e.sibling[\"return\"]=e[\"return\"];e=e.sibling}},commitDeletion:function(a){g(a);a[\"return\"]=null;a.child=null;a.alternate&&(a.alternate.child=null,a.alternate[\"return\"]=null)},commitWork:function(a,b){switch(b.tag){case 2:break;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps;a=null!==a?a.memoizedProps:d;var e=b.type,f=b.updateQueue;b.updateQueue=null;null!==f&&v(c,f,e,a,d,b)}break;case 6:null===b.stateNode?E(\"162\"):void 0;c=b.memoizedProps;u(b.stateNode,null!==a?a.memoizedProps:\nc,c);break;case 3:break;default:E(\"163\")}},commitLifeCycles:function(a,b){switch(b.tag){case 2:var c=b.stateNode;if(b.effectTag&4)if(null===a)c.props=b.memoizedProps,c.state=b.memoizedState,c.componentDidMount();else{var d=a.memoizedProps;a=a.memoizedState;c.props=b.memoizedProps;c.state=b.memoizedState;c.componentDidUpdate(d,a)}b=b.updateQueue;null!==b&&Ke(b,c);break;case 3:c=b.updateQueue;null!==c&&Ke(c,null!==b.child?b.child.stateNode:null);break;case 5:c=b.stateNode;null===a&&b.effectTag&4&&q(c,\nb.type,b.memoizedProps,b);break;case 6:break;case 4:break;default:E(\"163\")}},commitAttachRef:function(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:b(h(c));break;default:b(c)}}},commitDetachRef:function(a){a=a.ref;null!==a&&a(null)}}}var gf={};\nfunction hf(a){function b(a){a===gf?E(\"174\"):void 0;return a}var c=a.getChildHostContext,d=a.getRootHostContext,e={current:gf},f={current:gf},g={current:gf};return{getHostContext:function(){return b(e.current)},getRootHostContainer:function(){return b(g.current)},popHostContainer:function(a){V(e,a);V(f,a);V(g,a)},popHostContext:function(a){f.current===a&&(V(e,a),V(f,a))},pushHostContainer:function(a,b){W(g,b,a);b=d(b);W(f,a,a);W(e,b,a)},pushHostContext:function(a){var d=b(g.current),h=b(e.current);\nd=c(h,a.type,d);h!==d&&(W(f,a,a),W(e,d,a))},resetHostContainer:function(){e.current=gf;g.current=gf}}}\nfunction jf(a){function b(a,b){var c=new Y(5,null,0);c.type=\"DELETED\";c.stateNode=b;c[\"return\"]=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function c(a,b){switch(a.tag){case 5:return b=f(b,a.type,a.pendingProps),null!==b?(a.stateNode=b,!0):!1;case 6:return b=g(b,a.pendingProps),null!==b?(a.stateNode=b,!0):!1;default:return!1}}function d(a){for(a=a[\"return\"];null!==a&&5!==a.tag&&3!==a.tag;)a=a[\"return\"];y=a}var e=a.shouldSetTextContent;\na=a.hydration;if(!a)return{enterHydrationState:function(){return!1},resetHydrationState:function(){},tryToClaimNextHydratableInstance:function(){},prepareToHydrateHostInstance:function(){E(\"175\")},prepareToHydrateHostTextInstance:function(){E(\"176\")},popHydrationState:function(){return!1}};var f=a.canHydrateInstance,g=a.canHydrateTextInstance,h=a.getNextHydratableSibling,k=a.getFirstHydratableChild,q=a.hydrateInstance,v=a.hydrateTextInstance,y=null,u=null,z=!1;return{enterHydrationState:function(a){u=\nk(a.stateNode.containerInfo);y=a;return z=!0},resetHydrationState:function(){u=y=null;z=!1},tryToClaimNextHydratableInstance:function(a){if(z){var d=u;if(d){if(!c(a,d)){d=h(d);if(!d||!c(a,d)){a.effectTag|=2;z=!1;y=a;return}b(y,u)}y=a;u=k(d)}else a.effectTag|=2,z=!1,y=a}},prepareToHydrateHostInstance:function(a,b,c){b=q(a.stateNode,a.type,a.memoizedProps,b,c,a);a.updateQueue=b;return null!==b?!0:!1},prepareToHydrateHostTextInstance:function(a){return v(a.stateNode,a.memoizedProps,a)},popHydrationState:function(a){if(a!==\ny)return!1;if(!z)return d(a),z=!0,!1;var c=a.type;if(5!==a.tag||\"head\"!==c&&\"body\"!==c&&!e(c,a.memoizedProps))for(c=u;c;)b(a,c),c=h(c);d(a);u=y?h(a.stateNode):null;return!0}}}\nfunction kf(a){function b(a){Qb=ja=!0;var b=a.stateNode;b.current===a?E(\"177\"):void 0;b.isReadyForCommit=!1;id.current=null;if(1g.expirationTime)&&(f=g.expirationTime),g=g.sibling;e.expirationTime=f}if(null!==b)return b;null!==c&&(null===c.firstEffect&&(c.firstEffect=a.firstEffect),null!==a.lastEffect&&(null!==c.lastEffect&&(c.lastEffect.nextEffect=a.firstEffect),c.lastEffect=a.lastEffect),1a))if(H<=Uc)for(;null!==F;)F=k(F)?e(F):d(F);else for(;null!==F&&!A();)F=k(F)?e(F):d(F)}else if(!(0===H||H>a))if(H<=Uc)for(;null!==F;)F=d(F);else for(;null!==F&&!A();)F=d(F)}function g(a,b){ja?E(\"243\"):void 0;ja=!0;a.isReadyForCommit=\n!1;if(a!==ra||b!==H||null===F){for(;-1b)a.expirationTime=b;null!==a.alternate&&(0===a.alternate.expirationTime||a.alternate.expirationTime>b)&&(a.alternate.expirationTime=b);if(null===a[\"return\"])if(3===a.tag){var c=a.stateNode;!ja&&c===ra&&bIg&&E(\"185\");if(null===d.nextScheduledRoot)d.remainingExpirationTime=e,null===O?(sa=O=d,d.nextScheduledRoot=d):(O=O.nextScheduledRoot=d,O.nextScheduledRoot=sa);else{var f=d.remainingExpirationTime;if(0===f||eTb)return;Jg(Xc)}var b=Wc()-Pe;Tb=a;Xc=Kg(J,{timeout:10*(a-2)-b})}function N(){var a=0,b=null;if(null!==O)for(var c=O,d=sa;null!==d;){var e=d.remainingExpirationTime;if(0===e){null===c||null===O?E(\"244\"):void 0;if(d===d.nextScheduledRoot){sa=O=d.nextScheduledRoot=null;break}else if(d===sa)sa=e=d.nextScheduledRoot,\nO.nextScheduledRoot=e,d.nextScheduledRoot=null;else if(d===O){O=c;O.nextScheduledRoot=sa;d.nextScheduledRoot=null;break}else c.nextScheduledRoot=d.nextScheduledRoot,d.nextScheduledRoot=null;d=c.nextScheduledRoot}else{if(0===a||eLg?!1:Yc=!0}function Ob(a){null===ma?E(\"246\"):\nvoid 0;ma.remainingExpirationTime=0;Ub||(Ub=!0,Zc=a)}var r=hf(a),n=jf(a),p=r.popHostContainer,qg=r.popHostContext,x=r.resetHostContainer,Me=df(a,r,n,u,y),rg=Me.beginWork,Gg=Me.beginFailedWork,Fg=ef(a,r,n).completeWork;r=ff(a,h);var zg=r.commitResetTextContent,Ne=r.commitPlacement,Bg=r.commitDeletion,Oe=r.commitWork,Dg=r.commitLifeCycles,Eg=r.commitAttachRef,Ag=r.commitDetachRef,Wc=a.now,Kg=a.scheduleDeferredCallback,Jg=a.cancelDeferredCallback,Hg=a.useSyncScheduling,yg=a.prepareForCommit,Cg=a.resetAfterCommit,\nPe=Wc(),Uc=2,ka=0,ja=!1,F=null,ra=null,H=0,t=null,R=null,qa=null,ha=null,ca=null,eb=!1,Qb=!1,Sc=!1,sa=null,O=null,Tb=0,Xc=-1,Fa=!1,ma=null,na=0,Yc=!1,Ub=!1,Zc=null,fb=null,la=!1,Sb=!1,Ig=1E3,Rb=0,Lg=1;return{computeAsyncExpiration:v,computeExpirationForFiber:y,scheduleWork:u,batchedUpdates:function(a,b){var c=la;la=!0;try{return a(b)}finally{(la=c)||Fa||w(1,null)}},unbatchedUpdates:function(a){if(la&&!Sb){Sb=!0;try{return a()}finally{Sb=!1}}return a()},flushSync:function(a){var b=la;la=!0;try{a:{var c=\nka;ka=1;try{var d=a();break a}finally{ka=c}d=void 0}return d}finally{la=b,Fa?E(\"187\"):void 0,w(1,null)}},deferredUpdates:function(a){var b=ka;ka=v();try{return a()}finally{ka=b}}}}\nfunction lf(a){function b(a){a=od(a);return null===a?null:a.stateNode}var c=a.getPublicInstance;a=kf(a);var d=a.computeAsyncExpiration,e=a.computeExpirationForFiber,f=a.scheduleWork;return{createContainer:function(a,b){var c=new Y(3,null,0);a={current:c,containerInfo:a,pendingChildren:null,remainingExpirationTime:0,isReadyForCommit:!1,finishedWork:null,context:null,pendingContext:null,hydrate:b,nextScheduledRoot:null};return c.stateNode=a},updateContainer:function(a,b,c,q){var g=b.current;if(c){c=\nc._reactInternalFiber;var h;b:{2===kd(c)&&2===c.tag?void 0:E(\"170\");for(h=c;3!==h.tag;){if(le(h)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}(h=h[\"return\"])?void 0:E(\"171\")}h=h.stateNode.context}c=le(c)?pe(c,h):h}else c=D;null===b.context?b.context=c:b.pendingContext=c;b=q;b=void 0===b?null:b;q=null!=a&&null!=a.type&&null!=a.type.prototype&&!0===a.type.prototype.unstable_isAsyncReactComponent?d():e(g);He(g,{expirationTime:q,partialState:{element:a},callback:b,isReplace:!1,isForced:!1,\nnextCallback:null,next:null});f(g,q)},batchedUpdates:a.batchedUpdates,unbatchedUpdates:a.unbatchedUpdates,deferredUpdates:a.deferredUpdates,flushSync:a.flushSync,getPublicRootInstance:function(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return c(a.child.stateNode);default:return a.child.stateNode}},findHostInstance:b,findHostInstanceWithNoPortals:function(a){a=pd(a);return null===a?null:a.stateNode},injectIntoDevTools:function(a){var c=a.findFiberByHostInstance;return Ce(B({},\na,{findHostInstanceByFiber:function(a){return b(a)},findFiberByHostInstance:function(a){return c?c(a):null}}))}}}var mf=Object.freeze({default:lf}),nf=mf&&lf||mf,of=nf[\"default\"]?nf[\"default\"]:nf;function pf(a,b,c){var d=3=yf-a)if(-1!==wf&&wf<=\na)Bf.didTimeout=!0;else{xf||(xf=!0,requestAnimationFrame(Df));return}else Bf.didTimeout=!1;wf=-1;a=uf;uf=null;null!==a&&a(Bf)}},!1);var Df=function(a){xf=!1;var b=a-yf+Af;bb&&(b=8),Af=bc||d.hasOverloadedBooleanValue&&!1===c?Jf(a,b):d.mustUseProperty?a[d.propertyName]=c:(b=d.attributeName,(e=d.attributeNamespace)?a.setAttributeNS(e,b,\"\"+c):d.hasBooleanValue||d.hasOverloadedBooleanValue&&!0===c?a.setAttribute(b,\"\"):a.setAttribute(b,\"\"+c))}else Kf(a,b,va(b,c)?c:null)}\nfunction Kf(a,b,c){Hf(b)&&(null==c?a.removeAttribute(b):a.setAttribute(b,\"\"+c))}function Jf(a,b){var c=wa(b);c?(b=c.mutationMethod)?b(a,void 0):c.mustUseProperty?a[c.propertyName]=c.hasBooleanValue?!1:\"\":a.removeAttribute(c.attributeName):a.removeAttribute(b)}\nfunction Lf(a,b){var c=b.value,d=b.checked;return B({type:void 0,step:void 0,min:void 0,max:void 0},b,{defaultChecked:void 0,defaultValue:void 0,value:null!=c?c:a._wrapperState.initialValue,checked:null!=d?d:a._wrapperState.initialChecked})}function Mf(a,b){var c=b.defaultValue;a._wrapperState={initialChecked:null!=b.checked?b.checked:b.defaultChecked,initialValue:null!=b.value?b.value:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}\nfunction Nf(a,b){b=b.checked;null!=b&&If(a,\"checked\",b)}function Of(a,b){Nf(a,b);var c=b.value;if(null!=c)if(0===c&&\"\"===a.value)a.value=\"0\";else if(\"number\"===b.type){if(b=parseFloat(a.value)||0,c!=b||c==b&&a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else null==b.value&&null!=b.defaultValue&&a.defaultValue!==\"\"+b.defaultValue&&(a.defaultValue=\"\"+b.defaultValue),null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction Pf(a,b){switch(b.type){case \"submit\":case \"reset\":break;case \"color\":case \"date\":case \"datetime\":case \"datetime-local\":case \"month\":case \"time\":case \"week\":a.value=\"\";a.value=a.defaultValue;break;default:a.value=a.value}b=a.name;\"\"!==b&&(a.name=\"\");a.defaultChecked=!a.defaultChecked;a.defaultChecked=!a.defaultChecked;\"\"!==b&&(a.name=b)}function Qf(a){var b=\"\";aa.Children.forEach(a,function(a){null==a||\"string\"!==typeof a&&\"number\"!==typeof a||(b+=a)});return b}\nfunction Rf(a,b){a=B({children:void 0},b);if(b=Qf(b.children))a.children=b;return a}function Sf(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e=b.length?void 0:E(\"93\"),b=b[0]),c=\"\"+b),null==c&&(c=\"\"));a._wrapperState={initialValue:\"\"+c}}\nfunction Wf(a,b){var c=b.value;null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&(a.defaultValue=c));null!=b.defaultValue&&(a.defaultValue=b.defaultValue)}function Xf(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a.value=b)}var Yf={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Zf(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function $f(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Zf(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar ag=void 0,bg=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Yf.svg||\"innerHTML\"in a)a.innerHTML=b;else{ag=ag||document.createElement(\"div\");ag.innerHTML=\"\\x3csvg\\x3e\"+b+\"\\x3c/svg\\x3e\";for(b=ag.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction cg(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar dg={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,\nstopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},eg=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(dg).forEach(function(a){eg.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);dg[b]=dg[a]})});\nfunction fg(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\");var e=c;var f=b[c];e=null==f||\"boolean\"===typeof f||\"\"===f?\"\":d||\"number\"!==typeof f||0===f||dg.hasOwnProperty(e)&&dg[e]?(\"\"+f).trim():f+\"px\";\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var gg=B({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction hg(a,b,c){b&&(gg[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML?E(\"137\",a,c()):void 0),null!=b.dangerouslySetInnerHTML&&(null!=b.children?E(\"60\"):void 0,\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML?void 0:E(\"61\")),null!=b.style&&\"object\"!==typeof b.style?E(\"62\",c()):void 0)}\nfunction ig(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var jg=Yf.html,kg=C.thatReturns(\"\");\nfunction lg(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=Hd(a);b=Sa[b];for(var d=0;d\nd&&(e=d,d=a,a=e);e=Jd(c,a);var f=Jd(c,d);if(e&&f&&(1!==b.rangeCount||b.anchorNode!==e.node||b.anchorOffset!==e.offset||b.focusNode!==f.node||b.focusOffset!==f.offset)){var g=document.createRange();g.setStart(e.node,e.offset);b.removeAllRanges();a>d?(b.addRange(g),b.extend(f.node,f.offset)):(g.setEnd(f.node,f.offset),b.addRange(g))}}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});ia(c);for(c=0;c does not support changing `store` on the fly. ' + 'It is most likely that you see this error because you updated to ' + 'Redux 2.x and React Redux 2.x which no longer hot reload reducers ' + 'automatically. See https://github.com/reactjs/react-redux/releases/' + 'tag/v2.0.0 for the migration instructions.');\n}\n\nexport function createProvider() {\n var _Provider$childContex;\n\n var storeKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'store';\n var subKey = arguments[1];\n\n var subscriptionKey = subKey || storeKey + 'Subscription';\n\n var Provider = function (_Component) {\n _inherits(Provider, _Component);\n\n Provider.prototype.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[storeKey] = this[storeKey], _ref[subscriptionKey] = null, _ref;\n };\n\n function Provider(props, context) {\n _classCallCheck(this, Provider);\n\n var _this = _possibleConstructorReturn(this, _Component.call(this, props, context));\n\n _this[storeKey] = props.store;\n return _this;\n }\n\n Provider.prototype.render = function render() {\n return Children.only(this.props.children);\n };\n\n return Provider;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n Provider.prototype.componentWillReceiveProps = function (nextProps) {\n if (this[storeKey] !== nextProps.store) {\n warnAboutReceivingStore();\n }\n };\n }\n\n Provider.propTypes = {\n store: storeShape.isRequired,\n children: PropTypes.element.isRequired\n };\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[storeKey] = storeShape.isRequired, _Provider$childContex[subscriptionKey] = subscriptionShape, _Provider$childContex);\n\n return Provider;\n}\n\nexport default createProvider();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-redux/es/components/Provider.js\n// module id = 415\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar invariant = require('fbjs/lib/invariant');\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n invariant(\n false,\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim\n };\n\n ReactPropTypes.checkPropTypes = emptyFunction;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/prop-types/factoryWithThrowingShims.js\n// module id = 416\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function validateFormat(format) {};\n\nif (process.env.NODE_ENV !== 'production') {\n validateFormat = function validateFormat(format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/invariant.js\n// module id = 417\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/prop-types/lib/ReactPropTypesSecret.js\n// module id = 418\n// module chunks = 0","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nvar CLEARED = null;\nvar nullListeners = {\n notify: function notify() {}\n};\n\nfunction createListenerCollection() {\n // the current/next pattern is copied from redux's createStore code.\n // TODO: refactor+expose that code to be reusable here?\n var current = [];\n var next = [];\n\n return {\n clear: function clear() {\n next = CLEARED;\n current = CLEARED;\n },\n notify: function notify() {\n var listeners = current = next;\n for (var i = 0; i < listeners.length; i++) {\n listeners[i]();\n }\n },\n get: function get() {\n return next;\n },\n subscribe: function subscribe(listener) {\n var isSubscribed = true;\n if (next === current) next = current.slice();\n next.push(listener);\n\n return function unsubscribe() {\n if (!isSubscribed || current === CLEARED) return;\n isSubscribed = false;\n\n if (next === current) next = current.slice();\n next.splice(next.indexOf(listener), 1);\n };\n }\n };\n}\n\nvar Subscription = function () {\n function Subscription(store, parentSub, onStateChange) {\n _classCallCheck(this, Subscription);\n\n this.store = store;\n this.parentSub = parentSub;\n this.onStateChange = onStateChange;\n this.unsubscribe = null;\n this.listeners = nullListeners;\n }\n\n Subscription.prototype.addNestedSub = function addNestedSub(listener) {\n this.trySubscribe();\n return this.listeners.subscribe(listener);\n };\n\n Subscription.prototype.notifyNestedSubs = function notifyNestedSubs() {\n this.listeners.notify();\n };\n\n Subscription.prototype.isSubscribed = function isSubscribed() {\n return Boolean(this.unsubscribe);\n };\n\n Subscription.prototype.trySubscribe = function trySubscribe() {\n if (!this.unsubscribe) {\n this.unsubscribe = this.parentSub ? this.parentSub.addNestedSub(this.onStateChange) : this.store.subscribe(this.onStateChange);\n\n this.listeners = createListenerCollection();\n }\n };\n\n Subscription.prototype.tryUnsubscribe = function tryUnsubscribe() {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n this.listeners.clear();\n this.listeners = nullListeners;\n }\n };\n\n return Subscription;\n}();\n\nexport { Subscription as default };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-redux/es/utils/Subscription.js\n// module id = 419\n// module chunks = 0","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nimport connectAdvanced from '../components/connectAdvanced';\nimport shallowEqual from '../utils/shallowEqual';\nimport defaultMapDispatchToPropsFactories from './mapDispatchToProps';\nimport defaultMapStateToPropsFactories from './mapStateToProps';\nimport defaultMergePropsFactories from './mergeProps';\nimport defaultSelectorFactory from './selectorFactory';\n\n/*\n connect is a facade over connectAdvanced. It turns its args into a compatible\n selectorFactory, which has the signature:\n\n (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps\n \n connect passes its args to connectAdvanced as options, which will in turn pass them to\n selectorFactory each time a Connect component instance is instantiated or hot reloaded.\n\n selectorFactory returns a final props selector from its mapStateToProps,\n mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,\n mergePropsFactories, and pure args.\n\n The resulting final props selector is called by the Connect component instance whenever\n it receives new props or store state.\n */\n\nfunction match(arg, factories, name) {\n for (var i = factories.length - 1; i >= 0; i--) {\n var result = factories[i](arg);\n if (result) return result;\n }\n\n return function (dispatch, options) {\n throw new Error('Invalid value of type ' + typeof arg + ' for ' + name + ' argument when connecting component ' + options.wrappedComponentName + '.');\n };\n}\n\nfunction strictEqual(a, b) {\n return a === b;\n}\n\n// createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\nexport function createConnect() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$connectHOC = _ref.connectHOC,\n connectHOC = _ref$connectHOC === undefined ? connectAdvanced : _ref$connectHOC,\n _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n mapStateToPropsFactories = _ref$mapStateToPropsF === undefined ? defaultMapStateToPropsFactories : _ref$mapStateToPropsF,\n _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n mapDispatchToPropsFactories = _ref$mapDispatchToPro === undefined ? defaultMapDispatchToPropsFactories : _ref$mapDispatchToPro,\n _ref$mergePropsFactor = _ref.mergePropsFactories,\n mergePropsFactories = _ref$mergePropsFactor === undefined ? defaultMergePropsFactories : _ref$mergePropsFactor,\n _ref$selectorFactory = _ref.selectorFactory,\n selectorFactory = _ref$selectorFactory === undefined ? defaultSelectorFactory : _ref$selectorFactory;\n\n return function connect(mapStateToProps, mapDispatchToProps, mergeProps) {\n var _ref2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref2$pure = _ref2.pure,\n pure = _ref2$pure === undefined ? true : _ref2$pure,\n _ref2$areStatesEqual = _ref2.areStatesEqual,\n areStatesEqual = _ref2$areStatesEqual === undefined ? strictEqual : _ref2$areStatesEqual,\n _ref2$areOwnPropsEqua = _ref2.areOwnPropsEqual,\n areOwnPropsEqual = _ref2$areOwnPropsEqua === undefined ? shallowEqual : _ref2$areOwnPropsEqua,\n _ref2$areStatePropsEq = _ref2.areStatePropsEqual,\n areStatePropsEqual = _ref2$areStatePropsEq === undefined ? shallowEqual : _ref2$areStatePropsEq,\n _ref2$areMergedPropsE = _ref2.areMergedPropsEqual,\n areMergedPropsEqual = _ref2$areMergedPropsE === undefined ? shallowEqual : _ref2$areMergedPropsE,\n extraOptions = _objectWithoutProperties(_ref2, ['pure', 'areStatesEqual', 'areOwnPropsEqual', 'areStatePropsEqual', 'areMergedPropsEqual']);\n\n var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');\n var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');\n var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');\n\n return connectHOC(selectorFactory, _extends({\n // used in error messages\n methodName: 'connect',\n\n // used to compute Connect's displayName from the wrapped component's displayName.\n getDisplayName: function getDisplayName(name) {\n return 'Connect(' + name + ')';\n },\n\n // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n shouldHandleStateChanges: Boolean(mapStateToProps),\n\n // passed through to selectorFactory\n initMapStateToProps: initMapStateToProps,\n initMapDispatchToProps: initMapDispatchToProps,\n initMergeProps: initMergeProps,\n pure: pure,\n areStatesEqual: areStatesEqual,\n areOwnPropsEqual: areOwnPropsEqual,\n areStatePropsEqual: areStatePropsEqual,\n areMergedPropsEqual: areMergedPropsEqual\n\n }, extraOptions));\n };\n}\n\nexport default createConnect();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-redux/es/connect/connect.js\n// module id = 420\n// module chunks = 0","var hasOwn = Object.prototype.hasOwnProperty;\n\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nexport default function shallowEqual(objA, objB) {\n if (is(objA, objB)) return true;\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) return false;\n\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwn.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-redux/es/utils/shallowEqual.js\n// module id = 421\n// module chunks = 0","import { bindActionCreators } from 'redux';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\n\nexport function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\n\nexport function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n return !mapDispatchToProps ? wrapMapToPropsConstant(function (dispatch) {\n return { dispatch: dispatch };\n }) : undefined;\n}\n\nexport function whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(function (dispatch) {\n return bindActionCreators(mapDispatchToProps, dispatch);\n }) : undefined;\n}\n\nexport default [whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-redux/es/connect/mapDispatchToProps.js\n// module id = 422\n// module chunks = 0","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash-es/_baseGetTag.js\n// module id = 423\n// module chunks = 0","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash-es/_root.js\n// module id = 424\n// module chunks = 0","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash-es/_freeGlobal.js\n// module id = 425\n// module chunks = 0","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash-es/_getRawTag.js\n// module id = 426\n// module chunks = 0","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash-es/_objectToString.js\n// module id = 427\n// module chunks = 0","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash-es/_getPrototype.js\n// module id = 428\n// module chunks = 0","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash-es/_overArg.js\n// module id = 429\n// module chunks = 0","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash-es/isObjectLike.js\n// module id = 430\n// module chunks = 0","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (typeof module !== 'undefined') {\n root = module;\n} else {\n root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/symbol-observable/es/index.js\n// module id = 431\n// module chunks = 0","module.exports = function(originalModule) {\r\n\tif(!originalModule.webpackPolyfill) {\r\n\t\tvar module = Object.create(originalModule);\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"exports\", {\r\n\t\t\tenumerable: true,\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/harmony-module.js\n// module id = 432\n// module chunks = 0","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/symbol-observable/es/ponyfill.js\n// module id = 433\n// module chunks = 0","import { ActionTypes } from './createStore';\nimport isPlainObject from 'lodash-es/isPlainObject';\nimport warning from './utils/warning';\n\nfunction getUndefinedStateErrorMessage(key, action) {\n var actionType = action && action.type;\n var actionName = actionType && '\"' + actionType.toString() + '\"' || 'an action';\n\n return 'Given action ' + actionName + ', reducer \"' + key + '\" returned undefined. ' + 'To ignore an action, you must explicitly return the previous state. ' + 'If you want this reducer to hold no value, you can return null instead of undefined.';\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return 'The ' + argumentName + ' has unexpected type of \"' + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + '\". Expected argument to be an object with the following ' + ('keys: \"' + reducerKeys.join('\", \"') + '\"');\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n\n if (unexpectedKeys.length > 0) {\n return 'Unexpected ' + (unexpectedKeys.length > 1 ? 'keys' : 'key') + ' ' + ('\"' + unexpectedKeys.join('\", \"') + '\" found in ' + argumentName + '. ') + 'Expected to find one of the known reducer keys instead: ' + ('\"' + reducerKeys.join('\", \"') + '\". Unexpected keys will be ignored.');\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, { type: ActionTypes.INIT });\n\n if (typeof initialState === 'undefined') {\n throw new Error('Reducer \"' + key + '\" returned undefined during initialization. ' + 'If the state passed to the reducer is undefined, you must ' + 'explicitly return the initial state. The initial state may ' + 'not be undefined. If you don\\'t want to set a value for this reducer, ' + 'you can use null instead of undefined.');\n }\n\n var type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7).split('').join('.');\n if (typeof reducer(undefined, { type: type }) === 'undefined') {\n throw new Error('Reducer \"' + key + '\" returned undefined when probed with a random type. ' + ('Don\\'t try to handle ' + ActionTypes.INIT + ' or other actions in \"redux/*\" ') + 'namespace. They are considered private. Instead, you must return the ' + 'current state for any unknown actions, unless it is undefined, ' + 'in which case you must return the initial state, regardless of the ' + 'action type. The initial state may not be undefined, but can be null.');\n }\n });\n}\n\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\nexport default function combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning('No reducer provided for key \"' + key + '\"');\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n var finalReducerKeys = Object.keys(finalReducers);\n\n var unexpectedKeyCache = void 0;\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError = void 0;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var action = arguments[1];\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === 'undefined') {\n var errorMessage = getUndefinedStateErrorMessage(_key, action);\n throw new Error(errorMessage);\n }\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n return hasChanged ? nextState : state;\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux/es/combineReducers.js\n// module id = 434\n// module chunks = 0","function bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(undefined, arguments));\n };\n}\n\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass a single function as the first argument,\n * and get a function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\nexport default function bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error('bindActionCreators expected an object or a function, instead received ' + (actionCreators === null ? 'null' : typeof actionCreators) + '. ' + 'Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?');\n }\n\n var keys = Object.keys(actionCreators);\n var boundActionCreators = {};\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var actionCreator = actionCreators[key];\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux/es/bindActionCreators.js\n// module id = 435\n// module chunks = 0","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nimport compose from './compose';\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\nexport default function applyMiddleware() {\n for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function (reducer, preloadedState, enhancer) {\n var store = createStore(reducer, preloadedState, enhancer);\n var _dispatch = store.dispatch;\n var chain = [];\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch(action) {\n return _dispatch(action);\n }\n };\n chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(undefined, chain)(store.dispatch);\n\n return _extends({}, store, {\n dispatch: _dispatch\n });\n };\n };\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux/es/applyMiddleware.js\n// module id = 436\n// module chunks = 0","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\n\nexport function whenMapStateToPropsIsFunction(mapStateToProps) {\n return typeof mapStateToProps === 'function' ? wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : undefined;\n}\n\nexport function whenMapStateToPropsIsMissing(mapStateToProps) {\n return !mapStateToProps ? wrapMapToPropsConstant(function () {\n return {};\n }) : undefined;\n}\n\nexport default [whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-redux/es/connect/mapStateToProps.js\n// module id = 437\n// module chunks = 0","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nimport verifyPlainObject from '../utils/verifyPlainObject';\n\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n return _extends({}, ownProps, stateProps, dispatchProps);\n}\n\nexport function wrapMergePropsFunc(mergeProps) {\n return function initMergePropsProxy(dispatch, _ref) {\n var displayName = _ref.displayName,\n pure = _ref.pure,\n areMergedPropsEqual = _ref.areMergedPropsEqual;\n\n var hasRunOnce = false;\n var mergedProps = void 0;\n\n return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n if (hasRunOnce) {\n if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n } else {\n hasRunOnce = true;\n mergedProps = nextMergedProps;\n\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n }\n\n return mergedProps;\n };\n };\n}\n\nexport function whenMergePropsIsFunction(mergeProps) {\n return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\n\nexport function whenMergePropsIsOmitted(mergeProps) {\n return !mergeProps ? function () {\n return defaultMergeProps;\n } : undefined;\n}\n\nexport default [whenMergePropsIsFunction, whenMergePropsIsOmitted];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-redux/es/connect/mergeProps.js\n// module id = 438\n// module chunks = 0","function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nimport verifySubselectors from './verifySubselectors';\n\nexport function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {\n return function impureFinalPropsSelector(state, ownProps) {\n return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);\n };\n}\n\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n var areStatesEqual = _ref.areStatesEqual,\n areOwnPropsEqual = _ref.areOwnPropsEqual,\n areStatePropsEqual = _ref.areStatePropsEqual;\n\n var hasRunAtLeastOnce = false;\n var state = void 0;\n var ownProps = void 0;\n var stateProps = void 0;\n var dispatchProps = void 0;\n var mergedProps = void 0;\n\n function handleFirstCall(firstState, firstOwnProps) {\n state = firstState;\n ownProps = firstOwnProps;\n stateProps = mapStateToProps(state, ownProps);\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n hasRunAtLeastOnce = true;\n return mergedProps;\n }\n\n function handleNewPropsAndNewState() {\n stateProps = mapStateToProps(state, ownProps);\n\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewProps() {\n if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewState() {\n var nextStateProps = mapStateToProps(state, ownProps);\n var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n stateProps = nextStateProps;\n\n if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n return mergedProps;\n }\n\n function handleSubsequentCalls(nextState, nextOwnProps) {\n var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n var stateChanged = !areStatesEqual(nextState, state);\n state = nextState;\n ownProps = nextOwnProps;\n\n if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n if (propsChanged) return handleNewProps();\n if (stateChanged) return handleNewState();\n return mergedProps;\n }\n\n return function pureFinalPropsSelector(nextState, nextOwnProps) {\n return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n };\n}\n\n// TODO: Add more comments\n\n// If pure is true, the selector returned by selectorFactory will memoize its results,\n// allowing connectAdvanced's shouldComponentUpdate to return false if final\n// props have not changed. If false, the selector will always return a new\n// object and shouldComponentUpdate will always return true.\n\nexport default function finalPropsSelectorFactory(dispatch, _ref2) {\n var initMapStateToProps = _ref2.initMapStateToProps,\n initMapDispatchToProps = _ref2.initMapDispatchToProps,\n initMergeProps = _ref2.initMergeProps,\n options = _objectWithoutProperties(_ref2, ['initMapStateToProps', 'initMapDispatchToProps', 'initMergeProps']);\n\n var mapStateToProps = initMapStateToProps(dispatch, options);\n var mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n var mergeProps = initMergeProps(dispatch, options);\n\n if (process.env.NODE_ENV !== 'production') {\n verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);\n }\n\n var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;\n\n return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-redux/es/connect/selectorFactory.js\n// module id = 439\n// module chunks = 0","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport warning from 'warning';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport createHistory from 'history/createBrowserHistory';\nimport Router from './Router';\n\n/**\n * The public API for a that uses HTML5 history.\n */\n\nvar BrowserRouter = function (_React$Component) {\n _inherits(BrowserRouter, _React$Component);\n\n function BrowserRouter() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, BrowserRouter);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.history = createHistory(_this.props), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n BrowserRouter.prototype.componentWillMount = function componentWillMount() {\n warning(!this.props.history, ' ignores the history prop. To use a custom history, ' + 'use `import { Router }` instead of `import { BrowserRouter as Router }`.');\n };\n\n BrowserRouter.prototype.render = function render() {\n return React.createElement(Router, { history: this.history, children: this.props.children });\n };\n\n return BrowserRouter;\n}(React.Component);\n\nBrowserRouter.propTypes = {\n basename: PropTypes.string,\n forceRefresh: PropTypes.bool,\n getUserConfirmation: PropTypes.func,\n keyLength: PropTypes.number,\n children: PropTypes.node\n};\n\n\nexport default BrowserRouter;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router-dom/es/BrowserRouter.js\n// module id = 441\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _LocationUtils = require('./LocationUtils');\n\nvar _PathUtils = require('./PathUtils');\n\nvar _createTransitionManager = require('./createTransitionManager');\n\nvar _createTransitionManager2 = _interopRequireDefault(_createTransitionManager);\n\nvar _DOMUtils = require('./DOMUtils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nvar getHistoryState = function getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n};\n\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\nvar createBrowserHistory = function createBrowserHistory() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n (0, _invariant2.default)(_DOMUtils.canUseDOM, 'Browser history needs a DOM');\n\n var globalHistory = window.history;\n var canUseHistory = (0, _DOMUtils.supportsHistory)();\n var needsHashChangeListener = !(0, _DOMUtils.supportsPopStateOnHashChange)();\n\n var _props$forceRefresh = props.forceRefresh,\n forceRefresh = _props$forceRefresh === undefined ? false : _props$forceRefresh,\n _props$getUserConfirm = props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === undefined ? _DOMUtils.getConfirmation : _props$getUserConfirm,\n _props$keyLength = props.keyLength,\n keyLength = _props$keyLength === undefined ? 6 : _props$keyLength;\n\n var basename = props.basename ? (0, _PathUtils.stripTrailingSlash)((0, _PathUtils.addLeadingSlash)(props.basename)) : '';\n\n var getDOMLocation = function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n\n\n var path = pathname + search + hash;\n\n (0, _warning2.default)(!basename || (0, _PathUtils.hasBasename)(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".');\n\n if (basename) path = (0, _PathUtils.stripBasename)(path, basename);\n\n return (0, _LocationUtils.createLocation)(path, state, key);\n };\n\n var createKey = function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n };\n\n var transitionManager = (0, _createTransitionManager2.default)();\n\n var setState = function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n\n transitionManager.notifyListeners(history.location, history.action);\n };\n\n var handlePopState = function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if ((0, _DOMUtils.isExtraneousPopstateEvent)(event)) return;\n\n handlePop(getDOMLocation(event.state));\n };\n\n var handleHashChange = function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n };\n\n var forceNextPop = false;\n\n var handlePop = function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({ action: action, location: location });\n } else {\n revertPop(location);\n }\n });\n }\n };\n\n var revertPop = function revertPop(fromLocation) {\n var toLocation = history.location;\n\n // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n\n if (toIndex === -1) toIndex = 0;\n\n var fromIndex = allKeys.indexOf(fromLocation.key);\n\n if (fromIndex === -1) fromIndex = 0;\n\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n };\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key];\n\n // Public interface\n\n var createHref = function createHref(location) {\n return basename + (0, _PathUtils.createPath)(location);\n };\n\n var push = function push(path, state) {\n (0, _warning2.default)(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'PUSH';\n var location = (0, _LocationUtils.createLocation)(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n\n if (canUseHistory) {\n globalHistory.pushState({ key: key, state: state }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);\n\n nextKeys.push(location.key);\n allKeys = nextKeys;\n\n setState({ action: action, location: location });\n }\n } else {\n (0, _warning2.default)(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history');\n\n window.location.href = href;\n }\n });\n };\n\n var replace = function replace(path, state) {\n (0, _warning2.default)(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'REPLACE';\n var location = (0, _LocationUtils.createLocation)(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n\n if (canUseHistory) {\n globalHistory.replaceState({ key: key, state: state }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n\n setState({ action: action, location: location });\n }\n } else {\n (0, _warning2.default)(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history');\n\n window.location.replace(href);\n }\n });\n };\n\n var go = function go(n) {\n globalHistory.go(n);\n };\n\n var goBack = function goBack() {\n return go(-1);\n };\n\n var goForward = function goForward() {\n return go(1);\n };\n\n var listenerCount = 0;\n\n var checkDOMListeners = function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1) {\n (0, _DOMUtils.addEventListener)(window, PopStateEvent, handlePopState);\n\n if (needsHashChangeListener) (0, _DOMUtils.addEventListener)(window, HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n (0, _DOMUtils.removeEventListener)(window, PopStateEvent, handlePopState);\n\n if (needsHashChangeListener) (0, _DOMUtils.removeEventListener)(window, HashChangeEvent, handleHashChange);\n }\n };\n\n var isBlocked = false;\n\n var block = function block() {\n var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n };\n\n var listen = function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n };\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n\n return history;\n};\n\nexports.default = createBrowserHistory;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/history/createBrowserHistory.js\n// module id = 442\n// module chunks = 0","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport warning from 'warning';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport createHistory from 'history/createHashHistory';\nimport Router from './Router';\n\n/**\n * The public API for a that uses window.location.hash.\n */\n\nvar HashRouter = function (_React$Component) {\n _inherits(HashRouter, _React$Component);\n\n function HashRouter() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, HashRouter);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.history = createHistory(_this.props), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n HashRouter.prototype.componentWillMount = function componentWillMount() {\n warning(!this.props.history, ' ignores the history prop. To use a custom history, ' + 'use `import { Router }` instead of `import { HashRouter as Router }`.');\n };\n\n HashRouter.prototype.render = function render() {\n return React.createElement(Router, { history: this.history, children: this.props.children });\n };\n\n return HashRouter;\n}(React.Component);\n\nHashRouter.propTypes = {\n basename: PropTypes.string,\n getUserConfirmation: PropTypes.func,\n hashType: PropTypes.oneOf(['hashbang', 'noslash', 'slash']),\n children: PropTypes.node\n};\n\n\nexport default HashRouter;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router-dom/es/HashRouter.js\n// module id = 443\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _LocationUtils = require('./LocationUtils');\n\nvar _PathUtils = require('./PathUtils');\n\nvar _createTransitionManager = require('./createTransitionManager');\n\nvar _createTransitionManager2 = _interopRequireDefault(_createTransitionManager);\n\nvar _DOMUtils = require('./DOMUtils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar HashChangeEvent = 'hashchange';\n\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + (0, _PathUtils.stripLeadingSlash)(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: _PathUtils.stripLeadingSlash,\n decodePath: _PathUtils.addLeadingSlash\n },\n slash: {\n encodePath: _PathUtils.addLeadingSlash,\n decodePath: _PathUtils.addLeadingSlash\n }\n};\n\nvar getHashPath = function getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n};\n\nvar pushHashPath = function pushHashPath(path) {\n return window.location.hash = path;\n};\n\nvar replaceHashPath = function replaceHashPath(path) {\n var hashIndex = window.location.href.indexOf('#');\n\n window.location.replace(window.location.href.slice(0, hashIndex >= 0 ? hashIndex : 0) + '#' + path);\n};\n\nvar createHashHistory = function createHashHistory() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n (0, _invariant2.default)(_DOMUtils.canUseDOM, 'Hash history needs a DOM');\n\n var globalHistory = window.history;\n var canGoWithoutReload = (0, _DOMUtils.supportsGoWithoutReloadUsingHash)();\n\n var _props$getUserConfirm = props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === undefined ? _DOMUtils.getConfirmation : _props$getUserConfirm,\n _props$hashType = props.hashType,\n hashType = _props$hashType === undefined ? 'slash' : _props$hashType;\n\n var basename = props.basename ? (0, _PathUtils.stripTrailingSlash)((0, _PathUtils.addLeadingSlash)(props.basename)) : '';\n\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n\n var getDOMLocation = function getDOMLocation() {\n var path = decodePath(getHashPath());\n\n (0, _warning2.default)(!basename || (0, _PathUtils.hasBasename)(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".');\n\n if (basename) path = (0, _PathUtils.stripBasename)(path, basename);\n\n return (0, _LocationUtils.createLocation)(path);\n };\n\n var transitionManager = (0, _createTransitionManager2.default)();\n\n var setState = function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n\n transitionManager.notifyListeners(history.location, history.action);\n };\n\n var forceNextPop = false;\n var ignorePath = null;\n\n var handleHashChange = function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n\n if (!forceNextPop && (0, _LocationUtils.locationsAreEqual)(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === (0, _PathUtils.createPath)(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n\n handlePop(location);\n }\n };\n\n var handlePop = function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({ action: action, location: location });\n } else {\n revertPop(location);\n }\n });\n }\n };\n\n var revertPop = function revertPop(fromLocation) {\n var toLocation = history.location;\n\n // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf((0, _PathUtils.createPath)(toLocation));\n\n if (toIndex === -1) toIndex = 0;\n\n var fromIndex = allPaths.lastIndexOf((0, _PathUtils.createPath)(fromLocation));\n\n if (fromIndex === -1) fromIndex = 0;\n\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n };\n\n // Ensure the hash is encoded properly before doing anything else.\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) replaceHashPath(encodedPath);\n\n var initialLocation = getDOMLocation();\n var allPaths = [(0, _PathUtils.createPath)(initialLocation)];\n\n // Public interface\n\n var createHref = function createHref(location) {\n return '#' + encodePath(basename + (0, _PathUtils.createPath)(location));\n };\n\n var push = function push(path, state) {\n (0, _warning2.default)(state === undefined, 'Hash history cannot push state; it is ignored');\n\n var action = 'PUSH';\n var location = (0, _LocationUtils.createLocation)(path, undefined, undefined, history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var path = (0, _PathUtils.createPath)(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n\n var prevIndex = allPaths.lastIndexOf((0, _PathUtils.createPath)(history.location));\n var nextPaths = allPaths.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);\n\n nextPaths.push(path);\n allPaths = nextPaths;\n\n setState({ action: action, location: location });\n } else {\n (0, _warning2.default)(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack');\n\n setState();\n }\n });\n };\n\n var replace = function replace(path, state) {\n (0, _warning2.default)(state === undefined, 'Hash history cannot replace state; it is ignored');\n\n var action = 'REPLACE';\n var location = (0, _LocationUtils.createLocation)(path, undefined, undefined, history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var path = (0, _PathUtils.createPath)(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf((0, _PathUtils.createPath)(history.location));\n\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n\n setState({ action: action, location: location });\n });\n };\n\n var go = function go(n) {\n (0, _warning2.default)(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser');\n\n globalHistory.go(n);\n };\n\n var goBack = function goBack() {\n return go(-1);\n };\n\n var goForward = function goForward() {\n return go(1);\n };\n\n var listenerCount = 0;\n\n var checkDOMListeners = function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1) {\n (0, _DOMUtils.addEventListener)(window, HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n (0, _DOMUtils.removeEventListener)(window, HashChangeEvent, handleHashChange);\n }\n };\n\n var isBlocked = false;\n\n var block = function block() {\n var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n };\n\n var listen = function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n };\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n\n return history;\n};\n\nexports.default = createHashHistory;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/history/createHashHistory.js\n// module id = 444\n// module chunks = 0","// Written in this round about way for babel-transform-imports\nimport MemoryRouter from 'react-router/es/MemoryRouter';\n\nexport default MemoryRouter;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router-dom/es/MemoryRouter.js\n// module id = 445\n// module chunks = 0","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport warning from 'warning';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport createHistory from 'history/createMemoryHistory';\nimport Router from './Router';\n\n/**\n * The public API for a that stores location in memory.\n */\n\nvar MemoryRouter = function (_React$Component) {\n _inherits(MemoryRouter, _React$Component);\n\n function MemoryRouter() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, MemoryRouter);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.history = createHistory(_this.props), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n MemoryRouter.prototype.componentWillMount = function componentWillMount() {\n warning(!this.props.history, ' ignores the history prop. To use a custom history, ' + 'use `import { Router }` instead of `import { MemoryRouter as Router }`.');\n };\n\n MemoryRouter.prototype.render = function render() {\n return React.createElement(Router, { history: this.history, children: this.props.children });\n };\n\n return MemoryRouter;\n}(React.Component);\n\nMemoryRouter.propTypes = {\n initialEntries: PropTypes.array,\n initialIndex: PropTypes.number,\n getUserConfirmation: PropTypes.func,\n keyLength: PropTypes.number,\n children: PropTypes.node\n};\n\n\nexport default MemoryRouter;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router/es/MemoryRouter.js\n// module id = 446\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _PathUtils = require('./PathUtils');\n\nvar _LocationUtils = require('./LocationUtils');\n\nvar _createTransitionManager = require('./createTransitionManager');\n\nvar _createTransitionManager2 = _interopRequireDefault(_createTransitionManager);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar clamp = function clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n};\n\n/**\n * Creates a history object that stores locations in memory.\n */\nvar createMemoryHistory = function createMemoryHistory() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var getUserConfirmation = props.getUserConfirmation,\n _props$initialEntries = props.initialEntries,\n initialEntries = _props$initialEntries === undefined ? ['/'] : _props$initialEntries,\n _props$initialIndex = props.initialIndex,\n initialIndex = _props$initialIndex === undefined ? 0 : _props$initialIndex,\n _props$keyLength = props.keyLength,\n keyLength = _props$keyLength === undefined ? 6 : _props$keyLength;\n\n\n var transitionManager = (0, _createTransitionManager2.default)();\n\n var setState = function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n\n transitionManager.notifyListeners(history.location, history.action);\n };\n\n var createKey = function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n };\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? (0, _LocationUtils.createLocation)(entry, undefined, createKey()) : (0, _LocationUtils.createLocation)(entry, undefined, entry.key || createKey());\n });\n\n // Public interface\n\n var createHref = _PathUtils.createPath;\n\n var push = function push(path, state) {\n (0, _warning2.default)(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'PUSH';\n var location = (0, _LocationUtils.createLocation)(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n\n var nextEntries = history.entries.slice(0);\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n };\n\n var replace = function replace(path, state) {\n (0, _warning2.default)(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'REPLACE';\n var location = (0, _LocationUtils.createLocation)(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n history.entries[history.index] = location;\n\n setState({ action: action, location: location });\n });\n };\n\n var go = function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n\n var action = 'POP';\n var location = history.entries[nextIndex];\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n };\n\n var goBack = function goBack() {\n return go(-1);\n };\n\n var goForward = function goForward() {\n return go(1);\n };\n\n var canGo = function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n };\n\n var block = function block() {\n var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n return transitionManager.setPrompt(prompt);\n };\n\n var listen = function listen(listener) {\n return transitionManager.appendListener(listener);\n };\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n\n return history;\n};\n\nexports.default = createMemoryHistory;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/history/createMemoryHistory.js\n// module id = 447\n// module chunks = 0","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Route from './Route';\nimport Link from './Link';\n\n/**\n * A wrapper that knows if it's \"active\" or not.\n */\nvar NavLink = function NavLink(_ref) {\n var to = _ref.to,\n exact = _ref.exact,\n strict = _ref.strict,\n location = _ref.location,\n activeClassName = _ref.activeClassName,\n className = _ref.className,\n activeStyle = _ref.activeStyle,\n style = _ref.style,\n getIsActive = _ref.isActive,\n ariaCurrent = _ref.ariaCurrent,\n rest = _objectWithoutProperties(_ref, ['to', 'exact', 'strict', 'location', 'activeClassName', 'className', 'activeStyle', 'style', 'isActive', 'ariaCurrent']);\n\n return React.createElement(Route, {\n path: (typeof to === 'undefined' ? 'undefined' : _typeof(to)) === 'object' ? to.pathname : to,\n exact: exact,\n strict: strict,\n location: location,\n children: function children(_ref2) {\n var location = _ref2.location,\n match = _ref2.match;\n\n var isActive = !!(getIsActive ? getIsActive(match, location) : match);\n\n return React.createElement(Link, _extends({\n to: to,\n className: isActive ? [className, activeClassName].filter(function (i) {\n return i;\n }).join(' ') : className,\n style: isActive ? _extends({}, style, activeStyle) : style,\n 'aria-current': isActive && ariaCurrent\n }, rest));\n }\n });\n};\n\nNavLink.propTypes = {\n to: Link.propTypes.to,\n exact: PropTypes.bool,\n strict: PropTypes.bool,\n location: PropTypes.object,\n activeClassName: PropTypes.string,\n className: PropTypes.string,\n activeStyle: PropTypes.object,\n style: PropTypes.object,\n isActive: PropTypes.func,\n ariaCurrent: PropTypes.oneOf(['page', 'step', 'location', 'true'])\n};\n\nNavLink.defaultProps = {\n activeClassName: 'active',\n ariaCurrent: 'true'\n};\n\nexport default NavLink;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router-dom/es/NavLink.js\n// module id = 448\n// module chunks = 0","var isarray = require('isarray')\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = options && options.delimiter || '/'\n var res\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n continue\n }\n\n var next = str[index]\n var prefix = res[2]\n var name = res[3]\n var capture = res[4]\n var group = res[5]\n var modifier = res[6]\n var asterisk = res[7]\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n }\n\n var partial = prefix != null && next != null && next !== prefix\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var delimiter = res[2] || defaultDelimiter\n var pattern = capture || group\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n })\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index)\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path)\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options))\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$')\n }\n }\n\n return function (obj, opts) {\n var path = ''\n var data = obj || {}\n var options = opts || {}\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n\n continue\n }\n\n var value = data[token.name]\n var segment\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j])\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n })\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n var strict = options.strict\n var end = options.end !== false\n var route = ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var prefix = escapeString(token.prefix)\n var capture = '(?:' + token.pattern + ')'\n\n keys.push(token)\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*'\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?'\n } else {\n capture = prefix + '(' + capture + ')?'\n }\n } else {\n capture = prefix + '(' + capture + ')'\n }\n\n route += capture\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/')\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n }\n\n if (end) {\n route += '$'\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router/node_modules/path-to-regexp/index.js\n// module id = 449\n// module chunks = 0","module.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router/node_modules/isarray/index.js\n// module id = 450\n// module chunks = 0","// Written in this round about way for babel-transform-imports\nimport Prompt from 'react-router/es/Prompt';\n\nexport default Prompt;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router-dom/es/Prompt.js\n// module id = 451\n// module chunks = 0","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport invariant from 'invariant';\n\n/**\n * The public API for prompting the user before navigating away\n * from a screen with a component.\n */\n\nvar Prompt = function (_React$Component) {\n _inherits(Prompt, _React$Component);\n\n function Prompt() {\n _classCallCheck(this, Prompt);\n\n return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n Prompt.prototype.enable = function enable(message) {\n if (this.unblock) this.unblock();\n\n this.unblock = this.context.router.history.block(message);\n };\n\n Prompt.prototype.disable = function disable() {\n if (this.unblock) {\n this.unblock();\n this.unblock = null;\n }\n };\n\n Prompt.prototype.componentWillMount = function componentWillMount() {\n invariant(this.context.router, 'You should not use outside a ');\n\n if (this.props.when) this.enable(this.props.message);\n };\n\n Prompt.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (nextProps.when) {\n if (!this.props.when || this.props.message !== nextProps.message) this.enable(nextProps.message);\n } else {\n this.disable();\n }\n };\n\n Prompt.prototype.componentWillUnmount = function componentWillUnmount() {\n this.disable();\n };\n\n Prompt.prototype.render = function render() {\n return null;\n };\n\n return Prompt;\n}(React.Component);\n\nPrompt.propTypes = {\n when: PropTypes.bool,\n message: PropTypes.oneOfType([PropTypes.func, PropTypes.string]).isRequired\n};\nPrompt.defaultProps = {\n when: true\n};\nPrompt.contextTypes = {\n router: PropTypes.shape({\n history: PropTypes.shape({\n block: PropTypes.func.isRequired\n }).isRequired\n }).isRequired\n};\n\n\nexport default Prompt;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router/es/Prompt.js\n// module id = 452\n// module chunks = 0","// Written in this round about way for babel-transform-imports\nimport Redirect from 'react-router/es/Redirect';\n\nexport default Redirect;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router-dom/es/Redirect.js\n// module id = 453\n// module chunks = 0","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport warning from 'warning';\nimport invariant from 'invariant';\nimport { createLocation, locationsAreEqual } from 'history';\n\n/**\n * The public API for updating the location programmatically\n * with a component.\n */\n\nvar Redirect = function (_React$Component) {\n _inherits(Redirect, _React$Component);\n\n function Redirect() {\n _classCallCheck(this, Redirect);\n\n return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n Redirect.prototype.isStatic = function isStatic() {\n return this.context.router && this.context.router.staticContext;\n };\n\n Redirect.prototype.componentWillMount = function componentWillMount() {\n invariant(this.context.router, 'You should not use outside a ');\n\n if (this.isStatic()) this.perform();\n };\n\n Redirect.prototype.componentDidMount = function componentDidMount() {\n if (!this.isStatic()) this.perform();\n };\n\n Redirect.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {\n var prevTo = createLocation(prevProps.to);\n var nextTo = createLocation(this.props.to);\n\n if (locationsAreEqual(prevTo, nextTo)) {\n warning(false, 'You tried to redirect to the same route you\\'re currently on: ' + ('\"' + nextTo.pathname + nextTo.search + '\"'));\n return;\n }\n\n this.perform();\n };\n\n Redirect.prototype.perform = function perform() {\n var history = this.context.router.history;\n var _props = this.props,\n push = _props.push,\n to = _props.to;\n\n\n if (push) {\n history.push(to);\n } else {\n history.replace(to);\n }\n };\n\n Redirect.prototype.render = function render() {\n return null;\n };\n\n return Redirect;\n}(React.Component);\n\nRedirect.propTypes = {\n push: PropTypes.bool,\n from: PropTypes.string,\n to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired\n};\nRedirect.defaultProps = {\n push: false\n};\nRedirect.contextTypes = {\n router: PropTypes.shape({\n history: PropTypes.shape({\n push: PropTypes.func.isRequired,\n replace: PropTypes.func.isRequired\n }).isRequired,\n staticContext: PropTypes.object\n }).isRequired\n};\n\n\nexport default Redirect;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router/es/Redirect.js\n// module id = 454\n// module chunks = 0","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nimport warning from 'warning';\nimport invariant from 'invariant';\nimport { createLocation } from './LocationUtils';\nimport { addLeadingSlash, stripTrailingSlash, hasBasename, stripBasename, createPath } from './PathUtils';\nimport createTransitionManager from './createTransitionManager';\nimport { canUseDOM, addEventListener, removeEventListener, getConfirmation, supportsHistory, supportsPopStateOnHashChange, isExtraneousPopstateEvent } from './DOMUtils';\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nvar getHistoryState = function getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n};\n\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\nvar createBrowserHistory = function createBrowserHistory() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n invariant(canUseDOM, 'Browser history needs a DOM');\n\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n\n var _props$forceRefresh = props.forceRefresh,\n forceRefresh = _props$forceRefresh === undefined ? false : _props$forceRefresh,\n _props$getUserConfirm = props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === undefined ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = props.keyLength,\n keyLength = _props$keyLength === undefined ? 6 : _props$keyLength;\n\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n var getDOMLocation = function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n\n\n var path = pathname + search + hash;\n\n warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".');\n\n if (basename) path = stripBasename(path, basename);\n\n return createLocation(path, state, key);\n };\n\n var createKey = function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n };\n\n var transitionManager = createTransitionManager();\n\n var setState = function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n\n transitionManager.notifyListeners(history.location, history.action);\n };\n\n var handlePopState = function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n\n handlePop(getDOMLocation(event.state));\n };\n\n var handleHashChange = function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n };\n\n var forceNextPop = false;\n\n var handlePop = function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({ action: action, location: location });\n } else {\n revertPop(location);\n }\n });\n }\n };\n\n var revertPop = function revertPop(fromLocation) {\n var toLocation = history.location;\n\n // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n\n if (toIndex === -1) toIndex = 0;\n\n var fromIndex = allKeys.indexOf(fromLocation.key);\n\n if (fromIndex === -1) fromIndex = 0;\n\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n };\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key];\n\n // Public interface\n\n var createHref = function createHref(location) {\n return basename + createPath(location);\n };\n\n var push = function push(path, state) {\n warning(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n\n if (canUseHistory) {\n globalHistory.pushState({ key: key, state: state }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);\n\n nextKeys.push(location.key);\n allKeys = nextKeys;\n\n setState({ action: action, location: location });\n }\n } else {\n warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history');\n\n window.location.href = href;\n }\n });\n };\n\n var replace = function replace(path, state) {\n warning(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n\n if (canUseHistory) {\n globalHistory.replaceState({ key: key, state: state }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n\n setState({ action: action, location: location });\n }\n } else {\n warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history');\n\n window.location.replace(href);\n }\n });\n };\n\n var go = function go(n) {\n globalHistory.go(n);\n };\n\n var goBack = function goBack() {\n return go(-1);\n };\n\n var goForward = function goForward() {\n return go(1);\n };\n\n var listenerCount = 0;\n\n var checkDOMListeners = function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1) {\n addEventListener(window, PopStateEvent, handlePopState);\n\n if (needsHashChangeListener) addEventListener(window, HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n removeEventListener(window, PopStateEvent, handlePopState);\n\n if (needsHashChangeListener) removeEventListener(window, HashChangeEvent, handleHashChange);\n }\n };\n\n var isBlocked = false;\n\n var block = function block() {\n var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n };\n\n var listen = function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n };\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n\n return history;\n};\n\nexport default createBrowserHistory;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/history/es/createBrowserHistory.js\n// module id = 456\n// module chunks = 0","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nimport warning from 'warning';\nimport invariant from 'invariant';\nimport { createLocation, locationsAreEqual } from './LocationUtils';\nimport { addLeadingSlash, stripLeadingSlash, stripTrailingSlash, hasBasename, stripBasename, createPath } from './PathUtils';\nimport createTransitionManager from './createTransitionManager';\nimport { canUseDOM, addEventListener, removeEventListener, getConfirmation, supportsGoWithoutReloadUsingHash } from './DOMUtils';\n\nvar HashChangeEvent = 'hashchange';\n\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nvar getHashPath = function getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n};\n\nvar pushHashPath = function pushHashPath(path) {\n return window.location.hash = path;\n};\n\nvar replaceHashPath = function replaceHashPath(path) {\n var hashIndex = window.location.href.indexOf('#');\n\n window.location.replace(window.location.href.slice(0, hashIndex >= 0 ? hashIndex : 0) + '#' + path);\n};\n\nvar createHashHistory = function createHashHistory() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n invariant(canUseDOM, 'Hash history needs a DOM');\n\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n\n var _props$getUserConfirm = props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === undefined ? getConfirmation : _props$getUserConfirm,\n _props$hashType = props.hashType,\n hashType = _props$hashType === undefined ? 'slash' : _props$hashType;\n\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n\n var getDOMLocation = function getDOMLocation() {\n var path = decodePath(getHashPath());\n\n warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".');\n\n if (basename) path = stripBasename(path, basename);\n\n return createLocation(path);\n };\n\n var transitionManager = createTransitionManager();\n\n var setState = function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n\n transitionManager.notifyListeners(history.location, history.action);\n };\n\n var forceNextPop = false;\n var ignorePath = null;\n\n var handleHashChange = function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n\n if (!forceNextPop && locationsAreEqual(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n\n handlePop(location);\n }\n };\n\n var handlePop = function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({ action: action, location: location });\n } else {\n revertPop(location);\n }\n });\n }\n };\n\n var revertPop = function revertPop(fromLocation) {\n var toLocation = history.location;\n\n // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n\n if (toIndex === -1) toIndex = 0;\n\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n\n if (fromIndex === -1) fromIndex = 0;\n\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n };\n\n // Ensure the hash is encoded properly before doing anything else.\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) replaceHashPath(encodedPath);\n\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)];\n\n // Public interface\n\n var createHref = function createHref(location) {\n return '#' + encodePath(basename + createPath(location));\n };\n\n var push = function push(path, state) {\n warning(state === undefined, 'Hash history cannot push state; it is ignored');\n\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);\n\n nextPaths.push(path);\n allPaths = nextPaths;\n\n setState({ action: action, location: location });\n } else {\n warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack');\n\n setState();\n }\n });\n };\n\n var replace = function replace(path, state) {\n warning(state === undefined, 'Hash history cannot replace state; it is ignored');\n\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n\n setState({ action: action, location: location });\n });\n };\n\n var go = function go(n) {\n warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser');\n\n globalHistory.go(n);\n };\n\n var goBack = function goBack() {\n return go(-1);\n };\n\n var goForward = function goForward() {\n return go(1);\n };\n\n var listenerCount = 0;\n\n var checkDOMListeners = function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1) {\n addEventListener(window, HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n removeEventListener(window, HashChangeEvent, handleHashChange);\n }\n };\n\n var isBlocked = false;\n\n var block = function block() {\n var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n };\n\n var listen = function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n };\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n\n return history;\n};\n\nexport default createHashHistory;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/history/es/createHashHistory.js\n// module id = 457\n// module chunks = 0","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nimport warning from 'warning';\nimport { createPath } from './PathUtils';\nimport { createLocation } from './LocationUtils';\nimport createTransitionManager from './createTransitionManager';\n\nvar clamp = function clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n};\n\n/**\n * Creates a history object that stores locations in memory.\n */\nvar createMemoryHistory = function createMemoryHistory() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var getUserConfirmation = props.getUserConfirmation,\n _props$initialEntries = props.initialEntries,\n initialEntries = _props$initialEntries === undefined ? ['/'] : _props$initialEntries,\n _props$initialIndex = props.initialIndex,\n initialIndex = _props$initialIndex === undefined ? 0 : _props$initialIndex,\n _props$keyLength = props.keyLength,\n keyLength = _props$keyLength === undefined ? 6 : _props$keyLength;\n\n\n var transitionManager = createTransitionManager();\n\n var setState = function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n\n transitionManager.notifyListeners(history.location, history.action);\n };\n\n var createKey = function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n };\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n });\n\n // Public interface\n\n var createHref = createPath;\n\n var push = function push(path, state) {\n warning(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n\n var nextEntries = history.entries.slice(0);\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n };\n\n var replace = function replace(path, state) {\n warning(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n\n history.entries[history.index] = location;\n\n setState({ action: action, location: location });\n });\n };\n\n var go = function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n\n var action = 'POP';\n var location = history.entries[nextIndex];\n\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n };\n\n var goBack = function goBack() {\n return go(-1);\n };\n\n var goForward = function goForward() {\n return go(1);\n };\n\n var canGo = function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n };\n\n var block = function block() {\n var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n return transitionManager.setPrompt(prompt);\n };\n\n var listen = function listen(listener) {\n return transitionManager.appendListener(listener);\n };\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n\n return history;\n};\n\nexport default createMemoryHistory;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/history/es/createMemoryHistory.js\n// module id = 458\n// module chunks = 0","// Written in this round about way for babel-transform-imports\nimport StaticRouter from 'react-router/es/StaticRouter';\n\nexport default StaticRouter;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router-dom/es/StaticRouter.js\n// module id = 459\n// module chunks = 0","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport warning from 'warning';\nimport invariant from 'invariant';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { addLeadingSlash, createPath, parsePath } from 'history/PathUtils';\nimport Router from './Router';\n\nvar normalizeLocation = function normalizeLocation(object) {\n var _object$pathname = object.pathname,\n pathname = _object$pathname === undefined ? '/' : _object$pathname,\n _object$search = object.search,\n search = _object$search === undefined ? '' : _object$search,\n _object$hash = object.hash,\n hash = _object$hash === undefined ? '' : _object$hash;\n\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n};\n\nvar addBasename = function addBasename(basename, location) {\n if (!basename) return location;\n\n return _extends({}, location, {\n pathname: addLeadingSlash(basename) + location.pathname\n });\n};\n\nvar stripBasename = function stripBasename(basename, location) {\n if (!basename) return location;\n\n var base = addLeadingSlash(basename);\n\n if (location.pathname.indexOf(base) !== 0) return location;\n\n return _extends({}, location, {\n pathname: location.pathname.substr(base.length)\n });\n};\n\nvar createLocation = function createLocation(location) {\n return typeof location === 'string' ? parsePath(location) : normalizeLocation(location);\n};\n\nvar createURL = function createURL(location) {\n return typeof location === 'string' ? location : createPath(location);\n};\n\nvar staticHandler = function staticHandler(methodName) {\n return function () {\n invariant(false, 'You cannot %s with ', methodName);\n };\n};\n\nvar noop = function noop() {};\n\n/**\n * The public top-level API for a \"static\" , so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\n\nvar StaticRouter = function (_React$Component) {\n _inherits(StaticRouter, _React$Component);\n\n function StaticRouter() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, StaticRouter);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.createHref = function (path) {\n return addLeadingSlash(_this.props.basename + createURL(path));\n }, _this.handlePush = function (location) {\n var _this$props = _this.props,\n basename = _this$props.basename,\n context = _this$props.context;\n\n context.action = 'PUSH';\n context.location = addBasename(basename, createLocation(location));\n context.url = createURL(context.location);\n }, _this.handleReplace = function (location) {\n var _this$props2 = _this.props,\n basename = _this$props2.basename,\n context = _this$props2.context;\n\n context.action = 'REPLACE';\n context.location = addBasename(basename, createLocation(location));\n context.url = createURL(context.location);\n }, _this.handleListen = function () {\n return noop;\n }, _this.handleBlock = function () {\n return noop;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n StaticRouter.prototype.getChildContext = function getChildContext() {\n return {\n router: {\n staticContext: this.props.context\n }\n };\n };\n\n StaticRouter.prototype.componentWillMount = function componentWillMount() {\n warning(!this.props.history, ' ignores the history prop. To use a custom history, ' + 'use `import { Router }` instead of `import { StaticRouter as Router }`.');\n };\n\n StaticRouter.prototype.render = function render() {\n var _props = this.props,\n basename = _props.basename,\n context = _props.context,\n location = _props.location,\n props = _objectWithoutProperties(_props, ['basename', 'context', 'location']);\n\n var history = {\n createHref: this.createHref,\n action: 'POP',\n location: stripBasename(basename, createLocation(location)),\n push: this.handlePush,\n replace: this.handleReplace,\n go: staticHandler('go'),\n goBack: staticHandler('goBack'),\n goForward: staticHandler('goForward'),\n listen: this.handleListen,\n block: this.handleBlock\n };\n\n return React.createElement(Router, _extends({}, props, { history: history }));\n };\n\n return StaticRouter;\n}(React.Component);\n\nStaticRouter.propTypes = {\n basename: PropTypes.string,\n context: PropTypes.object.isRequired,\n location: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n};\nStaticRouter.defaultProps = {\n basename: '',\n location: '/'\n};\nStaticRouter.childContextTypes = {\n router: PropTypes.object.isRequired\n};\n\n\nexport default StaticRouter;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router/es/StaticRouter.js\n// module id = 460\n// module chunks = 0","// Written in this round about way for babel-transform-imports\nimport Switch from 'react-router/es/Switch';\n\nexport default Switch;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router-dom/es/Switch.js\n// module id = 461\n// module chunks = 0","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport warning from 'warning';\nimport invariant from 'invariant';\nimport matchPath from './matchPath';\n\n/**\n * The public API for rendering the first that matches.\n */\n\nvar Switch = function (_React$Component) {\n _inherits(Switch, _React$Component);\n\n function Switch() {\n _classCallCheck(this, Switch);\n\n return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n Switch.prototype.componentWillMount = function componentWillMount() {\n invariant(this.context.router, 'You should not use outside a ');\n };\n\n Switch.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n warning(!(nextProps.location && !this.props.location), ' elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.');\n\n warning(!(!nextProps.location && this.props.location), ' elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.');\n };\n\n Switch.prototype.render = function render() {\n var route = this.context.router.route;\n var children = this.props.children;\n\n var location = this.props.location || route.location;\n\n var match = void 0,\n child = void 0;\n React.Children.forEach(children, function (element) {\n if (!React.isValidElement(element)) return;\n\n var _element$props = element.props,\n pathProp = _element$props.path,\n exact = _element$props.exact,\n strict = _element$props.strict,\n sensitive = _element$props.sensitive,\n from = _element$props.from;\n\n var path = pathProp || from;\n\n if (match == null) {\n child = element;\n match = path ? matchPath(location.pathname, { path: path, exact: exact, strict: strict, sensitive: sensitive }) : route.match;\n }\n });\n\n return match ? React.cloneElement(child, { location: location, computedMatch: match }) : null;\n };\n\n return Switch;\n}(React.Component);\n\nSwitch.contextTypes = {\n router: PropTypes.shape({\n route: PropTypes.object.isRequired\n }).isRequired\n};\nSwitch.propTypes = {\n children: PropTypes.node,\n location: PropTypes.object\n};\n\n\nexport default Switch;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router/es/Switch.js\n// module id = 462\n// module chunks = 0","// Written in this round about way for babel-transform-imports\nimport matchPath from 'react-router/es/matchPath';\n\nexport default matchPath;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router-dom/es/matchPath.js\n// module id = 463\n// module chunks = 0","// Written in this round about way for babel-transform-imports\nimport withRouter from 'react-router/es/withRouter';\n\nexport default withRouter;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router-dom/es/withRouter.js\n// module id = 464\n// module chunks = 0","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport hoistStatics from 'hoist-non-react-statics';\nimport Route from './Route';\n\n/**\n * A public higher-order component to access the imperative API\n */\nvar withRouter = function withRouter(Component) {\n var C = function C(props) {\n var wrappedComponentRef = props.wrappedComponentRef,\n remainingProps = _objectWithoutProperties(props, ['wrappedComponentRef']);\n\n return React.createElement(Route, { render: function render(routeComponentProps) {\n return React.createElement(Component, _extends({}, remainingProps, routeComponentProps, { ref: wrappedComponentRef }));\n } });\n };\n\n C.displayName = 'withRouter(' + (Component.displayName || Component.name) + ')';\n C.WrappedComponent = Component;\n C.propTypes = {\n wrappedComponentRef: PropTypes.func\n };\n\n return hoistStatics(C, Component);\n};\n\nexport default withRouter;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-router/es/withRouter.js\n// module id = 465\n// module chunks = 0","import { combineReducers } from 'redux';\nimport PublishReducer from 'reducers/publish';\nimport ChannelReducer from 'reducers/channel';\nimport ShowReducer from 'reducers/show';\nimport SiteReducer from 'reducers/site';\n\nexport default combineReducers({\n channel: ChannelReducer,\n publish: PublishReducer,\n show : ShowReducer,\n site : SiteReducer,\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/index.js","import * as actions from 'constants/publish_action_types';\nimport { LOGIN } from 'constants/publish_channel_select_states';\nconst { publishing } = require('../../config/siteConfig.js');\n\nconst initialState = {\n disabled : publishing.disabled,\n disabledMessage : publishing.disabledMessage,\n publishInChannel : false,\n selectedChannel : LOGIN,\n showMetadataInputs: false,\n status : {\n status : null,\n message: null,\n },\n error: {\n file : null,\n url : null,\n channel : null,\n publishSubmit: null,\n },\n file : null,\n claim : '',\n metadata: {\n title : '',\n description: '',\n license : '',\n nsfw : false,\n },\n thumbnail: null,\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n case actions.FILE_SELECTED:\n return Object.assign({}, initialState, { // note: clears to initial state\n file: action.data,\n });\n case actions.FILE_CLEAR:\n return initialState;\n case actions.METADATA_UPDATE:\n return Object.assign({}, state, {\n metadata: Object.assign({}, state.metadata, {\n [action.data.name]: action.data.value,\n }),\n });\n case actions.CLAIM_UPDATE:\n return Object.assign({}, state, {\n claim: action.data,\n });\n case actions.SET_PUBLISH_IN_CHANNEL:\n return Object.assign({}, state, {\n publishInChannel: action.channel,\n });\n case actions.PUBLISH_STATUS_UPDATE:\n return Object.assign({}, state, {\n status: action.data,\n });\n case actions.ERROR_UPDATE:\n return Object.assign({}, state, {\n error: Object.assign({}, state.error, {\n [action.data.name]: action.data.value,\n }),\n });\n case actions.SELECTED_CHANNEL_UPDATE:\n return Object.assign({}, state, {\n selectedChannel: action.data,\n });\n case actions.TOGGLE_METADATA_INPUTS:\n return Object.assign({}, state, {\n showMetadataInputs: action.data,\n });\n case actions.THUMBNAIL_NEW:\n return Object.assign({}, state, {\n thumbnail: action.data,\n });\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/publish.js","import * as actions from 'constants/channel_action_types';\n\nconst initialState = {\n loggedInChannel: {\n name : null,\n shortId: null,\n longId : null,\n },\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n case actions.CHANNEL_UPDATE:\n return Object.assign({}, state, {\n loggedInChannel: action.data,\n });\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/channel.js","import * as actions from 'constants/show_action_types';\nimport { LOCAL_CHECK, ERROR } from 'constants/asset_display_states';\n\nconst initialState = {\n request: {\n error: null,\n type : null,\n id : null,\n },\n requestList : {},\n channelList : {},\n assetList : {},\n displayAsset: {\n error : null,\n status: LOCAL_CHECK,\n },\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n // handle request\n case actions.REQUEST_ERROR:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n error: action.data,\n }),\n });\n case actions.REQUEST_UPDATE:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n type: action.data.requestType,\n id : action.data.requestId,\n }),\n });\n // store requests\n case actions.REQUEST_LIST_ADD:\n return Object.assign({}, state, {\n requestList: Object.assign({}, state.requestList, {\n [action.data.id]: {\n error: action.data.error,\n key : action.data.key,\n },\n }),\n });\n // asset data\n case actions.ASSET_ADD:\n return Object.assign({}, state, {\n assetList: Object.assign({}, state.assetList, {\n [action.data.id]: {\n error : action.data.error,\n name : action.data.name,\n claimId : action.data.claimId,\n shortId : action.data.shortId,\n claimData: action.data.claimData,\n },\n }),\n });\n // channel data\n case actions.CHANNEL_ADD:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, {\n [action.data.id]: {\n name : action.data.name,\n longId : action.data.longId,\n shortId : action.data.shortId,\n claimsData: action.data.claimsData,\n },\n }),\n });\n case actions.CHANNEL_CLAIMS_UPDATE_SUCCESS:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, {\n [action.data.channelListId]: Object.assign({}, state.channelList[action.data.channelListId], {\n claimsData: action.data.claimsData,\n }),\n }),\n });\n // display an asset\n case actions.FILE_AVAILABILITY_UPDATE:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n status: action.data,\n }),\n });\n case actions.DISPLAY_ASSET_ERROR:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n error : action.data,\n status: ERROR,\n }),\n });\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/show.js","const siteConfig = require('../../config/siteConfig.js');\n\nconst {\n analytics: {\n googleId: googleAnalyticsId,\n },\n assetDefaults: {\n thumbnail: defaultThumbnail,\n description: defaultDescription,\n },\n details: {\n description,\n host,\n title,\n twitter,\n },\n} = siteConfig;\n\nconst initialState = {\n description,\n googleAnalyticsId,\n host,\n title,\n twitter,\n defaultDescription,\n defaultThumbnail,\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/site.js","function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nimport { is, check, object, createSetContextWarning } from './utils';\nimport { emitter } from './channel';\nimport { ident } from './utils';\nimport { runSaga } from './runSaga';\n\nexport default function sagaMiddlewareFactory() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var _ref$context = _ref.context,\n context = _ref$context === undefined ? {} : _ref$context,\n options = _objectWithoutProperties(_ref, ['context']);\n\n var sagaMonitor = options.sagaMonitor,\n logger = options.logger,\n onError = options.onError;\n\n\n if (is.func(options)) {\n if (process.env.NODE_ENV === 'production') {\n throw new Error('Saga middleware no longer accept Generator functions. Use sagaMiddleware.run instead');\n } else {\n throw new Error('You passed a function to the Saga middleware. You are likely trying to start a Saga by directly passing it to the middleware. This is no longer possible starting from 0.10.0. To run a Saga, you must do it dynamically AFTER mounting the middleware into the store.\\n Example:\\n import createSagaMiddleware from \\'redux-saga\\'\\n ... other imports\\n\\n const sagaMiddleware = createSagaMiddleware()\\n const store = createStore(reducer, applyMiddleware(sagaMiddleware))\\n sagaMiddleware.run(saga, ...args)\\n ');\n }\n }\n\n if (logger && !is.func(logger)) {\n throw new Error('`options.logger` passed to the Saga middleware is not a function!');\n }\n\n if (process.env.NODE_ENV === 'development' && options.onerror) {\n throw new Error('`options.onerror` was removed. Use `options.onError` instead.');\n }\n\n if (onError && !is.func(onError)) {\n throw new Error('`options.onError` passed to the Saga middleware is not a function!');\n }\n\n if (options.emitter && !is.func(options.emitter)) {\n throw new Error('`options.emitter` passed to the Saga middleware is not a function!');\n }\n\n function sagaMiddleware(_ref2) {\n var getState = _ref2.getState,\n dispatch = _ref2.dispatch;\n\n var sagaEmitter = emitter();\n sagaEmitter.emit = (options.emitter || ident)(sagaEmitter.emit);\n\n sagaMiddleware.run = runSaga.bind(null, {\n context: context,\n subscribe: sagaEmitter.subscribe,\n dispatch: dispatch,\n getState: getState,\n sagaMonitor: sagaMonitor,\n logger: logger,\n onError: onError\n });\n\n return function (next) {\n return function (action) {\n if (sagaMonitor && sagaMonitor.actionDispatched) {\n sagaMonitor.actionDispatched(action);\n }\n var result = next(action); // hit reducers\n sagaEmitter.emit(action);\n return result;\n };\n };\n }\n\n sagaMiddleware.run = function () {\n throw new Error('Before running a Saga, you must mount the Saga middleware on the Store using applyMiddleware');\n };\n\n sagaMiddleware.setContext = function (props) {\n check(props, is.object, createSetContextWarning('sagaMiddleware', props));\n object.assign(context, props);\n };\n\n return sagaMiddleware;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux-saga/es/internal/middleware.js\n// module id = 471\n// module chunks = 0","import fsmIterator, { qEnd, safeName } from './fsmIterator';\nimport { take, fork } from '../io';\nimport { END } from '../channel';\n\nexport default function takeEvery(patternOrChannel, worker) {\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var yTake = { done: false, value: take(patternOrChannel) };\n var yFork = function yFork(ac) {\n return { done: false, value: fork.apply(undefined, [worker].concat(args, [ac])) };\n };\n\n var action = void 0,\n setAction = function setAction(ac) {\n return action = ac;\n };\n\n return fsmIterator({\n q1: function q1() {\n return ['q2', yTake, setAction];\n },\n q2: function q2() {\n return action === END ? [qEnd] : ['q1', yFork(action)];\n }\n }, 'q1', 'takeEvery(' + safeName(patternOrChannel) + ', ' + worker.name + ')');\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux-saga/es/internal/sagaHelpers/takeEvery.js\n// module id = 472\n// module chunks = 0","import fsmIterator, { qEnd, safeName } from './fsmIterator';\nimport { cancel, take, fork } from '../io';\nimport { END } from '../channel';\n\nexport default function takeLatest(patternOrChannel, worker) {\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var yTake = { done: false, value: take(patternOrChannel) };\n var yFork = function yFork(ac) {\n return { done: false, value: fork.apply(undefined, [worker].concat(args, [ac])) };\n };\n var yCancel = function yCancel(task) {\n return { done: false, value: cancel(task) };\n };\n\n var task = void 0,\n action = void 0;\n var setTask = function setTask(t) {\n return task = t;\n };\n var setAction = function setAction(ac) {\n return action = ac;\n };\n\n return fsmIterator({\n q1: function q1() {\n return ['q2', yTake, setAction];\n },\n q2: function q2() {\n return action === END ? [qEnd] : task ? ['q3', yCancel(task)] : ['q1', yFork(action), setTask];\n },\n q3: function q3() {\n return ['q1', yFork(action), setTask];\n }\n }, 'q1', 'takeLatest(' + safeName(patternOrChannel) + ', ' + worker.name + ')');\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux-saga/es/internal/sagaHelpers/takeLatest.js\n// module id = 473\n// module chunks = 0","import fsmIterator, { qEnd, safeName } from './fsmIterator';\nimport { take, fork, actionChannel, call } from '../io';\nimport { END } from '../channel';\nimport { buffers } from '../buffers';\nimport { delay } from '../utils';\n\nexport default function throttle(delayLength, pattern, worker) {\n for (var _len = arguments.length, args = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n args[_key - 3] = arguments[_key];\n }\n\n var action = void 0,\n channel = void 0;\n\n var yActionChannel = { done: false, value: actionChannel(pattern, buffers.sliding(1)) };\n var yTake = function yTake() {\n return { done: false, value: take(channel) };\n };\n var yFork = function yFork(ac) {\n return { done: false, value: fork.apply(undefined, [worker].concat(args, [ac])) };\n };\n var yDelay = { done: false, value: call(delay, delayLength) };\n\n var setAction = function setAction(ac) {\n return action = ac;\n };\n var setChannel = function setChannel(ch) {\n return channel = ch;\n };\n\n return fsmIterator({\n q1: function q1() {\n return ['q2', yActionChannel, setChannel];\n },\n q2: function q2() {\n return ['q3', yTake(), setAction];\n },\n q3: function q3() {\n return action === END ? [qEnd] : ['q4', yFork(action)];\n },\n q4: function q4() {\n return ['q2', yDelay];\n }\n }, 'q1', 'throttle(' + safeName(pattern) + ', ' + worker.name + ')');\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/redux-saga/es/internal/sagaHelpers/throttle.js\n// module id = 474\n// module chunks = 0","import { all } from 'redux-saga/effects';\nimport { watchHandleShowPageUri } from './show_uri';\nimport { watchNewAssetRequest } from './show_asset';\nimport { watchNewChannelRequest, watchUpdateChannelClaims } from './show_channel';\nimport { watchFileIsRequested } from './file';\nimport { watchPublishStart } from './publish';\n\nexport default function * rootSaga () {\n yield all([\n watchHandleShowPageUri(),\n watchNewAssetRequest(),\n watchNewChannelRequest(),\n watchUpdateChannelClaims(),\n watchFileIsRequested(),\n watchPublishStart(),\n ]);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/index.js","import { call, put, takeLatest } from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { onRequestError, onNewChannelRequest, onNewAssetRequest } from 'actions/show';\nimport { newAssetRequest } from 'sagas/show_asset';\nimport { newChannelRequest } from 'sagas/show_channel';\nimport lbryUri from 'utils/lbryUri';\n\nfunction * parseAndUpdateIdentifierAndClaim (modifier, claim) {\n // this is a request for an asset\n // claim will be an asset claim\n // the identifier could be a channel or a claim id\n let isChannel, channelName, channelClaimId, claimId, claimName, extension;\n try {\n ({ isChannel, channelName, channelClaimId, claimId } = lbryUri.parseIdentifier(modifier));\n ({ claimName, extension } = lbryUri.parseClaim(claim));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // trigger an new action to update the store\n if (isChannel) {\n return yield call(newAssetRequest, onNewAssetRequest(claimName, null, channelName, channelClaimId, extension));\n };\n yield call(newAssetRequest, onNewAssetRequest(claimName, claimId, null, null, extension));\n}\nfunction * parseAndUpdateClaimOnly (claim) {\n // this could be a request for an asset or a channel page\n // claim could be an asset claim or a channel claim\n let isChannel, channelName, channelClaimId;\n try {\n ({ isChannel, channelName, channelClaimId } = lbryUri.parseIdentifier(claim));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // trigger an new action to update the store\n // return early if this request is for a channel\n if (isChannel) {\n return yield call(newChannelRequest, onNewChannelRequest(channelName, channelClaimId));\n }\n // if not for a channel, parse the claim request\n let claimName, extension;\n try {\n ({claimName, extension} = lbryUri.parseClaim(claim));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n yield call(newAssetRequest, onNewAssetRequest(claimName, null, null, null, extension));\n}\n\nexport function * handleShowPageUri (action) {\n const { identifier, claim } = action.data;\n if (identifier) {\n return yield call(parseAndUpdateIdentifierAndClaim, identifier, claim);\n }\n yield call(parseAndUpdateClaimOnly, claim);\n};\n\nexport function * watchHandleShowPageUri () {\n yield takeLatest(actions.HANDLE_SHOW_URI, handleShowPageUri);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/show_uri.js","import Request from 'utils/request';\n\nexport function getLongClaimId (host, name, modifier) {\n let body = {};\n // create request params\n if (modifier) {\n if (modifier.id) {\n body['claimId'] = modifier.id;\n } else {\n body['channelName'] = modifier.channel.name;\n body['channelClaimId'] = modifier.channel.id;\n }\n }\n body['claimName'] = name;\n const params = {\n method : 'POST',\n headers: { 'Content-Type': 'application/json' },\n body : JSON.stringify(body),\n };\n // create url\n const url = `${host}/api/claim/long-id`;\n // return the request promise\n return Request(url, params);\n};\n\nexport function getShortId (host, name, claimId) {\n const url = `${host}/api/claim/short-id/${claimId}/${name}`;\n return Request(url);\n};\n\nexport function getClaimData (host, name, claimId) {\n const url = `${host}/api/claim/data/${name}/${claimId}`;\n return Request(url);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/api/assetApi.js","(function(self) {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob();\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n };\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isDataView = function(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n };\n\n var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue+','+value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) { items.push(name); });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) { items.push(value); });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) { items.push([name, value]); });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n this._bodyInit = body;\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n };\n }\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'omit';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n }\n\n Request.prototype.clone = function() {\n return new Request(this, { body: this._bodyInit })\n };\n\n function decode(body) {\n var form = new FormData();\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n rawHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = 'status' in options ? options.status : 200;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = 'statusText' in options ? options.statusText : 'OK';\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''});\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n var xhr = new XMLHttpRequest();\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options));\n };\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.open(request.method, request.url, true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob';\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n };\n self.fetch.polyfill = true;\n})(typeof self !== 'undefined' ? self : this);\n\n/*\n * Rollup wraps up the whatwg-fetch code on ponyfill mode in\n * order to prevent it from adding fetch to the global object.\n */\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/cross-fetch/dist/browser-polyfill.js\n// module id = 479\n// module chunks = 0","import Request from 'utils/request';\n\nexport function getChannelData (host, id, name) {\n if (!id) id = 'none';\n const url = `${host}/api/channel/data/${name}/${id}`;\n return Request(url);\n};\n\nexport function getChannelClaims (host, longId, name, page) {\n if (!page) page = 1;\n const url = `${host}/api/channel/claims/${name}/${longId}/${page}`;\n return Request(url);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/api/channelApi.js","module.exports = {\n REGEXP_INVALID_CLAIM : /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS : /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR : '@',\n parseIdentifier : function (identifier) {\n const componentsRegex = new RegExp(\n '([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, value, modifierSeperator, modifier] = componentsRegex // eslint-disable-line no-unused-vars\n .exec(identifier)\n .map(match => match || null);\n\n // Validate and process name\n if (!value) {\n throw new Error(`Check your URL. No channel name provided before \"${modifierSeperator}\"`);\n }\n const isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n const channelName = isChannel ? value : null;\n let claimId;\n if (isChannel) {\n if (!channelName) {\n throw new Error('Check your URL. No channel name after \"@\".');\n }\n const nameBadChars = (channelName).match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error(`Check your URL. Invalid characters in channel name: \"${nameBadChars.join(', ')}\".`);\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n let channelClaimId;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error(`Check your URL. No modifier provided after separator \"${modifierSeperator}\"`);\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error(`Check your URL. The \"${modifierSeperator}\" modifier is not currently supported`);\n }\n }\n return {\n isChannel,\n channelName,\n channelClaimId: channelClaimId || null,\n claimId : claimId || null,\n };\n },\n parseClaim: function (name) {\n const componentsRegex = new RegExp(\n '([^:$#/.]*)' + // name (stops at the first extension)\n '([:$#.]?)([^/]*)' // extension separator, extension (stops at the first path separator or end)\n );\n const [proto, claimName, extensionSeperator, extension] = componentsRegex // eslint-disable-line no-unused-vars\n .exec(name)\n .map(match => match || null);\n\n // Validate and process name\n if (!claimName) {\n throw new Error('Check your URL. No claim name provided before \".\"');\n }\n const nameBadChars = (claimName).match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error(`Check your URL. Invalid characters in claim name: \"${nameBadChars.join(', ')}\".`);\n }\n // Validate and process extension\n if (extensionSeperator) {\n if (!extension) {\n throw new Error(`Check your URL. No file extension provided after separator \"${extensionSeperator}\".`);\n }\n if (extensionSeperator !== '.') {\n throw new Error(`Check your URL. The \"${extensionSeperator}\" separator is not supported in the claim name.`);\n }\n }\n return {\n claimName,\n extension: extension || null,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/lbryUri.js","import {call, put, select, takeLatest} from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { updateFileAvailability, updateDisplayAssetError } from 'actions/show';\nimport { UNAVAILABLE, AVAILABLE } from 'constants/asset_display_states';\nimport { checkFileAvailability, triggerClaimGet } from 'api/fileApi';\nimport { selectSiteHost } from 'selectors/site';\n\nfunction * retrieveFile (action) {\n const name = action.data.name;\n const claimId = action.data.claimId;\n const host = yield select(selectSiteHost);\n // see if the file is available\n let isAvailable;\n try {\n ({ data: isAvailable } = yield call(checkFileAvailability, claimId, host, name));\n } catch (error) {\n return yield put(updateDisplayAssetError(error.message));\n };\n if (isAvailable) {\n yield put(updateDisplayAssetError(null));\n return yield put(updateFileAvailability(AVAILABLE));\n }\n yield put(updateFileAvailability(UNAVAILABLE));\n // initiate get request for the file\n try {\n yield call(triggerClaimGet, claimId, host, name);\n } catch (error) {\n return yield put(updateDisplayAssetError(error.message));\n };\n yield put(updateFileAvailability(AVAILABLE));\n};\n\nexport function * watchFileIsRequested () {\n yield takeLatest(actions.FILE_REQUESTED, retrieveFile);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/file.js","import Request from 'utils/request';\n\nexport function checkFileAvailability (claimId, host, name) {\n const url = `${host}/api/file/availability/${name}/${claimId}`;\n return Request(url);\n}\n\nexport function triggerClaimGet (claimId, host, name) {\n const url = `${host}/api/claim/get/${name}/${claimId}`;\n return Request(url);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/api/fileApi.js","import { call, put, select, take, takeLatest } from 'redux-saga/effects';\nimport * as actions from 'constants/publish_action_types';\nimport * as publishStates from 'constants/publish_claim_states';\nimport { updateError, updatePublishStatus, clearFile } from 'actions/publish';\nimport { selectPublishState } from 'selectors/publish';\nimport { selectChannelState } from 'selectors/channel';\nimport { selectSiteState } from 'selectors/site';\nimport { validateChannelSelection, validatePublishParams } from 'utils/validate';\nimport { createPublishMetadata, createPublishFormData, createThumbnailUrl } from 'utils/publish';\nimport { makePublishRequestChannel } from 'channels/publish';\n\nfunction * publishFile (action) {\n const { history } = action.data;\n const { publishInChannel, selectedChannel, file, claim, metadata, thumbnailChannel, thumbnailChannelId, thumbnail, error: { url: urlError } } = yield select(selectPublishState);\n const { loggedInChannel } = yield select(selectChannelState);\n const { host } = yield select(selectSiteState);\n // validate the channel selection\n try {\n validateChannelSelection(publishInChannel, selectedChannel, loggedInChannel);\n } catch (error) {\n return yield put(updateError('channel', error.message));\n };\n // validate publish parameters\n try {\n validatePublishParams(file, claim, urlError);\n } catch (error) {\n return yield put(updateError('publishSubmit', error.message));\n }\n // create metadata\n let publishMetadata = createPublishMetadata(claim, file, metadata, publishInChannel, selectedChannel);\n if (thumbnail) {\n // add thumbnail to publish metadata\n publishMetadata['thumbnail'] = createThumbnailUrl(thumbnailChannel, thumbnailChannelId, claim, host);\n }\n // create form data for main publish\n const publishFormData = createPublishFormData(file, thumbnail, publishMetadata);\n // make the publish request\n const publishChannel = yield call(makePublishRequestChannel, publishFormData);\n while (true) {\n const {loadStart, progress, load, success, error} = yield take(publishChannel);\n if (error) {\n return yield put(updatePublishStatus(publishStates.FAILED, error.message));\n }\n if (success) {\n yield put(clearFile());\n return history.push(`/${success.data.claimId}/${success.data.name}`);\n }\n if (loadStart) {\n yield put(updatePublishStatus(publishStates.LOAD_START, null));\n }\n if (progress) {\n yield put(updatePublishStatus(publishStates.LOADING, `${progress}%`));\n }\n if (load) {\n yield put(updatePublishStatus(publishStates.PUBLISHING, null));\n }\n }\n};\n\nexport function * watchPublishStart () {\n yield takeLatest(actions.PUBLISH_START, publishFile);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/publish.js","export const selectPublishState = (state) => {\n return state.publish;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/selectors/publish.js","export const selectChannelState = (state) => {\n return state.channel;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/selectors/channel.js","export const validateChannelSelection = (publishInChannel, selectedChannel, loggedInChannel) => {\n if (publishInChannel && (selectedChannel !== loggedInChannel.name)) {\n throw new Error('Log in to a channel or select Anonymous');\n }\n};\n\nexport const validatePublishParams = (file, claim, urlError) => {\n if (!file) {\n throw new Error('Please choose a file');\n }\n if (!claim) {\n throw new Error('Please enter a URL');\n }\n if (urlError) {\n throw new Error('Fix the url');\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/validate.js","export const createPublishMetadata = (claim, { type }, { title, description, license, nsfw }, publishInChannel, selectedChannel) => {\n let metadata = {\n name: claim,\n title,\n description,\n license,\n nsfw,\n type,\n };\n if (publishInChannel) {\n metadata['channelName'] = selectedChannel;\n }\n return metadata;\n};\n\nexport const createPublishFormData = (file, thumbnail, metadata) => {\n let fd = new FormData();\n // append file\n fd.append('file', file);\n // append thumbnail\n if (thumbnail) {\n fd.append('thumbnail', thumbnail);\n }\n // append metadata\n for (let key in metadata) {\n if (metadata.hasOwnProperty(key)) {\n fd.append(key, metadata[key]);\n }\n }\n return fd;\n};\n\nexport const createThumbnailUrl = (channel, channelId, claim, host) => {\n return `${host}/${channel}:${channelId}/${claim}-thumb.png`;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/publish.js","import {buffers, END, eventChannel} from 'redux-saga';\n\nexport const makePublishRequestChannel = (fd) => {\n return eventChannel(emitter => {\n const uri = '/api/claim/publish';\n const xhr = new XMLHttpRequest();\n // add event listeners\n const onLoadStart = () => {\n emitter({loadStart: true});\n };\n const onProgress = (event) => {\n if (event.lengthComputable) {\n const percentage = Math.round((event.loaded * 100) / event.total);\n emitter({progress: percentage});\n }\n };\n const onLoad = () => {\n emitter({load: true});\n };\n xhr.upload.addEventListener('loadstart', onLoadStart);\n xhr.upload.addEventListener('progress', onProgress);\n xhr.upload.addEventListener('load', onLoad);\n // set state change handler\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n const response = JSON.parse(xhr.response);\n if ((xhr.status === 200) && response.success) {\n emitter({success: response});\n emitter(END);\n } else {\n emitter({error: new Error(response.message)});\n emitter(END);\n }\n }\n };\n // open and send\n xhr.open('POST', uri, true);\n xhr.send(fd);\n // clean up\n return () => {\n xhr.upload.removeEventListener('loadstart', onLoadStart);\n xhr.upload.removeEventListener('progress', onProgress);\n xhr.upload.removeEventListener('load', onLoad);\n xhr.onreadystatechange = null;\n xhr.abort();\n };\n }, buffers.sliding(2));\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/channels/publish.js","import React from 'react';\nimport GoogleAnalytics from 'react-ga';\nimport { withRouter } from 'react-router-dom';\nconst { analytics: { googleId } } = require('../../../config/siteConfig.js');\n\nGoogleAnalytics.initialize(googleId);\n\nclass GAListener extends React.Component {\n componentDidMount () {\n this.sendPageView(this.props.history.location);\n this.props.history.listen(this.sendPageView);\n }\n\n sendPageView (location) {\n GoogleAnalytics.set({ page: location.pathname });\n GoogleAnalytics.pageview(location.pathname);\n }\n\n render () {\n return this.props.children;\n }\n}\n\nexport default withRouter(GAListener);\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/GAListener/index.jsx","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"), require(\"prop-types\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\", \"prop-types\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"react\"), require(\"prop-types\")) : factory(root[\"react\"], root[\"prop-types\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_11__, __WEBPACK_EXTERNAL_MODULE_12__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 2);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = warn;\nfunction warn(s) {\n console.warn('[react-ga]', s);\n}\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = trim;\n// GA strings need to have leading/trailing whitespace trimmed, and not all\n// browsers have String.prototoype.trim().\n\nfunction trim(s) {\n return s.replace(/^\\s+|\\s+$/g, '');\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.testModeAPI = exports.OutboundLink = exports.plugin = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.initialize = initialize;\nexports.ga = ga;\nexports.set = set;\nexports.send = send;\nexports.pageview = pageview;\nexports.modalview = modalview;\nexports.timing = timing;\nexports.event = event;\nexports.exception = exception;\nexports.outboundLink = outboundLink;\n\nvar _format2 = __webpack_require__(3);\n\nvar _format3 = _interopRequireDefault(_format2);\n\nvar _removeLeadingSlash = __webpack_require__(6);\n\nvar _removeLeadingSlash2 = _interopRequireDefault(_removeLeadingSlash);\n\nvar _trim = __webpack_require__(1);\n\nvar _trim2 = _interopRequireDefault(_trim);\n\nvar _loadGA = __webpack_require__(7);\n\nvar _loadGA2 = _interopRequireDefault(_loadGA);\n\nvar _warn = __webpack_require__(0);\n\nvar _warn2 = _interopRequireDefault(_warn);\n\nvar _log = __webpack_require__(8);\n\nvar _log2 = _interopRequireDefault(_log);\n\nvar _testModeAPI = __webpack_require__(9);\n\nvar _testModeAPI2 = _interopRequireDefault(_testModeAPI);\n\nvar _OutboundLink = __webpack_require__(10);\n\nvar _OutboundLink2 = _interopRequireDefault(_OutboundLink);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /**\n * React Google Analytics Module\n *\n * @package react-ga\n * @author Adam Lofting \n * Atul Varma \n */\n\n/**\n * Utilities\n */\n\n\nvar _debug = false;\nvar _titleCase = true;\nvar _testMode = false;\n\nvar internalGa = function internalGa() {\n var _window;\n\n if (_testMode) return _testModeAPI2.default.ga.apply(_testModeAPI2.default, arguments);\n if (!window.ga) return (0, _warn2.default)('ReactGA.initialize must be called first or GoogleAnalytics should be loaded manually');\n return (_window = window).ga.apply(_window, arguments);\n};\n\nfunction _format(s) {\n return (0, _format3.default)(s, _titleCase);\n}\n\nfunction _gaCommand(trackerNames) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var command = args[0];\n if (typeof internalGa === 'function') {\n if (typeof command !== 'string') {\n (0, _warn2.default)('ga command must be a string');\n return;\n }\n\n internalGa.apply(undefined, args);\n if (Array.isArray(trackerNames)) {\n trackerNames.forEach(function (name) {\n internalGa.apply(undefined, _toConsumableArray([name + '.' + command].concat(args.slice(1))));\n });\n }\n }\n}\n\nfunction _initialize(gaTrackingID, options) {\n if (!gaTrackingID) {\n (0, _warn2.default)('gaTrackingID is required in initialize()');\n return;\n }\n\n if (options) {\n if (options.debug && options.debug === true) {\n _debug = true;\n }\n\n if (options.titleCase === false) {\n _titleCase = false;\n }\n }\n\n if (options && options.gaOptions) {\n internalGa('create', gaTrackingID, options.gaOptions);\n } else {\n internalGa('create', gaTrackingID, 'auto');\n }\n}\n\nfunction initialize(configsOrTrackingId, options) {\n if (options && options.testMode === true) {\n _testMode = true;\n } else {\n if (typeof window === 'undefined') {\n return false;\n }\n\n (0, _loadGA2.default)(options);\n }\n\n if (Array.isArray(configsOrTrackingId)) {\n configsOrTrackingId.forEach(function (config) {\n if ((typeof config === 'undefined' ? 'undefined' : _typeof(config)) !== 'object') {\n (0, _warn2.default)('All configs must be an object');\n return;\n }\n _initialize(config.trackingId, config);\n });\n } else {\n _initialize(configsOrTrackingId, options);\n }\n return true;\n}\n\n/**\n * ga:\n * Returns the original GA object.\n */\nfunction ga() {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (args.length > 0) {\n internalGa.apply(undefined, args);\n if (_debug) {\n (0, _log2.default)('called ga(\\'arguments\\');');\n (0, _log2.default)('with arguments: ' + JSON.stringify(args));\n }\n }\n\n return window.ga;\n}\n\n/**\n * set:\n * GA tracker set method\n * @param {Object} fieldsObject - a field/value pair or a group of field/value pairs on the tracker\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\nfunction set(fieldsObject, trackerNames) {\n if (!fieldsObject) {\n (0, _warn2.default)('`fieldsObject` is required in .set()');\n return;\n }\n\n if ((typeof fieldsObject === 'undefined' ? 'undefined' : _typeof(fieldsObject)) !== 'object') {\n (0, _warn2.default)('Expected `fieldsObject` arg to be an Object');\n return;\n }\n\n if (Object.keys(fieldsObject).length === 0) {\n (0, _warn2.default)('empty `fieldsObject` given to .set()');\n }\n\n _gaCommand(trackerNames, 'set', fieldsObject);\n\n if (_debug) {\n (0, _log2.default)('called ga(\\'set\\', fieldsObject);');\n (0, _log2.default)('with fieldsObject: ' + JSON.stringify(fieldsObject));\n }\n}\n\n/**\n * send:\n * Clone of the low level `ga.send` method\n * WARNING: No validations will be applied to this\n * @param {Object} fieldObject - field object for tracking different analytics\n * @param {Array} trackerNames - trackers to send the command to\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\nfunction send(fieldObject, trackerNames) {\n _gaCommand(trackerNames, 'send', fieldObject);\n if (_debug) {\n (0, _log2.default)('called ga(\\'send\\', fieldObject);');\n (0, _log2.default)('with fieldObject: ' + JSON.stringify(fieldObject));\n (0, _log2.default)('with trackers: ' + JSON.stringify(trackerNames));\n }\n}\n\n/**\n * pageview:\n * Basic GA pageview tracking\n * @param {String} path - the current page page e.g. '/about'\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n * @param {String} title - (optional) the page title e. g. 'My Website'\n */\nfunction pageview(rawPath, trackerNames, title) {\n if (!rawPath) {\n (0, _warn2.default)('path is required in .pageview()');\n return;\n }\n\n var path = (0, _trim2.default)(rawPath);\n if (path === '') {\n (0, _warn2.default)('path cannot be an empty string in .pageview()');\n return;\n }\n\n var extraFields = {};\n if (title) {\n extraFields.title = title;\n }\n\n if (typeof ga === 'function') {\n _gaCommand(trackerNames, 'send', _extends({\n hitType: 'pageview',\n page: path\n }, extraFields));\n\n if (_debug) {\n (0, _log2.default)('called ga(\\'send\\', \\'pageview\\', path);');\n var extraLog = '';\n if (title) {\n extraLog = ' and title: ' + title;\n }\n (0, _log2.default)('with path: ' + path + extraLog);\n }\n }\n}\n\n/**\n * modalview:\n * a proxy to basic GA pageview tracking to consistently track\n * modal views that are an equivalent UX to a traditional pageview\n * @param {String} modalName e.g. 'add-or-edit-club'\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\nfunction modalview(rawModalName, trackerNames) {\n if (!rawModalName) {\n (0, _warn2.default)('modalName is required in .modalview(modalName)');\n return;\n }\n\n var modalName = (0, _removeLeadingSlash2.default)((0, _trim2.default)(rawModalName));\n\n if (modalName === '') {\n (0, _warn2.default)('modalName cannot be an empty string or a single / in .modalview()');\n return;\n }\n\n if (typeof ga === 'function') {\n var path = '/modal/' + modalName;\n _gaCommand(trackerNames, 'send', 'pageview', path);\n\n if (_debug) {\n (0, _log2.default)('called ga(\\'send\\', \\'pageview\\', path);');\n (0, _log2.default)('with path: ' + path);\n }\n }\n}\n\n/**\n * timing:\n * GA timing\n * @param args.category {String} required\n * @param args.variable {String} required\n * @param args.value {Int} required\n * @param args.label {String} required\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\nfunction timing() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n category = _ref.category,\n variable = _ref.variable,\n value = _ref.value,\n label = _ref.label;\n\n var trackerNames = arguments[1];\n\n if (typeof ga === 'function') {\n if (!category || !variable || !value || typeof value !== 'number') {\n (0, _warn2.default)('args.category, args.variable ' + 'AND args.value are required in timing() ' + 'AND args.value has to be a number');\n return;\n }\n\n // Required Fields\n var fieldObject = {\n hitType: 'timing',\n timingCategory: _format(category),\n timingVar: _format(variable),\n timingValue: value\n };\n\n if (label) {\n fieldObject.timingLabel = _format(label);\n }\n\n send(fieldObject, trackerNames);\n }\n}\n\n/**\n * event:\n * GA event tracking\n * @param args.category {String} required\n * @param args.action {String} required\n * @param args.label {String} optional\n * @param args.value {Int} optional\n * @param args.nonInteraction {boolean} optional\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\nfunction event() {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var trackerNames = arguments[1];\n\n var category = _ref2.category,\n action = _ref2.action,\n label = _ref2.label,\n value = _ref2.value,\n nonInteraction = _ref2.nonInteraction,\n transport = _ref2.transport,\n args = _objectWithoutProperties(_ref2, ['category', 'action', 'label', 'value', 'nonInteraction', 'transport']);\n\n if (typeof ga === 'function') {\n // Simple Validation\n if (!category || !action) {\n (0, _warn2.default)('args.category AND args.action are required in event()');\n return;\n }\n\n // Required Fields\n var fieldObject = {\n hitType: 'event',\n eventCategory: _format(category),\n eventAction: _format(action)\n };\n\n // Optional Fields\n if (label) {\n fieldObject.eventLabel = _format(label);\n }\n\n if (typeof value !== 'undefined') {\n if (typeof value !== 'number') {\n (0, _warn2.default)('Expected `args.value` arg to be a Number.');\n } else {\n fieldObject.eventValue = value;\n }\n }\n\n if (typeof nonInteraction !== 'undefined') {\n if (typeof nonInteraction !== 'boolean') {\n (0, _warn2.default)('`args.nonInteraction` must be a boolean.');\n } else {\n fieldObject.nonInteraction = nonInteraction;\n }\n }\n\n if (typeof transport !== 'undefined') {\n if (typeof transport !== 'string') {\n (0, _warn2.default)('`args.transport` must be a string.');\n } else {\n if (['beacon', 'xhr', 'image'].indexOf(transport) === -1) {\n (0, _warn2.default)('`args.transport` must be either one of these values: `beacon`, `xhr` or `image`');\n }\n\n fieldObject.transport = transport;\n }\n }\n\n Object.keys(args).filter(function (key) {\n return key.substr(0, 'dimension'.length) === 'dimension';\n }).forEach(function (key) {\n fieldObject[key] = args[key];\n });\n\n Object.keys(args).filter(function (key) {\n return key.substr(0, 'metric'.length) === 'metric';\n }).forEach(function (key) {\n fieldObject[key] = args[key];\n });\n\n // Send to GA\n send(fieldObject, trackerNames);\n }\n}\n\n/**\n * exception:\n * GA exception tracking\n * @param args.description {String} optional\n * @param args.fatal {boolean} optional\n * @param {Array} trackerNames - (optional) a list of extra trackers to run the command on\n */\nfunction exception(_ref3, trackerNames) {\n var description = _ref3.description,\n fatal = _ref3.fatal;\n\n if (typeof ga === 'function') {\n // Required Fields\n var fieldObject = {\n hitType: 'exception'\n };\n\n // Optional Fields\n if (description) {\n fieldObject.exDescription = _format(description);\n }\n\n if (typeof fatal !== 'undefined') {\n if (typeof fatal !== 'boolean') {\n (0, _warn2.default)('`args.fatal` must be a boolean.');\n } else {\n fieldObject.exFatal = fatal;\n }\n }\n\n // Send to GA\n send(fieldObject, trackerNames);\n }\n}\n\nvar plugin = exports.plugin = {\n /**\n * require:\n * GA requires a plugin\n * @param name {String} e.g. 'ecommerce' or 'myplugin'\n * @param options {Object} optional e.g {path: '/log', debug: true}\n */\n require: function require(rawName, options) {\n if (typeof ga === 'function') {\n // Required Fields\n if (!rawName) {\n (0, _warn2.default)('`name` is required in .require()');\n return;\n }\n\n var name = (0, _trim2.default)(rawName);\n if (name === '') {\n (0, _warn2.default)('`name` cannot be an empty string in .require()');\n return;\n }\n\n // Optional Fields\n if (options) {\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) !== 'object') {\n (0, _warn2.default)('Expected `options` arg to be an Object');\n return;\n }\n\n if (Object.keys(options).length === 0) {\n (0, _warn2.default)('Empty `options` given to .require()');\n }\n\n ga('require', name, options);\n\n if (_debug) {\n (0, _log2.default)('called ga(\\'require\\', \\'' + name + '\\', ' + JSON.stringify(options));\n }\n } else {\n ga('require', name);\n\n if (_debug) {\n (0, _log2.default)('called ga(\\'require\\', \\'' + name + '\\');');\n }\n }\n }\n },\n\n /**\n * execute:\n * GA execute action for plugin\n * Takes variable number of arguments\n * @param pluginName {String} e.g. 'ecommerce' or 'myplugin'\n * @param action {String} e.g. 'addItem' or 'myCustomAction'\n * @param actionType {String} optional e.g. 'detail'\n * @param payload {Object} optional e.g { id: '1x5e', name : 'My product to track' }\n */\n execute: function execute(pluginName, action) {\n var payload = void 0;\n var actionType = void 0;\n\n if ((arguments.length <= 2 ? 0 : arguments.length - 2) === 1) {\n payload = arguments.length <= 2 ? undefined : arguments[2];\n } else {\n actionType = arguments.length <= 2 ? undefined : arguments[2];\n payload = arguments.length <= 3 ? undefined : arguments[3];\n }\n\n if (typeof ga === 'function') {\n if (typeof pluginName !== 'string') {\n (0, _warn2.default)('Expected `pluginName` arg to be a String.');\n } else if (typeof action !== 'string') {\n (0, _warn2.default)('Expected `action` arg to be a String.');\n } else {\n var command = pluginName + ':' + action;\n payload = payload || null;\n if (actionType && payload) {\n ga(command, actionType, payload);\n if (_debug) {\n (0, _log2.default)('called ga(\\'' + command + '\\');');\n (0, _log2.default)('actionType: \"' + actionType + '\" with payload: ' + JSON.stringify(payload));\n }\n } else if (payload) {\n ga(command, payload);\n if (_debug) {\n (0, _log2.default)('called ga(\\'' + command + '\\');');\n (0, _log2.default)('with payload: ' + JSON.stringify(payload));\n }\n } else {\n ga(command);\n if (_debug) {\n (0, _log2.default)('called ga(\\'' + command + '\\');');\n }\n }\n }\n }\n }\n};\n\n/**\n * outboundLink:\n * GA outboundLink tracking\n * @param args.label {String} e.g. url, or 'Create an Account'\n * @param {function} hitCallback - Called after processing a hit.\n */\nfunction outboundLink(args, hitCallback, trackerNames) {\n if (typeof hitCallback !== 'function') {\n (0, _warn2.default)('hitCallback function is required');\n return;\n }\n\n if (typeof ga === 'function') {\n // Simple Validation\n if (!args || !args.label) {\n (0, _warn2.default)('args.label is required in outboundLink()');\n return;\n }\n\n // Required Fields\n var fieldObject = {\n hitType: 'event',\n eventCategory: 'Outbound',\n eventAction: 'Click',\n eventLabel: _format(args.label)\n };\n\n var safetyCallbackCalled = false;\n var safetyCallback = function safetyCallback() {\n // This prevents a delayed response from GA\n // causing hitCallback from being fired twice\n safetyCallbackCalled = true;\n\n hitCallback();\n };\n\n // Using a timeout to ensure the execution of critical application code\n // in the case when the GA server might be down\n // or an ad blocker prevents sending the data\n\n // register safety net timeout:\n var t = setTimeout(safetyCallback, 250);\n\n var clearableCallbackForGA = function clearableCallbackForGA() {\n clearTimeout(t);\n if (!safetyCallbackCalled) {\n hitCallback();\n }\n };\n\n fieldObject.hitCallback = clearableCallbackForGA;\n\n // Send to GA\n send(fieldObject, trackerNames);\n } else {\n // if ga is not defined, return the callback so the application\n // continues to work as expected\n setTimeout(hitCallback, 0);\n }\n}\n\n_OutboundLink2.default.origTrackLink = _OutboundLink2.default.trackLink;\n_OutboundLink2.default.trackLink = outboundLink;\nvar OutboundLink = exports.OutboundLink = _OutboundLink2.default;\nvar testModeAPI = exports.testModeAPI = _testModeAPI2.default;\n\nexports.default = {\n initialize: initialize,\n ga: ga,\n set: set,\n send: send,\n pageview: pageview,\n modalview: modalview,\n timing: timing,\n event: event,\n exception: exception,\n plugin: plugin,\n outboundLink: outboundLink,\n OutboundLink: OutboundLink,\n testModeAPI: _testModeAPI2.default\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = format;\n\nvar _mightBeEmail = __webpack_require__(4);\n\nvar _mightBeEmail2 = _interopRequireDefault(_mightBeEmail);\n\nvar _toTitleCase = __webpack_require__(5);\n\nvar _toTitleCase2 = _interopRequireDefault(_toTitleCase);\n\nvar _warn = __webpack_require__(0);\n\nvar _warn2 = _interopRequireDefault(_warn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar redacted = 'REDACTED (Potential Email Address)';\n\nfunction format(s, titleCase) {\n if ((0, _mightBeEmail2.default)(s)) {\n (0, _warn2.default)('This arg looks like an email address, redacting.');\n return redacted;\n }\n\n if (titleCase) {\n return (0, _toTitleCase2.default)(s);\n }\n\n return s;\n}\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = mightBeEmail;\n// See if s could be an email address. We don't want to send personal data like email.\n// https://support.google.com/analytics/answer/2795983?hl=en\nfunction mightBeEmail(s) {\n // There's no point trying to validate rfc822 fully, just look for ...@...\n return (/[^@]+@[^@]+/.test(s)\n );\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = toTitleCase;\n\nvar _trim = __webpack_require__(1);\n\nvar _trim2 = _interopRequireDefault(_trim);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\\.?|via)$/i; /**\n * To Title Case 2.1 - http://individed.com/code/to-title-case/\n * Copyright 2008-2013 David Gouch. Licensed under the MIT License.\n * https://github.com/gouch/to-title-case\n */\n\nfunction toTitleCase(string) {\n return (0, _trim2.default)(string).replace(/[A-Za-z0-9\\u00C0-\\u00FF]+[^\\s-]*/g, function (match, index, title) {\n if (index > 0 && index + match.length !== title.length && match.search(smallWords) > -1 && title.charAt(index - 2) !== ':' && (title.charAt(index + match.length) !== '-' || title.charAt(index - 1) === '-') && title.charAt(index - 1).search(/[^\\s-]/) < 0) {\n return match.toLowerCase();\n }\n\n if (match.substr(1).search(/[A-Z]|\\../) > -1) {\n return match;\n }\n\n return match.charAt(0).toUpperCase() + match.substr(1);\n });\n}\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = removeLeadingSlash;\nfunction removeLeadingSlash(string) {\n if (string.substring(0, 1) === '/') {\n return string.substring(1);\n }\n\n return string;\n}\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (options) {\n // https://developers.google.com/analytics/devguides/collection/analyticsjs/\n /* eslint-disable */\n (function (i, s, o, g, r, a, m) {\n i['GoogleAnalyticsObject'] = r;\n i[r] = i[r] || function () {\n (i[r].q = i[r].q || []).push(arguments);\n }, i[r].l = 1 * new Date();\n a = s.createElement(o), m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', options && options.gaAddress ? options.gaAddress : 'https://www.google-analytics.com/analytics.js', 'ga');\n /* eslint-enable */\n};\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = log;\nfunction log(s) {\n console.info('[react-ga]', s);\n}\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar gaCalls = exports.gaCalls = [];\n\nexports.default = {\n calls: gaCalls,\n ga: function ga() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n gaCalls.push([].concat(args));\n }\n};\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(11);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(12);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _warn = __webpack_require__(0);\n\nvar _warn2 = _interopRequireDefault(_warn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar NEWTAB = '_blank';\nvar MIDDLECLICK = 1;\n\nvar OutboundLink = function (_Component) {\n _inherits(OutboundLink, _Component);\n\n function OutboundLink() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, OutboundLink);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = OutboundLink.__proto__ || Object.getPrototypeOf(OutboundLink)).call.apply(_ref, [this].concat(args))), _this), _this.handleClick = function (event) {\n var _this$props = _this.props,\n target = _this$props.target,\n eventLabel = _this$props.eventLabel,\n to = _this$props.to,\n onClick = _this$props.onClick;\n\n var eventMeta = { label: eventLabel };\n var sameTarget = target !== NEWTAB;\n var normalClick = !(event.ctrlKey || event.shiftKey || event.metaKey || event.button === MIDDLECLICK);\n\n if (sameTarget && normalClick) {\n event.preventDefault();\n OutboundLink.trackLink(eventMeta, function () {\n window.location.href = to;\n });\n } else {\n OutboundLink.trackLink(eventMeta, function () {});\n }\n\n if (onClick) {\n onClick(event);\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(OutboundLink, [{\n key: 'render',\n value: function render() {\n var props = _extends({}, this.props, {\n href: this.props.to,\n onClick: this.handleClick\n });\n delete props.eventLabel;\n return _react2.default.createElement('a', props);\n }\n }]);\n\n return OutboundLink;\n}(_react.Component);\n\nOutboundLink.propTypes = {\n eventLabel: _propTypes2.default.string.isRequired,\n target: _propTypes2.default.string,\n to: _propTypes2.default.string,\n onClick: _propTypes2.default.func\n};\nOutboundLink.defaultProps = {\n target: null,\n to: null,\n onClick: null\n};\n\nOutboundLink.trackLink = function () {\n (0, _warn2.default)('ga tracking not enabled');\n};\n\nexports.default = OutboundLink;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_11__;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_12__;\n\n/***/ })\n/******/ ]);\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-ga/dist/react-ga.js\n// module id = 491\n// module chunks = 0","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport HomePage from 'pages/HomePage'; // or use the provided local homepage\nimport AboutPage from 'pages/AboutPage';\nimport LoginPage from 'pages/LoginPage';\nimport ShowPage from 'pages/ShowPage';\nimport FourOhFourPage from 'containers/FourOhFourPage';\n\nconst App = () => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default App;\n\n\n\n// WEBPACK FOOTER //\n// ./client/app.js","import React from 'react';\nimport SEO from 'components/SEO';\nimport NavBar from 'containers/NavBar';\nimport PublishTool from 'containers/PublishTool';\n\nclass HomePage extends React.Component {\n render () {\n return (\n
\n \n \n
\n \n
\n
\n );\n }\n};\n\nexport default HomePage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/HomePage/index.jsx","import React from 'react';\nimport Helmet from 'react-helmet';\nimport PropTypes from 'prop-types';\n\nimport { createPageTitle } from 'utils/pageTitle';\nimport { createMetaTags } from 'utils/metaTags';\nimport { createCanonicalLink } from 'utils/canonicalLink';\n\nclass SEO extends React.Component {\n render () {\n // props from state\n const { defaultDescription, defaultThumbnail, siteDescription, siteHost, siteTitle, siteTwitter } = this.props;\n // props from parent\n const { asset, channel, pageUri } = this.props;\n let { pageTitle } = this.props;\n // create page title, tags, and canonical link\n pageTitle = createPageTitle(siteTitle, pageTitle);\n const metaTags = createMetaTags(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail);\n const canonicalLink = createCanonicalLink(asset, channel, pageUri, siteHost);\n // render results\n return (\n \n );\n }\n};\n\nSEO.propTypes = {\n pageTitle: PropTypes.string,\n pageUri : PropTypes.string,\n channel : PropTypes.object,\n asset : PropTypes.object,\n};\n\nexport default SEO;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/SEO/view.jsx","'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar React = require('react');\nvar React__default = _interopDefault(React);\nvar ExecutionEnvironment = _interopDefault(require('exenv'));\nvar shallowEqual = _interopDefault(require('shallowequal'));\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\n if (typeof reducePropsToState !== 'function') {\n throw new Error('Expected reducePropsToState to be a function.');\n }\n if (typeof handleStateChangeOnClient !== 'function') {\n throw new Error('Expected handleStateChangeOnClient to be a function.');\n }\n if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\n }\n\n var mountedInstances = [];\n var state = void 0;\n\n function emitChange() {\n state = reducePropsToState(mountedInstances.map(function (instance) {\n return instance.props;\n }));\n\n if (SideEffect.canUseDOM) {\n handleStateChangeOnClient(state);\n } else if (mapStateOnServer) {\n state = mapStateOnServer(state);\n }\n }\n\n var SideEffect = function (_Component) {\n _inherits(SideEffect, _Component);\n\n function SideEffect() {\n _classCallCheck(this, SideEffect);\n\n return _possibleConstructorReturn(this, _Component.apply(this, arguments));\n }\n\n // Try to use displayName of wrapped component\n SideEffect.peek = function peek() {\n return state;\n };\n\n // Expose canUseDOM so tests can monkeypatch it\n\n\n SideEffect.rewind = function rewind() {\n if (SideEffect.canUseDOM) {\n throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n }\n\n var recordedState = state;\n state = undefined;\n mountedInstances = [];\n return recordedState;\n };\n\n SideEffect.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !shallowEqual(nextProps, this.props);\n };\n\n SideEffect.prototype.componentWillMount = function componentWillMount() {\n mountedInstances.push(this);\n emitChange();\n };\n\n SideEffect.prototype.componentDidUpdate = function componentDidUpdate() {\n emitChange();\n };\n\n SideEffect.prototype.componentWillUnmount = function componentWillUnmount() {\n var index = mountedInstances.indexOf(this);\n mountedInstances.splice(index, 1);\n emitChange();\n };\n\n SideEffect.prototype.render = function render() {\n return React__default.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(React.Component);\n\n SideEffect.displayName = 'SideEffect(' + getDisplayName(WrappedComponent) + ')';\n SideEffect.canUseDOM = ExecutionEnvironment.canUseDOM;\n\n\n return SideEffect;\n };\n}\n\nmodule.exports = withSideEffect;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-side-effect/lib/index.js\n// module id = 495\n// module chunks = 0","/*!\n Copyright (c) 2015 Jed Watson.\n Based on code that is Copyright 2013-2015, Facebook, Inc.\n All rights reserved.\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar canUseDOM = !!(\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.document &&\n\t\twindow.document.createElement\n\t);\n\n\tvar ExecutionEnvironment = {\n\n\t\tcanUseDOM: canUseDOM,\n\n\t\tcanUseWorkers: typeof Worker !== 'undefined',\n\n\t\tcanUseEventListeners:\n\t\t\tcanUseDOM && !!(window.addEventListener || window.attachEvent),\n\n\t\tcanUseViewport: canUseDOM && !!window.screen\n\n\t};\n\n\tif (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\tdefine(function () {\n\t\t\treturn ExecutionEnvironment;\n\t\t});\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = ExecutionEnvironment;\n\t} else {\n\t\twindow.ExecutionEnvironment = ExecutionEnvironment;\n\t}\n\n}());\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/exenv/index.js\n// module id = 496\n// module chunks = 0","module.exports = function shallowEqual(objA, objB, compare, compareContext) {\n\n var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n if(ret !== void 0) {\n return !!ret;\n }\n\n if(objA === objB) {\n return true;\n }\n\n if(typeof objA !== 'object' || !objA ||\n typeof objB !== 'object' || !objB) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if(keysA.length !== keysB.length) {\n return false;\n }\n\n var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n\n // Test for A's keys different from B.\n for(var idx = 0; idx < keysA.length; idx++) {\n\n var key = keysA[idx];\n\n if(!bHasOwnProperty(key)) {\n return false;\n }\n\n var valueA = objA[key];\n var valueB = objB[key];\n\n ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n if(ret === false ||\n ret === void 0 && valueA !== valueB) {\n return false;\n }\n\n }\n\n return true;\n\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/shallowequal/index.js\n// module id = 497\n// module chunks = 0","var pSlice = Array.prototype.slice;\nvar objectKeys = require('./lib/keys.js');\nvar isArguments = require('./lib/is_arguments.js');\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n if (!opts) opts = {};\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n\n } else if (actual instanceof Date && expected instanceof Date) {\n return actual.getTime() === expected.getTime();\n\n // 7.3. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n return opts.strict ? actual === expected : actual == expected;\n\n // 7.4. For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else {\n return objEquiv(actual, expected, opts);\n }\n}\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') return false;\n return true;\n}\n\nfunction objEquiv(a, b, opts) {\n var i, key;\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n return false;\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) return false;\n //~~~I've managed to break Object.keys through screwy arguments passing.\n // Converting to array solves the problem.\n if (isArguments(a)) {\n if (!isArguments(b)) {\n return false;\n }\n a = pSlice.call(a);\n b = pSlice.call(b);\n return deepEqual(a, b, opts);\n }\n if (isBuffer(a)) {\n if (!isBuffer(b)) {\n return false;\n }\n if (a.length !== b.length) return false;\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n try {\n var ka = objectKeys(a),\n kb = objectKeys(b);\n } catch (e) {//happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length != kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) return false;\n }\n return typeof a === typeof b;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/deep-equal/index.js\n// module id = 498\n// module chunks = 0","exports = module.exports = typeof Object.keys === 'function'\n ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/deep-equal/lib/keys.js\n// module id = 499\n// module chunks = 0","var supportsArgumentsClass = (function(){\n return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n return object &&\n typeof object == 'object' &&\n typeof object.length == 'number' &&\n Object.prototype.hasOwnProperty.call(object, 'callee') &&\n !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n false;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/deep-equal/lib/is_arguments.js\n// module id = 500\n// module chunks = 0","exports.__esModule = true;\nexports.warn = exports.requestAnimationFrame = exports.reducePropsToState = exports.mapStateOnServer = exports.handleClientStateChange = exports.convertReactPropstoHtmlAttributes = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _objectAssign = require(\"object-assign\");\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nvar _HelmetConstants = require(\"./HelmetConstants.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar encodeSpecialCharacters = function encodeSpecialCharacters(str) {\n var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (encode === false) {\n return String(str);\n }\n\n return String(str).replace(/&/g, \"&\").replace(//g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n};\n\nvar getTitleFromPropsList = function getTitleFromPropsList(propsList) {\n var innermostTitle = getInnermostProperty(propsList, _HelmetConstants.TAG_NAMES.TITLE);\n var innermostTemplate = getInnermostProperty(propsList, _HelmetConstants.HELMET_PROPS.TITLE_TEMPLATE);\n\n if (innermostTemplate && innermostTitle) {\n // use function arg to avoid need to escape $ characters\n return innermostTemplate.replace(/%s/g, function () {\n return innermostTitle;\n });\n }\n\n var innermostDefaultTitle = getInnermostProperty(propsList, _HelmetConstants.HELMET_PROPS.DEFAULT_TITLE);\n\n return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nvar getOnChangeClientState = function getOnChangeClientState(propsList) {\n return getInnermostProperty(propsList, _HelmetConstants.HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || function () {};\n};\n\nvar getAttributesFromPropsList = function getAttributesFromPropsList(tagType, propsList) {\n return propsList.filter(function (props) {\n return typeof props[tagType] !== \"undefined\";\n }).map(function (props) {\n return props[tagType];\n }).reduce(function (tagAttrs, current) {\n return _extends({}, tagAttrs, current);\n }, {});\n};\n\nvar getBaseTagFromPropsList = function getBaseTagFromPropsList(primaryAttributes, propsList) {\n return propsList.filter(function (props) {\n return typeof props[_HelmetConstants.TAG_NAMES.BASE] !== \"undefined\";\n }).map(function (props) {\n return props[_HelmetConstants.TAG_NAMES.BASE];\n }).reverse().reduce(function (innermostBaseTag, tag) {\n if (!innermostBaseTag.length) {\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n return innermostBaseTag.concat(tag);\n }\n }\n }\n\n return innermostBaseTag;\n }, []);\n};\n\nvar getTagsFromPropsList = function getTagsFromPropsList(tagName, primaryAttributes, propsList) {\n // Calculate list of tags, giving priority innermost component (end of the propslist)\n var approvedSeenTags = {};\n\n return propsList.filter(function (props) {\n if (Array.isArray(props[tagName])) {\n return true;\n }\n if (typeof props[tagName] !== \"undefined\") {\n warn(\"Helmet: \" + tagName + \" should be of type \\\"Array\\\". Instead found type \\\"\" + _typeof(props[tagName]) + \"\\\"\");\n }\n return false;\n }).map(function (props) {\n return props[tagName];\n }).reverse().reduce(function (approvedTags, instanceTags) {\n var instanceSeenTags = {};\n\n instanceTags.filter(function (tag) {\n var primaryAttributeKey = void 0;\n var keys = Object.keys(tag);\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n // Special rule with link tags, since rel and href are both primary tags, rel takes priority\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === _HelmetConstants.TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === _HelmetConstants.TAG_PROPERTIES.REL && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n primaryAttributeKey = lowerCaseAttributeKey;\n }\n // Special case for innerHTML which doesn't work lowercased\n if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === _HelmetConstants.TAG_PROPERTIES.INNER_HTML || attributeKey === _HelmetConstants.TAG_PROPERTIES.CSS_TEXT || attributeKey === _HelmetConstants.TAG_PROPERTIES.ITEM_PROP)) {\n primaryAttributeKey = attributeKey;\n }\n }\n\n if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n return false;\n }\n\n var value = tag[primaryAttributeKey].toLowerCase();\n\n if (!approvedSeenTags[primaryAttributeKey]) {\n approvedSeenTags[primaryAttributeKey] = {};\n }\n\n if (!instanceSeenTags[primaryAttributeKey]) {\n instanceSeenTags[primaryAttributeKey] = {};\n }\n\n if (!approvedSeenTags[primaryAttributeKey][value]) {\n instanceSeenTags[primaryAttributeKey][value] = true;\n return true;\n }\n\n return false;\n }).reverse().forEach(function (tag) {\n return approvedTags.push(tag);\n });\n\n // Update seen tags with tags from this instance\n var keys = Object.keys(instanceSeenTags);\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var tagUnion = (0, _objectAssign2.default)({}, approvedSeenTags[attributeKey], instanceSeenTags[attributeKey]);\n\n approvedSeenTags[attributeKey] = tagUnion;\n }\n\n return approvedTags;\n }, []).reverse();\n};\n\nvar getInnermostProperty = function getInnermostProperty(propsList, property) {\n for (var i = propsList.length - 1; i >= 0; i--) {\n var props = propsList[i];\n\n if (props.hasOwnProperty(property)) {\n return props[property];\n }\n }\n\n return null;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n return {\n baseTag: getBaseTagFromPropsList([_HelmetConstants.TAG_PROPERTIES.HREF], propsList),\n bodyAttributes: getAttributesFromPropsList(_HelmetConstants.ATTRIBUTE_NAMES.BODY, propsList),\n defer: getInnermostProperty(propsList, _HelmetConstants.HELMET_PROPS.DEFER),\n encode: getInnermostProperty(propsList, _HelmetConstants.HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n htmlAttributes: getAttributesFromPropsList(_HelmetConstants.ATTRIBUTE_NAMES.HTML, propsList),\n linkTags: getTagsFromPropsList(_HelmetConstants.TAG_NAMES.LINK, [_HelmetConstants.TAG_PROPERTIES.REL, _HelmetConstants.TAG_PROPERTIES.HREF], propsList),\n metaTags: getTagsFromPropsList(_HelmetConstants.TAG_NAMES.META, [_HelmetConstants.TAG_PROPERTIES.NAME, _HelmetConstants.TAG_PROPERTIES.CHARSET, _HelmetConstants.TAG_PROPERTIES.HTTPEQUIV, _HelmetConstants.TAG_PROPERTIES.PROPERTY, _HelmetConstants.TAG_PROPERTIES.ITEM_PROP], propsList),\n noscriptTags: getTagsFromPropsList(_HelmetConstants.TAG_NAMES.NOSCRIPT, [_HelmetConstants.TAG_PROPERTIES.INNER_HTML], propsList),\n onChangeClientState: getOnChangeClientState(propsList),\n scriptTags: getTagsFromPropsList(_HelmetConstants.TAG_NAMES.SCRIPT, [_HelmetConstants.TAG_PROPERTIES.SRC, _HelmetConstants.TAG_PROPERTIES.INNER_HTML], propsList),\n styleTags: getTagsFromPropsList(_HelmetConstants.TAG_NAMES.STYLE, [_HelmetConstants.TAG_PROPERTIES.CSS_TEXT], propsList),\n title: getTitleFromPropsList(propsList),\n titleAttributes: getAttributesFromPropsList(_HelmetConstants.ATTRIBUTE_NAMES.TITLE, propsList)\n };\n};\n\nvar rafPolyfill = function () {\n var clock = Date.now();\n\n return function (callback) {\n var currentTime = Date.now();\n\n if (currentTime - clock > 16) {\n clock = currentTime;\n callback(currentTime);\n } else {\n setTimeout(function () {\n rafPolyfill(callback);\n }, 0);\n }\n };\n}();\n\nvar cafPolyfill = function cafPolyfill(id) {\n return clearTimeout(id);\n};\n\nvar requestAnimationFrame = typeof window !== \"undefined\" ? window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || rafPolyfill : global.requestAnimationFrame || rafPolyfill;\n\nvar cancelAnimationFrame = typeof window !== \"undefined\" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || cafPolyfill : global.cancelAnimationFrame || cafPolyfill;\n\nvar warn = function warn(msg) {\n return console && typeof console.warn === \"function\" && console.warn(msg);\n};\n\nvar _helmetCallback = null;\n\nvar handleClientStateChange = function handleClientStateChange(newState) {\n if (_helmetCallback) {\n cancelAnimationFrame(_helmetCallback);\n }\n\n if (newState.defer) {\n _helmetCallback = requestAnimationFrame(function () {\n commitTagChanges(newState, function () {\n _helmetCallback = null;\n });\n });\n } else {\n commitTagChanges(newState);\n _helmetCallback = null;\n }\n};\n\nvar commitTagChanges = function commitTagChanges(newState, cb) {\n var baseTag = newState.baseTag,\n bodyAttributes = newState.bodyAttributes,\n htmlAttributes = newState.htmlAttributes,\n linkTags = newState.linkTags,\n metaTags = newState.metaTags,\n noscriptTags = newState.noscriptTags,\n onChangeClientState = newState.onChangeClientState,\n scriptTags = newState.scriptTags,\n styleTags = newState.styleTags,\n title = newState.title,\n titleAttributes = newState.titleAttributes;\n\n updateAttributes(_HelmetConstants.TAG_NAMES.BODY, bodyAttributes);\n updateAttributes(_HelmetConstants.TAG_NAMES.HTML, htmlAttributes);\n\n updateTitle(title, titleAttributes);\n\n var tagUpdates = {\n baseTag: updateTags(_HelmetConstants.TAG_NAMES.BASE, baseTag),\n linkTags: updateTags(_HelmetConstants.TAG_NAMES.LINK, linkTags),\n metaTags: updateTags(_HelmetConstants.TAG_NAMES.META, metaTags),\n noscriptTags: updateTags(_HelmetConstants.TAG_NAMES.NOSCRIPT, noscriptTags),\n scriptTags: updateTags(_HelmetConstants.TAG_NAMES.SCRIPT, scriptTags),\n styleTags: updateTags(_HelmetConstants.TAG_NAMES.STYLE, styleTags)\n };\n\n var addedTags = {};\n var removedTags = {};\n\n Object.keys(tagUpdates).forEach(function (tagType) {\n var _tagUpdates$tagType = tagUpdates[tagType],\n newTags = _tagUpdates$tagType.newTags,\n oldTags = _tagUpdates$tagType.oldTags;\n\n\n if (newTags.length) {\n addedTags[tagType] = newTags;\n }\n if (oldTags.length) {\n removedTags[tagType] = tagUpdates[tagType].oldTags;\n }\n });\n\n cb && cb();\n\n onChangeClientState(newState, addedTags, removedTags);\n};\n\nvar flattenArray = function flattenArray(possibleArray) {\n return Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\n};\n\nvar updateTitle = function updateTitle(title, attributes) {\n if (typeof title !== \"undefined\" && document.title !== title) {\n document.title = flattenArray(title);\n }\n\n updateAttributes(_HelmetConstants.TAG_NAMES.TITLE, attributes);\n};\n\nvar updateAttributes = function updateAttributes(tagName, attributes) {\n var elementTag = document.getElementsByTagName(tagName)[0];\n\n if (!elementTag) {\n return;\n }\n\n var helmetAttributeString = elementTag.getAttribute(_HelmetConstants.HELMET_ATTRIBUTE);\n var helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n var attributesToRemove = [].concat(helmetAttributes);\n var attributeKeys = Object.keys(attributes);\n\n for (var i = 0; i < attributeKeys.length; i++) {\n var attribute = attributeKeys[i];\n var value = attributes[attribute] || \"\";\n\n if (elementTag.getAttribute(attribute) !== value) {\n elementTag.setAttribute(attribute, value);\n }\n\n if (helmetAttributes.indexOf(attribute) === -1) {\n helmetAttributes.push(attribute);\n }\n\n var indexToSave = attributesToRemove.indexOf(attribute);\n if (indexToSave !== -1) {\n attributesToRemove.splice(indexToSave, 1);\n }\n }\n\n for (var _i = attributesToRemove.length - 1; _i >= 0; _i--) {\n elementTag.removeAttribute(attributesToRemove[_i]);\n }\n\n if (helmetAttributes.length === attributesToRemove.length) {\n elementTag.removeAttribute(_HelmetConstants.HELMET_ATTRIBUTE);\n } else if (elementTag.getAttribute(_HelmetConstants.HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n elementTag.setAttribute(_HelmetConstants.HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n }\n};\n\nvar updateTags = function updateTags(type, tags) {\n var headElement = document.head || document.querySelector(_HelmetConstants.TAG_NAMES.HEAD);\n var tagNodes = headElement.querySelectorAll(type + \"[\" + _HelmetConstants.HELMET_ATTRIBUTE + \"]\");\n var oldTags = Array.prototype.slice.call(tagNodes);\n var newTags = [];\n var indexToDelete = void 0;\n\n if (tags && tags.length) {\n tags.forEach(function (tag) {\n var newElement = document.createElement(type);\n\n for (var attribute in tag) {\n if (tag.hasOwnProperty(attribute)) {\n if (attribute === _HelmetConstants.TAG_PROPERTIES.INNER_HTML) {\n newElement.innerHTML = tag.innerHTML;\n } else if (attribute === _HelmetConstants.TAG_PROPERTIES.CSS_TEXT) {\n if (newElement.styleSheet) {\n newElement.styleSheet.cssText = tag.cssText;\n } else {\n newElement.appendChild(document.createTextNode(tag.cssText));\n }\n } else {\n var value = typeof tag[attribute] === \"undefined\" ? \"\" : tag[attribute];\n newElement.setAttribute(attribute, value);\n }\n }\n }\n\n newElement.setAttribute(_HelmetConstants.HELMET_ATTRIBUTE, \"true\");\n\n // Remove a duplicate tag from domTagstoRemove, so it isn't cleared.\n if (oldTags.some(function (existingTag, index) {\n indexToDelete = index;\n return newElement.isEqualNode(existingTag);\n })) {\n oldTags.splice(indexToDelete, 1);\n } else {\n newTags.push(newElement);\n }\n });\n }\n\n oldTags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n newTags.forEach(function (tag) {\n return headElement.appendChild(tag);\n });\n\n return {\n oldTags: oldTags,\n newTags: newTags\n };\n};\n\nvar generateElementAttributesAsString = function generateElementAttributesAsString(attributes) {\n return Object.keys(attributes).reduce(function (str, key) {\n var attr = typeof attributes[key] !== \"undefined\" ? key + \"=\\\"\" + attributes[key] + \"\\\"\" : \"\" + key;\n return str ? str + \" \" + attr : attr;\n }, \"\");\n};\n\nvar generateTitleAsString = function generateTitleAsString(type, title, attributes, encode) {\n var attributeString = generateElementAttributesAsString(attributes);\n var flattenedTitle = flattenArray(title);\n return attributeString ? \"<\" + type + \" \" + _HelmetConstants.HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeString + \">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\" : \"<\" + type + \" \" + _HelmetConstants.HELMET_ATTRIBUTE + \"=\\\"true\\\">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\";\n};\n\nvar generateTagsAsString = function generateTagsAsString(type, tags, encode) {\n return tags.reduce(function (str, tag) {\n var attributeHtml = Object.keys(tag).filter(function (attribute) {\n return !(attribute === _HelmetConstants.TAG_PROPERTIES.INNER_HTML || attribute === _HelmetConstants.TAG_PROPERTIES.CSS_TEXT);\n }).reduce(function (string, attribute) {\n var attr = typeof tag[attribute] === \"undefined\" ? attribute : attribute + \"=\\\"\" + encodeSpecialCharacters(tag[attribute], encode) + \"\\\"\";\n return string ? string + \" \" + attr : attr;\n }, \"\");\n\n var tagContent = tag.innerHTML || tag.cssText || \"\";\n\n var isSelfClosing = _HelmetConstants.SELF_CLOSING_TAGS.indexOf(type) === -1;\n\n return str + \"<\" + type + \" \" + _HelmetConstants.HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeHtml + (isSelfClosing ? \"/>\" : \">\" + tagContent + \"\");\n }, \"\");\n};\n\nvar convertElementAttributestoReactProps = function convertElementAttributestoReactProps(attributes) {\n var initProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return Object.keys(attributes).reduce(function (obj, key) {\n obj[_HelmetConstants.REACT_TAG_MAP[key] || key] = attributes[key];\n return obj;\n }, initProps);\n};\n\nvar convertReactPropstoHtmlAttributes = function convertReactPropstoHtmlAttributes(props) {\n var initAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return Object.keys(props).reduce(function (obj, key) {\n obj[_HelmetConstants.HTML_TAG_MAP[key] || key] = props[key];\n return obj;\n }, initAttributes);\n};\n\nvar generateTitleAsReactComponent = function generateTitleAsReactComponent(type, title, attributes) {\n var _initProps;\n\n // assigning into an array to define toString function on it\n var initProps = (_initProps = {\n key: title\n }, _initProps[_HelmetConstants.HELMET_ATTRIBUTE] = true, _initProps);\n var props = convertElementAttributestoReactProps(attributes, initProps);\n\n return [_react2.default.createElement(_HelmetConstants.TAG_NAMES.TITLE, props, title)];\n};\n\nvar generateTagsAsReactComponent = function generateTagsAsReactComponent(type, tags) {\n return tags.map(function (tag, i) {\n var _mappedTag;\n\n var mappedTag = (_mappedTag = {\n key: i\n }, _mappedTag[_HelmetConstants.HELMET_ATTRIBUTE] = true, _mappedTag);\n\n Object.keys(tag).forEach(function (attribute) {\n var mappedAttribute = _HelmetConstants.REACT_TAG_MAP[attribute] || attribute;\n\n if (mappedAttribute === _HelmetConstants.TAG_PROPERTIES.INNER_HTML || mappedAttribute === _HelmetConstants.TAG_PROPERTIES.CSS_TEXT) {\n var content = tag.innerHTML || tag.cssText;\n mappedTag.dangerouslySetInnerHTML = { __html: content };\n } else {\n mappedTag[mappedAttribute] = tag[attribute];\n }\n });\n\n return _react2.default.createElement(type, mappedTag);\n });\n};\n\nvar getMethodsForTag = function getMethodsForTag(type, tags, encode) {\n switch (type) {\n case _HelmetConstants.TAG_NAMES.TITLE:\n return {\n toComponent: function toComponent() {\n return generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode);\n },\n toString: function toString() {\n return generateTitleAsString(type, tags.title, tags.titleAttributes, encode);\n }\n };\n case _HelmetConstants.ATTRIBUTE_NAMES.BODY:\n case _HelmetConstants.ATTRIBUTE_NAMES.HTML:\n return {\n toComponent: function toComponent() {\n return convertElementAttributestoReactProps(tags);\n },\n toString: function toString() {\n return generateElementAttributesAsString(tags);\n }\n };\n default:\n return {\n toComponent: function toComponent() {\n return generateTagsAsReactComponent(type, tags);\n },\n toString: function toString() {\n return generateTagsAsString(type, tags, encode);\n }\n };\n }\n};\n\nvar mapStateOnServer = function mapStateOnServer(_ref) {\n var baseTag = _ref.baseTag,\n bodyAttributes = _ref.bodyAttributes,\n encode = _ref.encode,\n htmlAttributes = _ref.htmlAttributes,\n linkTags = _ref.linkTags,\n metaTags = _ref.metaTags,\n noscriptTags = _ref.noscriptTags,\n scriptTags = _ref.scriptTags,\n styleTags = _ref.styleTags,\n _ref$title = _ref.title,\n title = _ref$title === undefined ? \"\" : _ref$title,\n titleAttributes = _ref.titleAttributes;\n return {\n base: getMethodsForTag(_HelmetConstants.TAG_NAMES.BASE, baseTag, encode),\n bodyAttributes: getMethodsForTag(_HelmetConstants.ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n htmlAttributes: getMethodsForTag(_HelmetConstants.ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n link: getMethodsForTag(_HelmetConstants.TAG_NAMES.LINK, linkTags, encode),\n meta: getMethodsForTag(_HelmetConstants.TAG_NAMES.META, metaTags, encode),\n noscript: getMethodsForTag(_HelmetConstants.TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n script: getMethodsForTag(_HelmetConstants.TAG_NAMES.SCRIPT, scriptTags, encode),\n style: getMethodsForTag(_HelmetConstants.TAG_NAMES.STYLE, styleTags, encode),\n title: getMethodsForTag(_HelmetConstants.TAG_NAMES.TITLE, { title: title, titleAttributes: titleAttributes }, encode)\n };\n};\n\nexports.convertReactPropstoHtmlAttributes = convertReactPropstoHtmlAttributes;\nexports.handleClientStateChange = handleClientStateChange;\nexports.mapStateOnServer = mapStateOnServer;\nexports.reducePropsToState = reducePropsToState;\nexports.requestAnimationFrame = requestAnimationFrame;\nexports.warn = warn;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-helmet/lib/HelmetUtils.js\n// module id = 501\n// module chunks = 0","export const createPageTitle = (siteTitle, pageTitle) => {\n if (!pageTitle) {\n return `${siteTitle}`;\n }\n return `${siteTitle} - ${pageTitle}`;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/pageTitle.js","const determineOgThumbnailContentType = (thumbnail) => {\n if (thumbnail) {\n const fileExt = thumbnail.substring(thumbnail.lastIndexOf('.'));\n switch (fileExt) {\n case 'jpeg':\n case 'jpg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'gif':\n return 'image/gif';\n case 'mp4':\n return 'video/mp4';\n default:\n return 'image/jpeg';\n }\n }\n return '';\n};\n\nconst createBasicMetaTags = (siteHost, siteDescription, siteTitle, siteTwitter) => {\n return [\n {property: 'og:title', content: siteTitle},\n {property: 'og:url', content: siteHost},\n {property: 'og:site_name', content: siteTitle},\n {property: 'og:description', content: siteDescription},\n {property: 'twitter:site', content: siteTwitter},\n {property: 'twitter:card', content: 'summary'},\n ];\n};\n\nconst createChannelMetaTags = (siteTitle, siteHost, siteTwitter, channel) => {\n const { name, longId } = channel;\n return [\n {property: 'og:title', content: `${name} on ${siteTitle}`},\n {property: 'og:url', content: `${siteHost}/${name}:${longId}`},\n {property: 'og:site_name', content: siteTitle},\n {property: 'og:description', content: `${name}, a channel on ${siteTitle}`},\n {property: 'twitter:site', content: siteTwitter},\n {property: 'twitter:card', content: 'summary'},\n ];\n};\n\nconst createAssetMetaTags = (siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail) => {\n const { claimData } = asset;\n const { contentType } = claimData;\n const embedUrl = `${siteHost}/${claimData.claimId}/${claimData.name}`;\n const showUrl = `${siteHost}/${claimData.claimId}/${claimData.name}`;\n const source = `${siteHost}/${claimData.claimId}/${claimData.name}.${claimData.fileExt}`;\n const ogTitle = claimData.title || claimData.name;\n const ogDescription = claimData.description || defaultDescription;\n const ogThumbnailContentType = determineOgThumbnailContentType(claimData.thumbnail);\n const ogThumbnail = claimData.thumbnail || defaultThumbnail;\n const metaTags = [\n {property: 'og:title', content: ogTitle},\n {property: 'og:url', content: showUrl},\n {property: 'og:site_name', content: siteTitle},\n {property: 'og:description', content: ogDescription},\n {property: 'og:image:width', content: 600},\n {property: 'og:image:height', content: 315},\n {property: 'twitter:site', content: siteTwitter},\n ];\n if (contentType === 'video/mp4' || contentType === 'video/webm') {\n metaTags.push({property: 'og:video', content: source});\n metaTags.push({property: 'og:video:secure_url', content: source});\n metaTags.push({property: 'og:video:type', content: contentType});\n metaTags.push({property: 'og:image', content: ogThumbnail});\n metaTags.push({property: 'og:image:type', content: ogThumbnailContentType});\n metaTags.push({property: 'og:type', content: 'video'});\n metaTags.push({property: 'twitter:card', content: 'player'});\n metaTags.push({property: 'twitter:player', content: embedUrl});\n metaTags.push({property: 'twitter:player:width', content: 600});\n metaTags.push({property: 'twitter:text:player_width', content: 600});\n metaTags.push({property: 'twitter:player:height', content: 337});\n metaTags.push({property: 'twitter:player:stream', content: source});\n metaTags.push({property: 'twitter:player:stream:content_type', content: contentType});\n } else {\n metaTags.push({property: 'og:image', content: source});\n metaTags.push({property: 'og:image:type', content: contentType});\n metaTags.push({property: 'og:type', content: 'article'});\n metaTags.push({property: 'twitter:card', content: 'summary_large_image'});\n }\n return metaTags;\n};\n\nexport const createMetaTags = (siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail) => {\n if (asset) {\n return createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail);\n };\n if (channel) {\n return createChannelMetaTags(siteHost, siteTitle, siteTwitter, channel);\n };\n return createBasicMetaTags(siteDescription, siteHost, siteTitle, siteTwitter);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/metaTags.js","const createBasicCanonicalLink = (page, siteHost) => {\n return `${siteHost}/${page}`;\n};\n\nconst createAssetCanonicalLink = (asset, siteHost) => {\n let channelName, certificateId, name, claimId;\n if (asset.claimData) {\n ({ channelName, certificateId, name, claimId } = asset.claimData);\n };\n if (channelName) {\n return `${siteHost}/${channelName}:${certificateId}/${name}`;\n };\n return `${siteHost}/${claimId}/${name}`;\n};\n\nconst createChannelCanonicalLink = (channel, siteHost) => {\n const { name, longId } = channel;\n return `${siteHost}/${name}:${longId}`;\n};\n\nexport const createCanonicalLink = (asset, channel, page, siteHost) => {\n if (asset) {\n return createAssetCanonicalLink(asset, siteHost);\n }\n if (channel) {\n return createChannelCanonicalLink(channel, siteHost);\n }\n return createBasicCanonicalLink(page, siteHost);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/canonicalLink.js","import React from 'react';\nimport { NavLink, withRouter } from 'react-router-dom';\nimport Logo from 'components/Logo';\nimport NavBarChannelDropdown from 'components/NavBarChannelOptionsDropdown';\nimport request from 'utils/request';\n\nconst VIEW = 'VIEW';\nconst LOGOUT = 'LOGOUT';\n\nclass NavBar extends React.Component {\n constructor (props) {\n super(props);\n this.checkForLoggedInUser = this.checkForLoggedInUser.bind(this);\n this.logoutUser = this.logoutUser.bind(this);\n this.handleSelection = this.handleSelection.bind(this);\n }\n componentDidMount () {\n // check to see if the user is already logged in\n this.checkForLoggedInUser();\n }\n checkForLoggedInUser () {\n const params = {credentials: 'include'};\n request('/user', params)\n .then(({ data }) => {\n this.props.onChannelLogin(data.channelName, data.shortChannelId, data.channelClaimId);\n })\n .catch(error => {\n console.log('/user error:', error.message);\n });\n }\n logoutUser () {\n const params = {credentials: 'include'};\n request('/logout', params)\n .then(() => {\n this.props.onChannelLogout();\n })\n .catch(error => {\n console.log('/logout error', error.message);\n });\n }\n handleSelection (event) {\n const value = event.target.selectedOptions[0].value;\n switch (value) {\n case LOGOUT:\n this.logoutUser();\n break;\n case VIEW:\n // redirect to channel page\n this.props.history.push(`/${this.props.channelName}:${this.props.channelLongId}`);\n break;\n default:\n break;\n }\n }\n render () {\n const { siteDescription } = this.props;\n return (\n
\n
\n \n
\n {siteDescription}\n
\n
\n Publish\n About\n { this.props.channelName ? (\n \n ) : (\n Channel\n )}\n
\n
\n
\n );\n }\n}\n\nexport default withRouter(NavBar);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/NavBar/view.jsx","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nfunction Logo () {\n return (\n \n \n Logo\n Spee.ch logo\n \n \n \n Spee<h\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Logo;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/Logo/index.jsx","import React from 'react';\n\nfunction NavBarChannelDropdown ({ channelName, handleSelection, defaultSelection, VIEW, LOGOUT }) {\n return (\n \n );\n};\n\nexport default NavBarChannelDropdown;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/NavBarChannelOptionsDropdown/index.jsx","import {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n disabled: publish.disabled,\n file : publish.file,\n status : publish.status.status,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTool/index.js","import React from 'react';\nimport Dropzone from 'containers/Dropzone';\nimport PublishDetails from 'containers/PublishDetails';\nimport PublishStatus from 'containers/PublishStatus';\nimport PublishDisabledMessage from 'containers/PublishDisabledMessage';\n\nclass PublishTool extends React.Component {\n render () {\n if (this.props.disabled) {\n console.log('publish is disabled');\n return (\n \n );\n } else {\n console.log('publish is not disabled');\n if (this.props.file) {\n if (this.props.status) {\n return (\n \n );\n } else {\n return ;\n }\n }\n return ;\n }\n }\n};\n\nexport default PublishTool;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTool/view.jsx","import React from 'react';\nimport { validateFile } from 'utils/file';\nimport PublishPreview from 'components/PublishPreview';\n\nclass Dropzone extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n dragOver : false,\n mouseOver : false,\n dimPreview: false,\n };\n this.handleDrop = this.handleDrop.bind(this);\n this.handleDragOver = this.handleDragOver.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleDragEnter = this.handleDragEnter.bind(this);\n this.handleDragLeave = this.handleDragLeave.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleClick = this.handleClick.bind(this);\n this.handleFileInput = this.handleFileInput.bind(this);\n this.chooseFile = this.chooseFile.bind(this);\n }\n handleDrop (event) {\n event.preventDefault();\n this.setState({dragOver: false});\n // if dropped items aren't files, reject them\n const dt = event.dataTransfer;\n if (dt.items) {\n if (dt.items[0].kind === 'file') {\n const droppedFile = dt.items[0].getAsFile();\n this.chooseFile(droppedFile);\n }\n }\n }\n handleDragOver (event) {\n event.preventDefault();\n }\n handleDragEnd (event) {\n var dt = event.dataTransfer;\n if (dt.items) {\n for (var i = 0; i < dt.items.length; i++) {\n dt.items.remove(i);\n }\n } else {\n event.dataTransfer.clearData();\n }\n }\n handleDragEnter () {\n this.setState({dragOver: true, dimPreview: true});\n }\n handleDragLeave () {\n this.setState({dragOver: false, dimPreview: false});\n }\n handleMouseEnter () {\n this.setState({mouseOver: true, dimPreview: true});\n }\n handleMouseLeave () {\n this.setState({mouseOver: false, dimPreview: false});\n }\n handleClick (event) {\n event.preventDefault();\n document.getElementById('file_input').click();\n }\n handleFileInput (event) {\n event.preventDefault();\n const fileList = event.target.files;\n this.chooseFile(fileList[0]);\n }\n chooseFile (file) {\n if (file) {\n try {\n validateFile(file); // validate the file's name, type, and size\n } catch (error) {\n return this.props.setFileError(error.message);\n }\n // stage it so it will be ready when the publish button is clicked\n this.props.selectFile(file);\n }\n }\n render () {\n return (\n
\n
\n \n
\n
\n {this.props.file ? (\n
\n \n
\n { this.state.dragOver ? (\n
\n

Drop it.

\n
\n ) : (\n null\n )}\n { this.state.mouseOver ? (\n
\n

{this.props.fileError}

\n

Drag & drop image or video here to publish

\n

OR

\n

CHOOSE FILE

\n
\n ) : (\n null\n )}\n
\n
\n ) : (\n
\n { this.state.dragOver ? (\n
\n

Drop it.

\n
\n ) : (\n
\n

{this.props.fileError}

\n

Drag & drop image or video here to publish

\n

OR

\n

CHOOSE FILE

\n
\n )}\n
\n )}\n
\n
\n );\n }\n};\n\nexport default Dropzone;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/Dropzone/view.jsx","module.exports = {\n validateFile (file) {\n if (!file) {\n throw new Error('no file provided');\n }\n if (/'/.test(file.name)) {\n throw new Error('apostrophes are not allowed in the file name');\n }\n // validate size and type\n switch (file.type) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n if (file.size > 10000000) {\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n throw new Error('Sorry, GIFs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n throw new Error(file.type + ' is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/file.js","import React from 'react';\nimport PropTypes from 'prop-types';\n\nclass PublishPreview extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n imgSource : '',\n defaultThumbnail: '/assets/img/video_thumb_default.png',\n };\n }\n componentDidMount () {\n this.setPreviewImageSource(this.props.file);\n }\n componentWillReceiveProps (newProps) {\n if (newProps.file !== this.props.file) {\n this.setPreviewImageSource(newProps.file);\n }\n if (newProps.thumbnail !== this.props.thumbnail) {\n if (newProps.thumbnail) {\n this.setPreviewImageSourceFromFile(newProps.thumbnail);\n } else {\n this.setState({imgSource: this.state.defaultThumbnail});\n }\n }\n }\n setPreviewImageSourceFromFile (file) {\n const previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = () => {\n this.setState({imgSource: previewReader.result});\n };\n }\n setPreviewImageSource (file) {\n if (file.type !== 'video/mp4') {\n this.setPreviewImageSourceFromFile(file);\n } else {\n if (this.props.thumbnail) {\n this.setPreviewImageSourceFromFile(this.props.thumbnail);\n }\n this.setState({imgSource: this.state.defaultThumbnail});\n }\n }\n render () {\n return (\n \n );\n }\n};\n\nPublishPreview.propTypes = {\n dimPreview: PropTypes.bool.isRequired,\n file : PropTypes.object.isRequired,\n thumbnail : PropTypes.object,\n};\n\nexport default PublishPreview;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/PublishPreview/index.jsx","import {connect} from 'react-redux';\nimport {clearFile, startPublish} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, publish }) => {\n return {\n file: publish.file,\n };\n};\n\nconst mapDispatchToProps = {\n clearFile,\n startPublish,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDetails/index.js","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport Dropzone from 'containers/Dropzone';\nimport PublishTitleInput from 'containers/PublishTitleInput';\nimport PublishUrlInput from 'containers/PublishUrlInput';\nimport PublishThumbnailInput from 'containers/PublishThumbnailInput';\nimport PublishMetadataInputs from 'containers/PublishMetadataInputs';\nimport ChannelSelect from 'containers/ChannelSelect';\n\nclass PublishDetails extends React.Component {\n constructor (props) {\n super(props)\n this.onPublishSubmit = this.onPublishSubmit.bind(this);\n }\n onPublishSubmit () {\n this.props.startPublish(this.props.history);\n }\n render () {\n return (\n
\n );\n }\n};\n\nexport default withRouter(PublishDetails);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDetails/view.jsx","import {connect} from 'react-redux';\nimport {updateMetadata} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n title: publish.metadata.title,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onMetadataChange: (name, value) => {\n dispatch(updateMetadata(name, value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTitleInput/index.js","import React from 'react';\n\nclass PublishTitleInput extends React.Component {\n constructor (props) {\n super(props);\n this.handleInput = this.handleInput.bind(this);\n }\n handleInput (e) {\n const name = e.target.name;\n const value = e.target.value;\n this.props.onMetadataChange(name, value);\n }\n render () {\n return (\n \n );\n }\n}\n\nexport default PublishTitleInput;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTitleInput/view.jsx","import {updateClaim, updateError} from 'actions/publish';\nimport {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, publish }) => {\n return {\n loggedInChannelName : channel.loggedInChannel.name,\n loggedInChannelShortId: channel.loggedInChannel.shortId,\n fileName : publish.file.name,\n publishInChannel : publish.publishInChannel,\n selectedChannel : publish.selectedChannel,\n claim : publish.claim,\n urlError : publish.error.url,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onClaimChange: (value) => {\n dispatch(updateClaim(value));\n dispatch(updateError('publishSubmit', null));\n },\n onUrlError: (value) => {\n dispatch(updateError('url', value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishUrlInput/index.js","import React from 'react';\nimport request from 'utils/request';\nimport UrlMiddle from 'components/PublishUrlMiddleDisplay';\n\nclass PublishUrlInput extends React.Component {\n constructor (props) {\n super(props);\n this.handleInput = this.handleInput.bind(this);\n }\n componentDidMount () {\n const { claim, fileName } = this.props;\n if (!claim) {\n this.setClaimName(fileName);\n }\n }\n componentWillReceiveProps ({ claim, fileName }) {\n // if a new file was chosen, update the claim name\n if (fileName !== this.props.fileName) {\n return this.setClaimName(fileName);\n }\n // if the claim has updated, check its availability\n if (claim !== this.props.claim) {\n this.validateClaim(claim);\n }\n }\n handleInput (event) {\n let value = event.target.value;\n value = this.cleanseInput(value);\n // update the state\n this.props.onClaimChange(value);\n }\n cleanseInput (input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n setClaimName (fileName) {\n const fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.'));\n const cleanClaimName = this.cleanseInput(fileNameWithoutEnding);\n this.props.onClaimChange(cleanClaimName);\n }\n validateClaim (claim) {\n if (!claim) {\n return this.props.onUrlError('Enter a url above');\n }\n request(`/api/claim/availability/${claim}`)\n .then(() => {\n this.props.onUrlError(null);\n })\n .catch((error) => {\n this.props.onUrlError(error.message);\n });\n }\n render () {\n const { claim, loggedInChannelName, loggedInChannelShortId, publishInChannel, selectedChannel, urlError } = this.props;\n return (\n
\n
\n spee.ch / \n \n \n { (claim && !urlError) && {'\\u2713'} }\n { urlError && {'\\u2716'} }\n
\n
\n { urlError ? (\n

{urlError}

\n ) : (\n

Choose a custom url

\n )}\n
\n
\n );\n }\n}\n\nexport default PublishUrlInput;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishUrlInput/view.jsx","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction UrlMiddle ({publishInChannel, selectedChannel, loggedInChannelName, loggedInChannelShortId}) {\n if (publishInChannel) {\n if (selectedChannel === loggedInChannelName) {\n return {loggedInChannelName}:{loggedInChannelShortId} /;\n }\n return @channelSelect a channel below /;\n }\n return (\n xyzThis will be a random id /\n );\n}\n\nUrlMiddle.propTypes = {\n publishInChannel : PropTypes.bool.isRequired,\n loggedInChannelName : PropTypes.string,\n loggedInChannelShortId: PropTypes.string,\n};\n\nexport default UrlMiddle;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/PublishUrlMiddleDisplay/index.jsx","import { connect } from 'react-redux';\nimport { onNewThumbnail } from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish: { file } }) => {\n return {\n file,\n };\n};\n\nconst mapDispatchToProps = {\n onNewThumbnail,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishThumbnailInput/index.js","import React from 'react';\n\nfunction dataURItoBlob(dataURI) {\n // convert base64/URLEncoded data component to raw binary data held in a string\n let byteString = atob(dataURI.split(',')[1]);\n // separate out the mime component\n let mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n // write the bytes of the string to a typed array\n let ia = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n return new Blob([ia], {type: mimeString});\n}\n\nclass PublishThumbnailInput extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n videoSource : null,\n error : null,\n sliderMinRange: 1,\n sliderMaxRange: null,\n sliderValue : null,\n };\n this.handleVideoLoadedData = this.handleVideoLoadedData.bind(this);\n this.handleSliderChange = this.handleSliderChange.bind(this);\n this.createThumbnail = this.createThumbnail.bind(this);\n }\n componentDidMount () {\n const { file } = this.props;\n this.setVideoSource(file);\n }\n componentWillReceiveProps (nextProps) {\n // if file changes\n if (nextProps.file && nextProps.file !== this.props.file) {\n const { file } = nextProps;\n this.setVideoSource(file);\n };\n }\n setVideoSource (file) {\n const previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = () => {\n const dataUri = previewReader.result;\n const blob = dataURItoBlob(dataUri);\n const videoSource = URL.createObjectURL(blob);\n this.setState({ videoSource });\n };\n }\n handleVideoLoadedData (event) {\n const duration = event.target.duration;\n const totalMinutes = Math.floor(duration / 60);\n const totalSeconds = Math.floor(duration % 60);\n // set the slider\n this.setState({\n sliderMaxRange: duration * 100,\n sliderValue : duration * 100 / 2,\n totalMinutes,\n totalSeconds,\n });\n // update the current time of the video\n let video = document.getElementById('video-thumb-player');\n video.currentTime = duration / 2;\n }\n handleSliderChange (event) {\n const value = parseInt(event.target.value);\n // update the slider value\n this.setState({\n sliderValue: value,\n });\n // update the current time of the video\n let video = document.getElementById('video-thumb-player');\n video.currentTime = value / 100;\n }\n createThumbnail () {\n // take a snapshot\n let video = document.getElementById('video-thumb-player');\n let canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);\n const dataUrl = canvas.toDataURL();\n const blob = dataURItoBlob(dataUrl);\n const snapshot = new File([blob], `thumbnail.png`, {\n type: 'image/png',\n });\n // set the thumbnail in redux store\n if (snapshot) {\n this.props.onNewThumbnail(snapshot);\n }\n }\n render () {\n const { error, videoSource, sliderMinRange, sliderMaxRange, sliderValue, totalMinutes, totalSeconds } = this.state;\n return (\n
\n \n \n {\n sliderValue ? (\n
\n
\n 0'00\"\n {totalMinutes}'{totalSeconds}\"\n
\n
\n \n
\n
\n ) : (\n

loading...

\n )\n }\n { error ? (\n

{error}

\n ) : (\n

Use slider to set thumbnail

\n )}\n
\n );\n }\n}\n\nexport default PublishThumbnailInput;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishThumbnailInput/view.jsx","import {connect} from 'react-redux';\nimport {updateMetadata, toggleMetadataInputs} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n showMetadataInputs: publish.showMetadataInputs,\n description : publish.metadata.description,\n license : publish.metadata.license,\n nsfw : publish.metadata.nsfw,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onMetadataChange: (name, value) => {\n dispatch(updateMetadata(name, value));\n },\n onToggleMetadataInputs: (value) => {\n dispatch(toggleMetadataInputs(value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishMetadataInputs/index.js","import React from 'react';\nimport ExpandingTextArea from 'components/ExpandingTextArea';\n\nclass PublishMetadataInputs extends React.Component {\n constructor (props) {\n super(props);\n this.toggleShowInputs = this.toggleShowInputs.bind(this);\n this.handleInput = this.handleInput.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n }\n toggleShowInputs () {\n this.props.onToggleMetadataInputs(!this.props.showMetadataInputs);\n }\n handleInput (event) {\n const target = event.target;\n const value = target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n this.props.onMetadataChange(name, value);\n }\n handleSelect (event) {\n const name = event.target.name;\n const selectedOption = event.target.selectedOptions[0].value;\n this.props.onMetadataChange(name, selectedOption);\n }\n render () {\n return (\n
\n {this.props.showMetadataInputs && (\n
\n
\n
\n \n
\n \n
\n
\n\n
\n
\n \n
\n \n
\n
\n\n
\n
\n \n
\n \n
\n
\n
\n )}\n \n
\n );\n }\n}\n\nexport default PublishMetadataInputs;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishMetadataInputs/view.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nclass ExpandingTextarea extends Component {\n constructor (props) {\n super(props);\n this._handleChange = this._handleChange.bind(this);\n }\n componentDidMount () {\n this.adjustTextarea({});\n }\n _handleChange (event) {\n const { onChange } = this.props;\n if (onChange) onChange(event);\n this.adjustTextarea(event);\n }\n adjustTextarea ({ target = this.el }) {\n target.style.height = 0;\n target.style.height = `${target.scrollHeight}px`;\n }\n render () {\n const { ...rest } = this.props;\n return (\n this.el = x}\n onChange={this._handleChange}\n />\n );\n }\n}\n\nExpandingTextarea.propTypes = {\n onChange: PropTypes.func,\n};\n\nexport default ExpandingTextarea;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/ExpandingTextArea/index.jsx","import {connect} from 'react-redux';\nimport {setPublishInChannel, updateSelectedChannel, updateError} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, publish }) => {\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n publishInChannel : publish.publishInChannel,\n selectedChannel : publish.selectedChannel,\n channelError : publish.error.channel,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onPublishInChannelChange: (value) => {\n dispatch(updateError('channel', null));\n dispatch(setPublishInChannel(value));\n },\n onChannelSelect: (value) => {\n dispatch(updateError('channel', null));\n dispatch(updateSelectedChannel(value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelSelect/index.js","import React from 'react';\nimport ChannelLoginForm from 'containers/ChannelLoginForm';\nimport ChannelCreateForm from 'containers/ChannelCreateForm';\nimport * as states from 'constants/publish_channel_select_states';\n\nclass ChannelSelect extends React.Component {\n constructor (props) {\n super(props);\n this.toggleAnonymousPublish = this.toggleAnonymousPublish.bind(this);\n this.handleSelection = this.handleSelection.bind(this);\n }\n toggleAnonymousPublish (event) {\n const value = event.target.value;\n if (value === 'anonymous') {\n this.props.onPublishInChannelChange(false);\n } else {\n this.props.onPublishInChannelChange(true);\n }\n }\n handleSelection (event) {\n const selectedOption = event.target.selectedOptions[0].value;\n this.props.onChannelSelect(selectedOption);\n }\n render () {\n return (\n
\n
\n
\n \n \n
\n
\n \n \n
\n { this.props.channelError ? (\n

{this.props.channelError}

\n ) : (\n

Publish anonymously or in a channel

\n )}\n
\n { this.props.publishInChannel && (\n
\n
\n \n
\n \n
\n { (this.props.selectedChannel === states.LOGIN) && }\n { (this.props.selectedChannel === states.CREATE) && }\n
\n )}\n
\n );\n }\n}\n\nexport default ChannelSelect;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelSelect/view.jsx","import React from 'react';\nimport request from 'utils/request';\n\nclass ChannelLoginForm extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n error : null,\n name : '',\n password: '',\n };\n this.handleInput = this.handleInput.bind(this);\n this.loginToChannel = this.loginToChannel.bind(this);\n }\n handleInput (event) {\n const name = event.target.name;\n const value = event.target.value;\n this.setState({[name]: value});\n }\n loginToChannel (event) {\n event.preventDefault();\n const params = {\n method : 'POST',\n body : JSON.stringify({username: this.state.name, password: this.state.password}),\n headers: new Headers({\n 'Content-Type': 'application/json',\n }),\n credentials: 'include',\n };\n request('login', params)\n .then(({success, channelName, shortChannelId, channelClaimId, message}) => {\n if (success) {\n this.props.onChannelLogin(channelName, shortChannelId, channelClaimId);\n } else {\n this.setState({'error': message});\n };\n })\n .catch(error => {\n if (error.message) {\n this.setState({'error': error.message});\n } else {\n this.setState({'error': error});\n }\n });\n }\n render () {\n return (\n
\n
\n
\n \n
\n
\n @\n \n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n { this.state.error ? (\n

{this.state.error}

\n ) : (\n

Enter the name and password for your channel

\n )}\n
\n \n
\n
\n );\n }\n}\n\nexport default ChannelLoginForm;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelLoginForm/view.jsx","import React from 'react';\nimport ProgressBar from 'components/ProgressBar';\nimport request from 'utils/request';\n\nclass ChannelCreateForm extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n error : null,\n channel : '',\n password: '',\n status : null,\n };\n this.handleChannelInput = this.handleChannelInput.bind(this);\n this.handleInput = this.handleInput.bind(this);\n this.createChannel = this.createChannel.bind(this);\n }\n cleanseChannelInput (input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n handleChannelInput (event) {\n let value = event.target.value;\n value = this.cleanseChannelInput(value);\n this.setState({channel: value});\n if (value) {\n this.updateIsChannelAvailable(value);\n } else {\n this.setState({error: 'Please enter a channel name'});\n }\n }\n handleInput (event) {\n const name = event.target.name;\n const value = event.target.value;\n this.setState({[name]: value});\n }\n updateIsChannelAvailable (channel) {\n const channelWithAtSymbol = `@${channel}`;\n request(`/api/channel/availability/${channelWithAtSymbol}`)\n .then(() => {\n this.setState({'error': null});\n })\n .catch((error) => {\n this.setState({'error': error.message});\n });\n }\n checkIsChannelAvailable (channel) {\n const channelWithAtSymbol = `@${channel}`;\n return request(`/api/channel/availability/${channelWithAtSymbol}`);\n }\n checkIsPasswordProvided (password) {\n return new Promise((resolve, reject) => {\n if (!password || password.length < 1) {\n return reject(new Error('Please provide a password'));\n }\n resolve();\n });\n }\n makePublishChannelRequest (username, password) {\n const params = {\n method : 'POST',\n body : JSON.stringify({username, password}),\n headers: new Headers({\n 'Content-Type': 'application/json',\n }),\n credentials: 'include',\n };\n return new Promise((resolve, reject) => {\n request('/signup', params)\n .then(result => {\n return resolve(result);\n })\n .catch(error => {\n reject(new Error(`Unfortunately, we encountered an error while creating your channel. Please let us know in Discord! ${error.message}`));\n });\n });\n }\n createChannel (event) {\n event.preventDefault();\n this.checkIsPasswordProvided(this.state.password)\n .then(() => {\n return this.checkIsChannelAvailable(this.state.channel);\n })\n .then(() => {\n this.setState({status: 'We are publishing your new channel. Sit tight...'});\n return this.makePublishChannelRequest(this.state.channel, this.state.password);\n })\n .then(result => {\n this.setState({status: null});\n this.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId);\n })\n .catch((error) => {\n if (error.message) {\n this.setState({'error': error.message, status: null});\n } else {\n this.setState({'error': error, status: null});\n };\n });\n }\n render () {\n return (\n
\n { !this.state.status ? (\n
\n
\n
\n \n
\n
\n @\n \n { (this.state.channel && !this.state.error) && {'\\u2713'} }\n { this.state.error && {'\\u2716'} }\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n {this.state.error ? (\n

{this.state.error}

\n ) : (\n

Choose a name and password for your channel

\n )}\n
\n \n
\n
\n ) : (\n
\n

{this.state.status}

\n \n
\n )}\n
\n );\n }\n}\n\nexport default ChannelCreateForm;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelCreateForm/view.jsx","import React from 'react';\n\nconst ActiveStatusBar = () => {\n return | ;\n};\n\nexport default ActiveStatusBar;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/ActiveStatusBar/index.jsx","import React from 'react';\n\nconst InactiveStatusBar = () => {\n return | ;\n};\n\nexport default InactiveStatusBar;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/InactiveStatusBar/index.jsx","import {connect} from 'react-redux';\nimport {clearFile} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n status : publish.status.status,\n message: publish.status.message,\n };\n};\n\nconst mapDispatchToProps = {\n clearFile,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishStatus/index.js","import React from 'react';\nimport ProgressBar from 'components/ProgressBar';\nimport * as publishStates from 'constants/publish_claim_states';\n\nclass PublishStatus extends React.Component {\n render () {\n const { status, message, clearFile } = this.props;\n return (\n
\n {status === publishStates.LOAD_START &&\n
\n

File is loading to server

\n

0%

\n
\n }\n {status === publishStates.LOADING &&\n
\n
\n

File is loading to server

\n

{message}

\n
\n
\n }\n {status === publishStates.PUBLISHING &&\n
\n

Upload complete. Your file is now being published on the blockchain...

\n \n

Curious what magic is happening here? Learn more.

\n
\n }\n {status === publishStates.SUCCESS &&\n
\n

Your publish is complete! You are being redirected to it now.

\n

If you are not automatically redirected, click here.

\n
\n }\n {status === publishStates.FAILED &&\n
\n

Something went wrong...

\n

{message}

\n

For help, post the above error text in the #speech channel on the lbry discord

\n \n
\n }\n
\n );\n }\n};\n\nexport default PublishStatus;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishStatus/view.jsx","import {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n message: publish.disabledMessage,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDisabledMessage/index.js","import React from 'react';\n\nclass PublishDisabledMessage extends React.Component {\n render () {\n const message = this.props.message;\n console.log('this.props.message:', message);\n return (\n
\n

Publishing is currently disabled.

\n

{message}

\n
\n );\n }\n}\n\nexport default PublishDisabledMessage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDisabledMessage/view.jsx","import React from 'react';\nimport NavBar from 'containers/NavBar';\nimport SEO from 'components/SEO';\n\nclass AboutPage extends React.Component {\n render () {\n return (\n
\n \n \n
\n
\n
\n

Spee.ch is an open-source project. Please contribute to the existing site, or fork it and make your own.

\n

TWITTER

\n

GITHUB

\n

DISCORD CHANNEL

\n

DOCUMENTATION

\n
\n
\n
\n

Spee.ch is a media-hosting site that reads from and publishes content to the LBRY blockchain.

\n

Spee.ch is a hosting service, but with the added benefit that it stores your content on a decentralized network of computers -- the LBRY network. This means that your images are stored in multiple locations without a single point of failure.

\n

Contribute

\n

If you have an idea for your own spee.ch-like site on top of LBRY, fork our github repo and go to town!

\n

If you want to improve spee.ch, join our discord channel or solve one of our github issues.

\n
\n
\n
\n
\n );\n }\n};\n\nexport default AboutPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/AboutPage/index.jsx","import {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ channel }) => {\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/LoginPage/index.js","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport SEO from 'components/SEO';\nimport NavBar from 'containers/NavBar';\nimport ChannelLoginForm from 'containers/ChannelLoginForm';\nimport ChannelCreateForm from 'containers/ChannelCreateForm';\n\nclass LoginPage extends React.Component {\n componentWillReceiveProps (newProps) {\n // re-route the user to the homepage if the user is logged in\n if (newProps.loggedInChannelName !== this.props.loggedInChannelName) {\n this.props.history.push(`/`);\n }\n }\n render () {\n return (\n
\n \n \n
\n
\n
\n

Channels allow you to publish and group content under an identity. You can create a channel for yourself, or share one with like-minded friends. You can create 1 channel, or 100, so whether you're documenting important events, or making a public repository for cat gifs (password: '1234'), try creating a channel for it!

\n
\n
\n
\n

Log in to an existing channel:

\n \n

Create a brand new channel:

\n \n
\n
\n
\n
\n );\n }\n};\n\nexport default withRouter(LoginPage);\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/LoginPage/view.jsx","import { connect } from 'react-redux';\nimport { onHandleShowPageUri } from 'actions/show';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n return {\n error : show.request.error,\n requestType: show.request.type,\n };\n};\n\nconst mapDispatchToProps = {\n onHandleShowPageUri,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/ShowPage/index.js","import React from 'react';\nimport ErrorPage from 'pages/ErrorPage';\nimport ShowAssetLite from 'containers/ShowAssetLite';\nimport ShowAssetDetails from 'containers/ShowAssetDetails';\nimport ShowChannel from 'containers/ShowChannel';\n\nimport { CHANNEL, ASSET_LITE, ASSET_DETAILS } from 'constants/show_request_types';\n\nclass ShowPage extends React.Component {\n componentDidMount () {\n this.props.onHandleShowPageUri(this.props.match.params);\n }\n componentWillReceiveProps (nextProps) {\n if (nextProps.match.params !== this.props.match.params) {\n this.props.onHandleShowPageUri(nextProps.match.params);\n }\n }\n render () {\n const { error, requestType } = this.props;\n if (error) {\n return (\n \n );\n }\n switch (requestType) {\n case CHANNEL:\n return ;\n case ASSET_LITE:\n return ;\n case ASSET_DETAILS:\n return ;\n default:\n return

loading...

;\n }\n }\n};\n\nexport default ShowPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/ShowPage/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select request info\n const requestId = show.request.id;\n // select asset info\n let asset;\n const request = show.requestList[requestId] || null;\n const assetList = show.assetList;\n if (request && assetList) {\n const assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetLite/index.js","import React from 'react';\nimport SEO from 'components/SEO';\nimport { Link } from 'react-router-dom';\nimport AssetDisplay from 'containers/AssetDisplay';\n\nclass ShowLite extends React.Component {\n render () {\n const { asset } = this.props;\n if (asset) {\n const { name, claimId } = asset.claimData;\n return (\n
\n \n \n hosted\n via Spee.ch\n
\n );\n }\n return (\n
\n

loading asset data...

\n
\n );\n }\n};\n\nexport default ShowLite;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetLite/view.jsx","import React from 'react';\nimport ProgressBar from 'components/ProgressBar';\nimport { LOCAL_CHECK, UNAVAILABLE, ERROR, AVAILABLE } from 'constants/asset_display_states';\n\nclass AssetDisplay extends React.Component {\n componentDidMount () {\n const { asset: { claimData: { name, claimId } } } = this.props;\n this.props.onFileRequest(name, claimId);\n }\n render () {\n const { status, error, asset: { claimData: { name, claimId, contentType, fileExt, thumbnail } } } = this.props;\n return (\n
\n {(status === LOCAL_CHECK) &&\n
\n

Checking to see if Spee.ch has your asset locally...

\n
\n }\n {(status === UNAVAILABLE) &&\n
\n

Sit tight, we're searching the LBRY blockchain for your asset!

\n \n

Curious what magic is happening here? Learn more.

\n
\n }\n {(status === ERROR) &&\n
\n

Unfortunately, we couldn't download your asset from LBRY. You can help us out by sharing the below error message in the LBRY discord.

\n

{error}

\n
\n }\n {(status === AVAILABLE) &&\n (() => {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n return (\n \n );\n case 'image/gif':\n return (\n \n );\n case 'video/mp4':\n return (\n \n );\n default:\n return (\n

Unsupported file type

\n );\n }\n })()\n }\n
\n );\n }\n};\n\nexport default AssetDisplay;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetDisplay/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select request info\n const requestId = show.request.id;\n // select asset info\n let asset;\n const request = show.requestList[requestId] || null;\n const assetList = show.assetList;\n if (request && assetList) {\n const assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetDetails/index.js","import React from 'react';\nimport SEO from 'components/SEO';\nimport NavBar from 'containers/NavBar';\nimport ErrorPage from 'pages/ErrorPage';\nimport AssetTitle from 'containers/AssetTitle';\nimport AssetDisplay from 'containers/AssetDisplay';\nimport AssetInfo from 'containers/AssetInfo';\n\nclass ShowAssetDetails extends React.Component {\n render () {\n const { asset } = this.props;\n if (asset) {\n const { claimData: { name } } = asset;\n return (\n
\n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n );\n };\n return (\n \n );\n }\n};\n\nexport default ShowAssetDetails;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetDetails/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\nimport { selectAsset } from 'selectors/show';\n\nconst mapStateToProps = ({ show }) => {\n const { claimData: { title } } = selectAsset(show);\n return {\n title,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetTitle/index.js","import React from 'react';\n\nconst AssetTitle = ({ title }) => {\n return (\n
\n {title}\n
\n );\n};\n\nexport default AssetTitle;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetTitle/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\nimport { selectAsset } from 'selectors/show';\n\nconst mapStateToProps = ({ show }) => {\n // select asset\n const asset = selectAsset(show);\n // return props\n return {\n asset,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetInfo/index.js","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nclass AssetInfo extends React.Component {\n constructor (props) {\n super(props);\n this.copyToClipboard = this.copyToClipboard.bind(this);\n }\n copyToClipboard (event) {\n var elementToCopy = event.target.dataset.elementtocopy;\n var element = document.getElementById(elementToCopy);\n element.select();\n try {\n document.execCommand('copy');\n } catch (err) {\n this.setState({error: 'Oops, unable to copy'});\n }\n }\n render () {\n const { asset: { shortId, claimData : { channelName, certificateId, description, name, claimId, fileExt, contentType, thumbnail, host } } } = this.props;\n return (\n
\n {channelName &&\n
\n
\n Channel:\n
\n
\n {channelName}\n
\n
\n }\n\n {description &&\n
\n {description}\n
\n }\n\n
\n
\n
\n Share:\n
\n
\n \n twitter\n facebook\n tumblr\n reddit\n
\n
\n
\n
\n\n
\n \n );\n }\n};\n\nexport default AssetInfo;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetInfo/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select request info\n const requestId = show.request.id;\n // select request\n const previousRequest = show.requestList[requestId] || null;\n // select channel\n let channel;\n if (previousRequest) {\n const channelKey = previousRequest.key;\n channel = show.channelList[channelKey] || null;\n }\n return {\n channel,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowChannel/index.js","import React from 'react';\nimport SEO from 'components/SEO';\nimport ErrorPage from 'pages/ErrorPage';\nimport NavBar from 'containers/NavBar';\nimport ChannelClaimsDisplay from 'containers/ChannelClaimsDisplay';\n\nclass ShowChannel extends React.Component {\n render () {\n const { channel } = this.props;\n if (channel) {\n const { name, longId, shortId } = channel;\n return (\n
\n \n \n
\n
\n

channel name: {name}

\n

full channel id: {longId}

\n

short channel id: {shortId}

\n
\n
\n \n
\n
\n
\n );\n };\n return (\n \n );\n }\n};\n\nexport default ShowChannel;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowChannel/view.jsx","import { connect } from 'react-redux';\nimport { onUpdateChannelClaims } from 'actions/show';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select channel key\n const request = show.requestList[show.request.id];\n const channelKey = request.key;\n // select channel claims\n const channel = show.channelList[channelKey] || null;\n // return props\n return {\n channelKey,\n channel,\n };\n};\n\nconst mapDispatchToProps = {\n onUpdateChannelClaims,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelClaimsDisplay/index.js","import React from 'react';\nimport AssetPreview from 'components/AssetPreview';\n\nclass ChannelClaimsDisplay extends React.Component {\n constructor (props) {\n super(props);\n this.showNextResultsPage = this.showNextResultsPage.bind(this);\n this.showPreviousResultsPage = this.showPreviousResultsPage.bind(this);\n }\n showPreviousResultsPage () {\n const { channel: { claimsData: { currentPage } } } = this.props;\n const previousPage = parseInt(currentPage) - 1;\n this.showNewPage(previousPage);\n }\n showNextResultsPage () {\n const { channel: { claimsData: { currentPage } } } = this.props;\n const nextPage = parseInt(currentPage) + 1;\n this.showNewPage(nextPage);\n }\n showNewPage (page) {\n const { channelKey, channel: { name, longId } } = this.props;\n this.props.onUpdateChannelClaims(channelKey, name, longId, page);\n }\n render () {\n const { channel: { claimsData: { claims, currentPage, totalPages } } } = this.props;\n return (\n
\n {(claims.length > 0) ? (\n
\n {claims.map((claim, index) => )}\n
\n {(currentPage > 1) &&\n \n }\n {(currentPage < totalPages) &&\n \n }\n
\n
\n ) : (\n

There are no claims in this channel

\n )}\n
\n );\n }\n};\n\nexport default ChannelClaimsDisplay;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelClaimsDisplay/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({site: {defaults: { defaultThumbnail }}}) => {\n return {\n defaultThumbnail,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/AssetPreview/index.js","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nconst AssetPreview = ({ defaultThumbnail, claimData: { name, claimId, fileExt, contentType, thumbnail } }) => {\n const directSourceLink = `${claimId}/${name}.${fileExt}`;\n const showUrlLink = `/${claimId}/${name}`;\n return (\n
\n \n {(() => {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n case 'image/gif':\n return (\n \n );\n case 'video/mp4':\n return (\n \n );\n default:\n return (\n

unsupported file type

\n );\n }\n })()}\n \n
\n );\n};\n\nexport default AssetPreview;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/AssetPreview/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ site: { host, title } }) => {\n return {\n host,\n title,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/FourOhFourPage/index.jsx","import React from 'react';\nimport NavBar from 'containers/NavBar';\nimport Helmet from 'react-helmet';\n\nclass FourOhForPage extends React.Component {\n render () {\n const {title, host} = this.props;\n return (\n
\n \n {title} - 404\n \n \n \n
\n

404

\n

That page does not exist

\n
\n
\n );\n }\n};\n\nexport default FourOhForPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/FourOhFourPage/view.jsx"],"sourceRoot":""} \ No newline at end of file From 4defa62d33e538e5525c25f6fff466fa1d0a2e86 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Mon, 19 Mar 2018 14:32:25 -0700 Subject: [PATCH 06/16] added slackconfig example --- .gitignore | 1 + devConfig/slackConfig.js.example | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 devConfig/slackConfig.js.example diff --git a/.gitignore b/.gitignore index 21a6d8fe..4e7cfe58 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,6 @@ config/loggerConfig.js config/mysqlConfig.js config/siteConfig.js config/slackConfig.js +devConfig/slackConfig.js devConfig/sequelizeCliConfig.js devConfig/testingConfig.js diff --git a/devConfig/slackConfig.js.example b/devConfig/slackConfig.js.example new file mode 100644 index 00000000..718ecdb5 --- /dev/null +++ b/devConfig/slackConfig.js.example @@ -0,0 +1,7 @@ +function SlackConfig () { + this.slackWebHook = null; + this.slackErrorChannel = null; + this.slackInfoChannel = null; +}; + +module.exports = new SlackConfig(); From 8f80c5ab144bf0e3219b775ea43eb24c3262c3c5 Mon Sep 17 00:00:00 2001 From: Bill Bittner Date: Mon, 19 Mar 2018 14:33:08 -0700 Subject: [PATCH 07/16] Delete loggerConfig.js --- config/loggerConfig.js | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 config/loggerConfig.js diff --git a/config/loggerConfig.js b/config/loggerConfig.js deleted file mode 100644 index 18c53a95..00000000 --- a/config/loggerConfig.js +++ /dev/null @@ -1,5 +0,0 @@ -const loggerConfig = { - logLevel: 'debug', // options: silly, debug, verbose, info -}; - -module.exports = loggerConfig; From 37bca3b92b442f4e369d3c90749fc1d852e72eb8 Mon Sep 17 00:00:00 2001 From: Bill Bittner Date: Mon, 19 Mar 2018 14:33:17 -0700 Subject: [PATCH 08/16] Delete mysqlConfig.js --- config/mysqlConfig.js | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 config/mysqlConfig.js diff --git a/config/mysqlConfig.js b/config/mysqlConfig.js deleted file mode 100644 index 155c038f..00000000 --- a/config/mysqlConfig.js +++ /dev/null @@ -1,7 +0,0 @@ -function MysqlConfig () { - this.database = 'default'; - this.username = 'default'; - this.password = 'default'; -}; - -module.exports = new MysqlConfig(); From 234ccc079afd0a7e569802e0f61818632f498b95 Mon Sep 17 00:00:00 2001 From: Bill Bittner Date: Mon, 19 Mar 2018 14:33:26 -0700 Subject: [PATCH 09/16] Delete siteConfig.js --- config/siteConfig.js | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 config/siteConfig.js diff --git a/config/siteConfig.js b/config/siteConfig.js deleted file mode 100644 index a0e91b59..00000000 --- a/config/siteConfig.js +++ /dev/null @@ -1,31 +0,0 @@ -function SiteConfig () { - this.analytics = { - googleId: 'default', - }; - this.assetDefaults = { - description: 'An asset published on Spee.ch', - thumbnail : 'https://spee.ch/assets/img/video_thumb_default.png', - title : 'Spee.ch', - }; - this.auth = { - sessionKey: 'default', - }; - this.details = { - description: 'Open-source, decentralized image and video sharing.', - host : 'default', - port : 3000, - title : 'Spee.ch', - twitter : '@spee_ch', - }; - this.publishing = { - additionalClaimAddresses: [], - disabled : false, - disabledMessage : 'Please check back soon.', - primaryClaimAddress : 'default', - thumbnailChannel : 'default', - thumbnailChannelId : 'default', - uploadDirectory : '/home/lbry/Uploads', - }; -}; - -module.exports = new SiteConfig(); From 701c8f9bef236bb8d69c26ea8f7a6fd90f0ef44d Mon Sep 17 00:00:00 2001 From: Bill Bittner Date: Mon, 19 Mar 2018 14:33:34 -0700 Subject: [PATCH 10/16] Delete slackConfig.js --- config/slackConfig.js | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 config/slackConfig.js diff --git a/config/slackConfig.js b/config/slackConfig.js deleted file mode 100644 index 8cb66f8b..00000000 --- a/config/slackConfig.js +++ /dev/null @@ -1,7 +0,0 @@ -function SlackConfig () { - this.slackWebHook = 'default'; - this.slackErrorChannel = 'default'; - this.slackInfoChannel = 'default'; -}; - -module.exports = new SlackConfig(); From 11cc91ac05794cf8c080282a0314d0b1381b7b22 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Mon, 19 Mar 2018 15:34:32 -0700 Subject: [PATCH 11/16] fixed config files --- .gitignore | 4 +- config/mysqlConfig.js.example | 10 +- config/siteConfig.js.example | 24 +- config/slackConfig.js.example | 7 - devConfig/lbryConfig.js | 6 + {config => devConfig}/lbryConfig.js.example | 4 +- devConfig/loggerConfig.js | 3 + {config => devConfig}/loggerConfig.js.example | 4 +- devConfig/slackConfig.js.example | 10 +- index.js | 10911 +++++++++++++++- index.js.map | 2 +- package.json | 2 +- server/server.js => server.js | 51 +- server/auth/authentication.js | 2 +- server/helpers/configureLogger.js | 2 +- server/helpers/configureSlack.js | 2 +- server/helpers/handlePageRender.jsx | 6 +- server/helpers/handleShowRender.jsx | 10 +- server/helpers/lbryApi.js | 2 +- server/passport/local-signup.js | 2 +- server/routes/api-routes.js | 2 +- server/task-scripts/update-channel-names.js | 2 +- webpack.server.common.js | 6 +- 23 files changed, 10989 insertions(+), 85 deletions(-) delete mode 100644 config/slackConfig.js.example create mode 100644 devConfig/lbryConfig.js rename {config => devConfig}/lbryConfig.js.example (55%) create mode 100644 devConfig/loggerConfig.js rename {config => devConfig}/loggerConfig.js.example (54%) rename server/server.js => server.js (70%) diff --git a/.gitignore b/.gitignore index 4e7cfe58..7bc3a273 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,9 @@ config/lbryConfig.js config/loggerConfig.js config/mysqlConfig.js config/siteConfig.js -config/slackConfig.js devConfig/slackConfig.js devConfig/sequelizeCliConfig.js devConfig/testingConfig.js + +public/bundle/ +index.js diff --git a/config/mysqlConfig.js.example b/config/mysqlConfig.js.example index 155c038f..58f2b2ae 100644 --- a/config/mysqlConfig.js.example +++ b/config/mysqlConfig.js.example @@ -1,7 +1,5 @@ -function MysqlConfig () { - this.database = 'default'; - this.username = 'default'; - this.password = 'default'; +module.exports = { + database: 'default', + username: 'default', + password: 'default', }; - -module.exports = new MysqlConfig(); diff --git a/config/siteConfig.js.example b/config/siteConfig.js.example index a0e91b59..de2fe86d 100644 --- a/config/siteConfig.js.example +++ b/config/siteConfig.js.example @@ -1,23 +1,23 @@ -function SiteConfig () { - this.analytics = { +module.exports = { + analytics: { googleId: 'default', - }; - this.assetDefaults = { + }, + assetDefaults: { description: 'An asset published on Spee.ch', thumbnail : 'https://spee.ch/assets/img/video_thumb_default.png', title : 'Spee.ch', - }; - this.auth = { + }, + auth: { sessionKey: 'default', - }; - this.details = { + }, + details: { description: 'Open-source, decentralized image and video sharing.', host : 'default', port : 3000, title : 'Spee.ch', twitter : '@spee_ch', - }; - this.publishing = { + }, + publishing: { additionalClaimAddresses: [], disabled : false, disabledMessage : 'Please check back soon.', @@ -25,7 +25,5 @@ function SiteConfig () { thumbnailChannel : 'default', thumbnailChannelId : 'default', uploadDirectory : '/home/lbry/Uploads', - }; + }, }; - -module.exports = new SiteConfig(); diff --git a/config/slackConfig.js.example b/config/slackConfig.js.example deleted file mode 100644 index 8cb66f8b..00000000 --- a/config/slackConfig.js.example +++ /dev/null @@ -1,7 +0,0 @@ -function SlackConfig () { - this.slackWebHook = 'default'; - this.slackErrorChannel = 'default'; - this.slackInfoChannel = 'default'; -}; - -module.exports = new SlackConfig(); diff --git a/devConfig/lbryConfig.js b/devConfig/lbryConfig.js new file mode 100644 index 00000000..dd954fcc --- /dev/null +++ b/devConfig/lbryConfig.js @@ -0,0 +1,6 @@ +module.exports = { + api: { + apiHost: 'localhost', + apiPort: '5279', + }, +}; diff --git a/config/lbryConfig.js.example b/devConfig/lbryConfig.js.example similarity index 55% rename from config/lbryConfig.js.example rename to devConfig/lbryConfig.js.example index 0e3a5c82..dd954fcc 100644 --- a/config/lbryConfig.js.example +++ b/devConfig/lbryConfig.js.example @@ -1,8 +1,6 @@ -const lbryConfig = { +module.exports = { api: { apiHost: 'localhost', apiPort: '5279', }, }; - -module.exports = lbryConfig; diff --git a/devConfig/loggerConfig.js b/devConfig/loggerConfig.js new file mode 100644 index 00000000..bbbbbbcf --- /dev/null +++ b/devConfig/loggerConfig.js @@ -0,0 +1,3 @@ +module.exports = { + logLevel: 'debug', // options: silly, debug, verbose, info +}; diff --git a/config/loggerConfig.js.example b/devConfig/loggerConfig.js.example similarity index 54% rename from config/loggerConfig.js.example rename to devConfig/loggerConfig.js.example index 18c53a95..bbbbbbcf 100644 --- a/config/loggerConfig.js.example +++ b/devConfig/loggerConfig.js.example @@ -1,5 +1,3 @@ -const loggerConfig = { +module.exports = { logLevel: 'debug', // options: silly, debug, verbose, info }; - -module.exports = loggerConfig; diff --git a/devConfig/slackConfig.js.example b/devConfig/slackConfig.js.example index 718ecdb5..9f4b8f21 100644 --- a/devConfig/slackConfig.js.example +++ b/devConfig/slackConfig.js.example @@ -1,7 +1,5 @@ -function SlackConfig () { - this.slackWebHook = null; - this.slackErrorChannel = null; - this.slackInfoChannel = null; +module.exports = { + slackWebHook : null, + slackErrorChannel: null, + slackInfoChannel : null, }; - -module.exports = new SlackConfig(); diff --git a/index.js b/index.js index dabab175..3c88b473 100644 --- a/index.js +++ b/index.js @@ -1,2 +1,10909 @@ -module.exports=function(e){function t(a){if(n[a])return n[a].exports;var r=n[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,a){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:a})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="/",t(t.s=47)}([function(e,t){e.exports=require("react")},function(e,t){e.exports=require("react-redux")},function(e,t){e.exports=require("winston")},function(e,t){e.exports=require("react-router-dom")},function(e,t,n){"use strict";function a(e){return{type:h.FILE_SELECTED,data:e}}function r(){return{type:h.FILE_CLEAR}}function l(e,t){return{type:h.METADATA_UPDATE,data:{name:e,value:t}}}function o(e){return{type:h.CLAIM_UPDATE,data:e}}function i(e){return{type:h.SET_PUBLISH_IN_CHANNEL,channel:e}}function u(e,t){return{type:h.PUBLISH_STATUS_UPDATE,data:{status:e,message:t}}}function s(e,t){return{type:h.ERROR_UPDATE,data:{name:e,value:t}}}function c(e){return{type:h.SELECTED_CHANNEL_UPDATE,data:e}}function f(e){return{type:h.TOGGLE_METADATA_INPUTS,data:e}}function d(e){return{type:h.THUMBNAIL_NEW,data:e}}function p(e){return{type:h.PUBLISH_START,data:{history:e}}}Object.defineProperty(t,"__esModule",{value:!0}),t.selectFile=a,t.clearFile=r,t.updateMetadata=l,t.updateClaim=o,t.setPublishInChannel=i,t.updatePublishStatus=u,t.updateError=s,t.updateSelectedChannel=c,t.toggleMetadataInputs=f,t.onNewThumbnail=d,t.startPublish=p;var m=n(34),h=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(m)},function(e,t,n){"use strict";function a(){var e=this;this.analytics={googleId:"default"},this.assetDefaults={description:"An asset published on Spee.ch",thumbnail:"https://spee.ch/assets/img/video_thumb_default.png",title:"Spee.ch"},this.auth={sessionKey:"default"},this.details={description:"Open-source, decentralized image and video sharing.",host:"default",port:3e3,title:"Spee.ch",twitter:"@spee_ch"},this.publishing={additionalClaimAddresses:[],disabled:!1,disabledMessage:"Please check back soon.",primaryClaimAddress:"default",thumbnailChannel:"default",thumbnailChannelId:"default",uploadDirectory:"/home/lbry/Uploads"},this.configure=function(t){if(!t)return console.log("No site config received.");var n=t.analytics,a=t.assetDefaults,r=t.auth,l=t.details,o=t.publishing;e.analytics=n,e.assetDefaults=a,e.auth=r,e.details=l,e.publishing=o}}e.exports=new a},function(e,t,n){"use strict";var a=n(26),r=n(2);console.log("exporting sequelize models");var l=n(23),o=l.database,i=l.username,u=l.password,s={},c=new a(o,i,u,{host:"localhost",dialect:"mysql",dialectOptions:{decimalNumbers:!0},logging:!1,pool:{max:5,min:0,idle:1e4,acquire:1e4}});c.authenticate().then(function(){r.info("Sequelize has established mysql connection successfully.")}).catch(function(e){r.error("Sequelize was unable to connect to the database:",e)});var f=n(63),d=n(64),p=n(65),m=n(66),h=n(67),b=n(68);s.Certificate=c.import("Certificate",f),s.Channel=c.import("Channel",d),s.Claim=c.import("Claim",p),s.File=c.import("File",m),s.Request=c.import("Request",h),s.User=c.import("User",b),Object.keys(s).forEach(function(e){s[e].associate&&(r.info("Associating model:",e),s[e].associate(s))}),s.sequelize=c,s.Sequelize=a,s.upsert=function(e,t,n,a){return e.findOne({where:n}).then(function(n){return n?(r.debug("updating record in db."+a),n.update(t)):(r.debug("creating record in db."+a),e.create(t))}).catch(function(e){throw r.error(a+".upsert error",e),e})},e.exports=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=n(1),r=n(19),l=n(4),o=n(89),i=function(e){return e&&e.__esModule?e:{default:e}}(o),u=function(e){var t=e.channel,n=e.site;return{channelName:t.loggedInChannel.name,channelShortId:t.loggedInChannel.shortId,channelLongId:t.loggedInChannel.longId,siteDescription:n.description}},s=function(e){return{onChannelLogin:function(t,n,a){e((0,r.updateLoggedInChannel)(t,n,a)),e((0,l.updateSelectedChannel)(t))},onChannelLogout:function(){e((0,r.updateLoggedInChannel)(null,null,null))}}};t.default=(0,a.connect)(u,s)(i.default)},function(e,t,n){"use strict";function a(e){return{type:g.HANDLE_SHOW_URI,data:e}}function r(e){return{type:g.REQUEST_ERROR,data:e}}function l(e,t){var n=y.CHANNEL,a="cr#"+e+"#"+t;return{type:g.CHANNEL_REQUEST_NEW,data:{requestType:n,requestId:a,channelName:e,channelId:t}}}function o(e,t,n,a,r){var l=r?y.ASSET_LITE:y.ASSET_DETAILS,o="ar#"+e+"#"+t+"#"+n+"#"+a;return{type:g.ASSET_REQUEST_NEW,data:{requestType:l,requestId:o,name:e,modifier:{id:t,channel:{name:n,id:a}}}}}function i(e,t){return{type:g.REQUEST_UPDATE,data:{requestType:e,requestId:t}}}function u(e,t,n){return{type:g.REQUEST_LIST_ADD,data:{id:e,error:t,key:n}}}function s(e,t,n,a,r,l){return{type:g.ASSET_ADD,data:{id:e,error:t,name:n,claimId:a,shortId:r,claimData:l}}}function c(e,t,n,a,r){return{type:g.CHANNEL_ADD,data:{id:e,name:t,shortId:n,longId:a,claimsData:r}}}function f(e,t,n,a){return{type:g.CHANNEL_CLAIMS_UPDATE_ASYNC,data:{channelKey:e,name:t,longId:n,page:a}}}function d(e,t){return{type:g.CHANNEL_CLAIMS_UPDATE_SUCCESS,data:{channelListId:e,claimsData:t}}}function p(e,t){return{type:g.FILE_REQUESTED,data:{name:e,claimId:t}}}function m(e){return{type:g.FILE_AVAILABILITY_UPDATE,data:e}}function h(e){return{type:g.DISPLAY_ASSET_ERROR,data:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.onHandleShowPageUri=a,t.onRequestError=r,t.onNewChannelRequest=l,t.onNewAssetRequest=o,t.onRequestUpdate=i,t.addRequestToRequestList=u,t.addAssetToAssetList=s,t.addNewChannelToChannelList=c,t.onUpdateChannelClaims=f,t.updateChannelClaims=d,t.fileRequested=p,t.updateFileAvailability=m,t.updateDisplayAssetError=h;var b=n(12),g=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(b),y=n(43)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=n(1),r=n(85),l=function(e){return e&&e.__esModule?e:{default:e}}(r),o=function(e){var t=e.site;return{defaultDescription:t.defaultDescription,defaultThumbnail:t.defaultThumbnail,siteDescription:t.description,siteHost:t.host,siteTitle:t.title,siteTwitter:t.twitter}};t.default=(0,a.connect)(o,null)(l.default)},function(e,t){e.exports=require("prop-types")},function(e,t,n){"use strict";function a(e){return 204===e.status||205===e.status?null:e.json()}function r(e,t){if(e.status>=200&&e.status<300)return t;var n=new Error(t.message);throw n.response=e,n}function l(e,t){return fetch(e,t).then(function(e){return Promise.all([e,a(e)])}).then(function(e){var t=o(e,2);return r(t[0],t[1])})}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){var n=[],a=!0,r=!1,l=void 0;try{for(var o,i=e[Symbol.iterator]();!(a=(o=i.next()).done)&&(n.push(o.value),!t||n.length!==t);a=!0);}catch(e){r=!0,l=e}finally{try{!a&&i.return&&i.return()}finally{if(r)throw l}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();t.default=l,n(92)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.HANDLE_SHOW_URI="HANDLE_SHOW_URI",t.REQUEST_ERROR="REQUEST_ERROR",t.REQUEST_UPDATE="REQUEST_UPDATE",t.ASSET_REQUEST_NEW="ASSET_REQUEST_NEW",t.CHANNEL_REQUEST_NEW="CHANNEL_REQUEST_NEW",t.REQUEST_LIST_ADD="REQUEST_LIST_ADD",t.ASSET_ADD="ASSET_ADD",t.CHANNEL_ADD="CHANNEL_ADD",t.CHANNEL_CLAIMS_UPDATE_ASYNC="CHANNEL_CLAIMS_UPDATE_ASYNC",t.CHANNEL_CLAIMS_UPDATE_SUCCESS="CHANNEL_CLAIMS_UPDATE_SUCCESS",t.FILE_REQUESTED="FILE_REQUESTED",t.FILE_AVAILABILITY_UPDATE="FILE_AVAILABILITY_UPDATE",t.DISPLAY_ASSET_ERROR="DISPLAY_ASSET_ERROR"},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.selectAsset=function(e){var t=e.requestList[e.request.id],n=t.key;return e.assetList[n]},t.selectShowState=function(e){return e.show}},function(e,t){e.exports=require("react-helmet")},function(e,t){e.exports=require("redux-saga/effects")},function(e,t,n){"use strict";var a=n(60),r=n(2),l=n(61),o=l.api,i=o.apiHost,u=o.apiPort,s="http://"+i+":"+u,c=n(17),f=c.chooseGaLbrynetPublishLabel,d=c.sendGATimingEvent,p=function(e,t,n){var a=e.data;if(r.debug("lbry api data:",a),a.result)return a.result.error?(r.debug("Lbrynet api error:",a.result.error),void n(new Error(a.result.error))):void t(a.result);n(JSON.stringify(a))};e.exports={publishClaim:function(e){r.debug('lbryApi >> Publishing claim to "'+e.name+'"');var t=Date.now();return new Promise(function(n,r){a.post(s,{method:"publish",params:e}).then(function(a){d("lbrynet","publish",f(e),t,Date.now()),p(a,n,r)}).catch(function(e){r(e)})})},getClaim:function(e){r.debug('lbryApi >> Getting Claim for "'+e+'"');var t=Date.now();return new Promise(function(n,r){a.post(s,{method:"get",params:{uri:e,timeout:20}}).then(function(e){d("lbrynet","getClaim","GET",t,Date.now()),p(e,n,r)}).catch(function(e){r(e)})})},getClaimList:function(e){r.debug('lbryApi >> Getting claim_list for "'+e+'"');var t=Date.now();return new Promise(function(n,r){a.post(s,{method:"claim_list",params:{name:e}}).then(function(e){d("lbrynet","getClaimList","CLAIM_LIST",t,Date.now()),p(e,n,r)}).catch(function(e){r(e)})})},resolveUri:function(e){r.debug('lbryApi >> Resolving URI for "'+e+'"');var t=Date.now();return new Promise(function(n,r){a.post(s,{method:"resolve",params:{uri:e}}).then(function(a){var l=a.data;d("lbrynet","resolveUri","RESOLVE",t,Date.now()),l.result[e].error?r(l.result[e].error):n(l.result[e])}).catch(function(e){r(e)})})},getDownloadDirectory:function(){r.debug("lbryApi >> Retrieving the download directory path from lbry daemon...");var e=Date.now();return new Promise(function(t,n){a.post(s,{method:"settings_get"}).then(function(n){var a=n.data;if(d("lbrynet","getDownloadDirectory","SETTINGS_GET",e,Date.now()),!a.result)return new Error("Successfully connected to lbry daemon, but unable to retrieve the download directory.");t(a.result.download_directory)}).catch(function(e){r.error("Lbrynet Error:",e),t("/home/lbry/Downloads/")})})},createChannel:function(e){r.debug("lbryApi >> Creating channel for "+e+"...");var t=Date.now();return new Promise(function(n,r){a.post(s,{method:"channel_new",params:{channel_name:e,amount:.1}}).then(function(e){d("lbrynet","createChannel","CHANNEL_NEW",t,Date.now()),p(e,n,r)}).catch(function(e){r(e)})})}}},function(e,t,n){"use strict";function a(e,t,n){return{eventCategory:"client requests",eventAction:"serve request",eventLabel:n,ipOverride:t,userAgentOverride:e["user-agent"]}}function r(e,t,n,a,r){return{userTimingCategory:e,userTimingVariableName:t,userTimingTime:r-a,userTimingLabel:n}}function l(e,t){var n=e.replace(/\./g,"-");u(c,n,{strictCidFormat:!1,https:!0}).event(t,function(e){e&&i.error("Google Analytics Event Error >>",e)})}function o(e,t){u(c,e,{strictCidFormat:!1,https:!0}).timing(t,function(e){e&&i.error("Google Analytics Event Error >>",e),i.debug("Timing event successfully sent to google analytics")})}var i=n(2),u=n(62),s=n(5),c=s.analytics.googleId,f=s.details.title;e.exports={sendGAServeEvent:function(e,t,n){l(t,a(e,t,n))},sendGATimingEvent:function(e,t,n,a,l){var i=r(e,t,n,a,l);o(f,i)},chooseGaLbrynetPublishLabel:function(e){var t=e.channel_name,n=e.channel_id;return t||n?"PUBLISH_IN_CHANNEL_CLAIM":"PUBLISH_ANONYMOUS_CLAIM"}}},function(e,t){e.exports=require("redux")},function(e,t,n){"use strict";function a(e,t,n){return{type:l.CHANNEL_UPDATE,data:{name:e,shortId:t,longId:n}}}Object.defineProperty(t,"__esModule",{value:!0}),t.updateLoggedInChannel=a;var r=n(36),l=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;nthis.props.size)&&(t*=-1,e+=t),n[e].isActive=t>0,e+=t,this.setState({bars:n,incrementer:t,index:e})}},{key:"stopProgressBar",value:function(){clearInterval(this.updateInterval)}},{key:"render",value:function(){return s.default.createElement("div",null,this.state.bars.map(function(e,t){return e.isActive?s.default.createElement(p.default,{key:t}):s.default.createElement(h.default,{key:t})}))}}]),t}(s.default.Component);b.propTypes={size:f.default.number.isRequired},t.default=b},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0;)r+=1,a=t.substring(0,r),l=l.filter(function(e){return e.claimId&&e.claimId.substring(0,r)===a});return a}}},function(e,t,n){"use strict";var a=n(2),r=n(75),l=n(5),o=l.details,i=l.publishing;e.exports={parsePublishApiRequestBody:function(e){var t=e.name,n=e.nsfw,a=e.license,r=e.title,l=e.description,o=e.thumbnail;if(!t)throw new Error("no name field found in request");if(/[^A-Za-z0-9,-]/.exec(t))throw new Error('The claim name you provided is not allowed. Only the following characters are allowed: A-Z, a-z, 0-9, and "-"');return n="true"===n,a=a||null,r=r||null,l=l||null,o=o||null,{name:t,nsfw:n,license:a,title:r,description:l,thumbnail:o}},parsePublishApiRequestFiles:function(t){var n=t.file,a=t.thumbnail;if(!n)throw new Error("no file with key of [file] found in request");if(!n.path)throw new Error("no file path found");if(!n.type)throw new Error("no file type found");if(!n.size)throw new Error("no file type found");if(/'/.test(n.name))throw new Error("apostrophes are not allowed in the file name");return e.exports.validateFileTypeAndSize(n),{fileName:n.name,filePath:n.path,fileType:n.type,thumbnailFileName:a?a.name:null,thumbnailFilePath:a?a.path:null,thumbnailFileType:a?a.type:null}},validateFileTypeAndSize:function(e){switch(e.type){case"image/jpeg":case"image/jpg":case"image/png":if(e.size>1e7)throw a.debug("publish > file validation > .jpeg/.jpg/.png was too big"),new Error("Sorry, images are limited to 10 megabytes.");break;case"image/gif":if(e.size>5e7)throw a.debug("publish > file validation > .gif was too big"),new Error("Sorry, .gifs are limited to 50 megabytes.");break;case"video/mp4":if(e.size>5e7)throw a.debug("publish > file validation > .mp4 was too big"),new Error("Sorry, videos are limited to 50 megabytes.");break;default:throw a.debug("publish > file validation > unrecognized file type"),new Error("The "+e.type+" content type is not supported. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.")}return e},createBasicPublishParams:function(e,t,n,r,l,u,s){a.debug("Creating Publish Parameters"),null!==n&&""!==n.trim()||(n=t),null!==r&&""!==r.trim()||(r=""),null!==l&&""!==l.trim()||(l=" ");var c={name:t,file_path:e,bid:.01,metadata:{description:r,title:n,author:o.title,language:"en",license:l,nsfw:u},claim_address:i.primaryClaimAddress};return s&&(c.metadata.thumbnail=s),c},createThumbnailPublishParams:function(e,t,n,r){if(e)return a.debug("Creating Thumbnail Publish Parameters"),{name:t+"-thumb",file_path:e,bid:.01,metadata:{title:t+" thumbnail",description:"a thumbnail for "+t,author:o.title,language:"en",license:n,nsfw:r},claim_address:i.primaryClaimAddress,channel_name:i.thumbnailChannel,channel_id:i.thumbnailChannelId}},deleteTemporaryFile:function(e){r.unlink(e,function(t){if(t)throw a.error("error deleting temporary file "+e),t;a.debug("successfully deleted "+e)})},addGetResultsToFileData:function(e,t){return e.fileName=t.file_name,e.filePath=t.download_path,e},createFileData:function(e){var t=e.name,n=e.claimId,a=e.outpoint,r=e.height,l=e.address,o=e.nsfw;return{name:t,claimId:n,outpoint:a,height:r,address:l,fileName:"",filePath:"",fileType:e.contentType,nsfw:o}}}},function(e,t,n){"use strict";var a=function(){function e(e,t){var n=[],a=!0,r=!1,l=void 0;try{for(var o,i=e[Symbol.iterator]();!(a=(o=i.next()).done)&&(n.push(o.value),!t||n.length!==t);a=!0);}catch(e){r=!0,l=e}finally{try{!a&&i.return&&i.return()}finally{if(r)throw l}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=n(2);e.exports={handleErrorResponse:function(t,n,l,o){r.error("Error on "+t,e.exports.useObjectPropertiesIfNoKeys(l));var i=e.exports.returnErrorMessageAndStatus(l),u=a(i,2),s=u[0],c=u[1];o.status(s).json(e.exports.createErrorResponsePayload(s,c))},returnErrorMessageAndStatus:function(e){var t=void 0,n=void 0;return"ECONNREFUSED"===e.code?(t=503,n="Connection refused. The daemon may not be running."):(t=400,n=e.message?e.message:e),[t,n]},useObjectPropertiesIfNoKeys:function(e){if(0===Object.keys(e).length){var t={};return Object.getOwnPropertyNames(e).forEach(function(n){t[n]=e[n]}),t}return e},createErrorResponsePayload:function(e,t){return{status:e,success:!1,message:t}}}},function(e,t,n){"use strict";var a=function(){function e(e,t){var n=[],a=!0,r=!1,l=void 0;try{for(var o,i=e[Symbol.iterator]();!(a=(o=i.next()).done)&&(n.push(o.value),!t||n.length!==t);a=!0);}catch(e){r=!0,l=e}finally{try{!a&&i.return&&i.return()}finally{if(r)throw l}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=n(6),l=n(2),o=n(77),i=o.returnPaginatedChannelClaims;e.exports={getClaimId:function(t,n,a,r){return t?e.exports.getClaimIdByChannel(t,n,a):e.exports.getClaimIdByClaim(a,r)},getClaimIdByClaim:function(e,t){return l.debug("getClaimIdByClaim("+e+", "+t+")"),new Promise(function(n,a){r.Claim.getLongClaimId(e,t).then(function(e){e||n("NO_CLAIM"),n(e)}).catch(function(e){a(e)})})},getClaimIdByChannel:function(e,t,n){return l.debug("getClaimIdByChannel("+e+", "+t+", "+n+")"),new Promise(function(l,o){r.Certificate.getLongChannelId(e,t).then(function(e){return e?Promise.all([e,r.Claim.getClaimIdByLongChannelId(e,n)]):[null,null]}).then(function(e){var t=a(e,2),n=t[0],r=t[1];return n?r?void l(r):l("NO_CLAIM"):l("NO_CHANNEL")}).catch(function(e){o(e)})})},getChannelData:function(e,t,n){return new Promise(function(n,l){r.Certificate.getLongChannelId(e,t).then(function(t){return t?Promise.all([t,r.Certificate.getShortChannelIdFromLongChannelId(t,e)]):[null,null,null]}).then(function(t){var r=a(t,2),l=r[0],o=r[1];if(!l)return n("NO_CHANNEL");n({channelName:e,longChannelClaimId:l,shortChannelClaimId:o})}).catch(function(e){l(e)})})},getChannelClaims:function(e,t,n){return new Promise(function(l,o){r.Certificate.getLongChannelId(e,t).then(function(e){return e?Promise.all([e,r.Claim.getAllChannelClaims(e)]):[null,null,null]}).then(function(t){var r=a(t,2),o=r[0],u=r[1];if(!o)return l("NO_CHANNEL");var s=i(e,o,u,n);l(s)}).catch(function(e){o(e)})})},getLocalFileRecord:function(e,t){return r.File.findOne({where:{claimId:e,name:t}}).then(function(e){return e?e.dataValues:"NO_FILE"})}}},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}var r=n(0),l=a(r),o=n(32),i=n(18),u=n(33),s=a(u),c=n(1),f=n(3),d=n(38),p=a(d),m=n(39),h=a(m),b=n(45),g=a(b),y=n(14),v=a(y);e.exports=function(e,t){var n={},a=(0,i.createStore)(s.default),r=(0,o.renderToString)(l.default.createElement(c.Provider,{store:a},l.default.createElement(f.StaticRouter,{location:e.url,context:n},l.default.createElement(p.default,null,l.default.createElement(h.default,null))))),u=v.default.renderStatic();if(n.url)return t.redirect(301,n.url);var d=a.getState();t.send((0,g.default)(u,r,d))}},function(e,t){e.exports=require("react-dom/server")},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(18),l=n(79),o=a(l),i=n(80),u=a(i),s=n(81),c=a(s),f=n(82),d=a(f);t.default=(0,r.combineReducers)({channel:u.default,publish:o.default,show:c.default,site:d.default})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.FILE_SELECTED="FILE_SELECTED",t.FILE_CLEAR="FILE_CLEAR",t.METADATA_UPDATE="METADATA_UPDATE",t.CLAIM_UPDATE="CLAIM_UPDATE",t.SET_PUBLISH_IN_CHANNEL="SET_PUBLISH_IN_CHANNEL",t.PUBLISH_STATUS_UPDATE="PUBLISH_STATUS_UPDATE",t.ERROR_UPDATE="ERROR_UPDATE",t.SELECTED_CHANNEL_UPDATE="SELECTED_CHANNEL_UPDATE",t.TOGGLE_METADATA_INPUTS="TOGGLE_METADATA_INPUTS",t.THUMBNAIL_NEW="THUMBNAIL_NEW",t.PUBLISH_START="PUBLISH_START"},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.LOGIN="Existing",t.CREATE="New"},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.CHANNEL_UPDATE="CHANNEL_UPDATE"},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.LOCAL_CHECK="LOCAL_CHECK",t.UNAVAILABLE="UNAVAILABLE",t.ERROR="ERROR",t.AVAILABLE="AVAILABLE"},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n\n \n \n \n \n \n \x3c!--helmet--\x3e\n '+e.title.toString()+"\n "+e.meta.toString()+"\n "+e.link.toString()+'\n \x3c!--style sheets--\x3e\n \n \n \n \x3c!--google font--\x3e\n \n \n \n
\n
'+t+"
\n
\n \n \n \n \n '; +}; + +/***/ }), +/* 44 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var selectSiteState = exports.selectSiteState = function selectSiteState(state) { + return state.site; +}; + +var selectSiteHost = exports.selectSiteHost = function selectSiteHost(state) { + return state.site.host; +}; + +/***/ }), +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(46); +__webpack_require__(47); +module.exports = __webpack_require__(48); + + +/***/ }), +/* 46 */ +/***/ (function(module, exports) { + +module.exports = require("babel-polyfill"); + +/***/ }), +/* 47 */ +/***/ (function(module, exports) { + +module.exports = require("whatwg-fetch"); + +/***/ }), +/* 48 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// app dependencies +var express = __webpack_require__(49); +var bodyParser = __webpack_require__(50); +var expressHandlebars = __webpack_require__(51); +var Handlebars = __webpack_require__(52); +var helmet = __webpack_require__(53); +var passport = __webpack_require__(22); + +var _require = __webpack_require__(54), + serializeSpeechUser = _require.serializeSpeechUser, + deserializeSpeechUser = _require.deserializeSpeechUser; + +var cookieSession = __webpack_require__(55); +var http = __webpack_require__(56); +// logging dependencies +var logger = __webpack_require__(2); +// configure logger +__webpack_require__(57)(logger); +__webpack_require__(59)(logger); + +var _require2 = __webpack_require__(5), + sessionKey = _require2.auth.sessionKey, + PORT = _require2.details.port; + +// create an Express application + + +var app = express(); + +// trust the proxy to get ip address for us +app.enable('trust proxy'); + +// add middleware +app.use(helmet()); // set HTTP headers to protect against well-known web vulnerabilties +app.use(express.static(__dirname + '/public')); // 'express.static' to serve static files from public directory +app.use(bodyParser.json()); // 'body parser' for parsing application/json +app.use(bodyParser.urlencoded({ extended: true })); // 'body parser' for parsing application/x-www-form-urlencoded +app.use(function (req, res, next) { + // custom logging middleware to log all incoming http requests + logger.verbose('Request on ' + req.originalUrl + ' from ' + req.ip); + next(); +}); + +// configure passport +passport.serializeUser(serializeSpeechUser); +passport.deserializeUser(deserializeSpeechUser); +var localSignupStrategy = __webpack_require__(62); +var localLoginStrategy = __webpack_require__(74); +passport.use('local-signup', localSignupStrategy); +passport.use('local-login', localLoginStrategy); +// initialize passport +app.use(cookieSession({ + name: 'session', + keys: [sessionKey], + maxAge: 24 * 60 * 60 * 1000 // i.e. 24 hours +})); +app.use(passport.initialize()); +app.use(passport.session()); + +// configure handlebars & register it with express app +var hbs = expressHandlebars.create({ + defaultLayout: 'embed', + handlebars: Handlebars +}); +app.engine('handlebars', hbs.engine); +app.set('view engine', 'handlebars'); + +// set the routes on the app +__webpack_require__(75)(app); +__webpack_require__(76)(app); +__webpack_require__(82)(app); +__webpack_require__(147)(app); +__webpack_require__(158)(app); + +// create server +var server = http.Server(app); + +// sync sequelize +var db = __webpack_require__(6); +db.sequelize.sync() +// start the server +.then(function () { + server.listen(PORT, function () { + logger.info('Server is listening on PORT ' + PORT); + }); +}).catch(function (error) { + logger.error('Startup Error:', error); +}); + +/***/ }), +/* 49 */ +/***/ (function(module, exports) { + +module.exports = require("express"); + +/***/ }), +/* 50 */ +/***/ (function(module, exports) { + +module.exports = require("body-parser"); + +/***/ }), +/* 51 */ +/***/ (function(module, exports) { + +module.exports = require("express-handlebars"); + +/***/ }), +/* 52 */ +/***/ (function(module, exports) { + +module.exports = require("handlebars"); + +/***/ }), +/* 53 */ +/***/ (function(module, exports) { + +module.exports = require("helmet"); + +/***/ }), +/* 54 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var logger = __webpack_require__(2); + +module.exports = { + serializeSpeechUser: function serializeSpeechUser(user, done) { + // returns user data to be serialized into session + logger.debug('serializing user'); + done(null, user); + }, + deserializeSpeechUser: function deserializeSpeechUser(user, done) { + // deserializes session and populates additional info to req.user + logger.debug('deserializing user'); + done(null, user); + } +}; + +/***/ }), +/* 55 */ +/***/ (function(module, exports) { + +module.exports = require("cookie-session"); + +/***/ }), +/* 56 */ +/***/ (function(module, exports) { + +module.exports = require("http"); + +/***/ }), +/* 57 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _require = __webpack_require__(58), + logLevel = _require.logLevel; + +module.exports = function (winston) { + // configure + winston.configure({ + transports: [new winston.transports.Console({ + level: logLevel, + timestamp: false, + colorize: true, + prettyPrint: true, + handleExceptions: true, + humanReadableUnhandledException: true + })] + }); + // test all the log levels + winston.error('Level 0'); + winston.warn('Level 1'); + winston.info('Level 2'); + winston.verbose('Level 3'); + winston.debug('Level 4'); + winston.silly('Level 5'); +}; + +/***/ }), +/* 58 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var loggerConfig = { + logLevel: 'debug' // options: silly, debug, verbose, info +}; + +module.exports = loggerConfig; + +/***/ }), +/* 59 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var winstonSlackWebHook = __webpack_require__(60).SlackWebHook; +var slackConfig = __webpack_require__(61); + +module.exports = function (winston) { + var slackWebHook = slackConfig.slackWebHook, + slackErrorChannel = slackConfig.slackErrorChannel, + slackInfoChannel = slackConfig.slackInfoChannel; + + if (slackWebHook) { + // add a transport for errors to slack + if (slackErrorChannel) { + winston.add(winstonSlackWebHook, { + name: 'slack-errors-transport', + level: 'warn', + webhookUrl: slackWebHook, + channel: slackErrorChannel, + username: 'spee.ch', + iconEmoji: ':face_with_head_bandage:' + }); + }; + if (slackInfoChannel) { + winston.add(winstonSlackWebHook, { + name: 'slack-info-transport', + level: 'info', + webhookUrl: slackWebHook, + channel: slackInfoChannel, + username: 'spee.ch', + iconEmoji: ':nerd_face:' + }); + }; + // send test message + winston.error('Slack "error" logging is online.'); + winston.info('Slack "info" logging is online.'); + } else { + winston.warn('Slack logging is not enabled because no slackWebHook config var provided.'); + } +}; + +/***/ }), +/* 60 */ +/***/ (function(module, exports) { + +module.exports = require("winston-slack-webhook"); + +/***/ }), +/* 61 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function SlackConfig() { + this.slackWebHook = 'default'; + this.slackErrorChannel = 'default'; + this.slackInfoChannel = 'default'; +}; + +module.exports = new SlackConfig(); + +/***/ }), +/* 62 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var PassportLocalStrategy = __webpack_require__(23).Strategy; +var lbryApi = __webpack_require__(16); +var logger = __webpack_require__(2); +var db = __webpack_require__(6); + +module.exports = new PassportLocalStrategy({ + usernameField: 'username', + passwordField: 'password' +}, function (username, password, done) { + logger.verbose('new channel signup request. user: ' + username + ' pass: ' + password + ' .'); + var userInfo = {}; + // server-side validaton of inputs (username, password) + + // create the channel and retrieve the metadata + return lbryApi.createChannel('@' + username).then(function (tx) { + // create user record + var userData = { + userName: username, + password: password + }; + logger.verbose('userData >', userData); + // create user record + var channelData = { + channelName: '@' + username, + channelClaimId: tx.claim_id + }; + logger.verbose('channelData >', channelData); + // create certificate record + var certificateData = { + claimId: tx.claim_id, + name: '@' + username + // address, + }; + logger.verbose('certificateData >', certificateData); + // save user and certificate to db + return Promise.all([db.User.create(userData), db.Channel.create(channelData), db.Certificate.create(certificateData)]); + }).then(function (_ref) { + var _ref2 = _slicedToArray(_ref, 3), + newUser = _ref2[0], + newChannel = _ref2[1], + newCertificate = _ref2[2]; + + logger.verbose('user and certificate successfully created'); + // store the relevant newUser info to be passed back for req.User + userInfo['id'] = newUser.id; + userInfo['userName'] = newUser.userName; + userInfo['channelName'] = newChannel.channelName; + userInfo['channelClaimId'] = newChannel.channelClaimId; + // associate the instances + return Promise.all([newCertificate.setChannel(newChannel), newChannel.setUser(newUser)]); + }).then(function () { + logger.verbose('user and certificate successfully associated'); + return db.Certificate.getShortChannelIdFromLongChannelId(userInfo.channelClaimId, userInfo.channelName); + }).then(function (shortChannelId) { + userInfo['shortChannelId'] = shortChannelId; + return done(null, userInfo); + }).catch(function (error) { + logger.error('signup error', error); + return done(error); + }); +}); + +/***/ }), +/* 63 */ +/***/ (function(module, exports) { + +module.exports = require("axios"); + +/***/ }), +/* 64 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var lbryConfig = { + api: { + apiHost: 'localhost', + apiPort: '5279' + } +}; + +module.exports = lbryConfig; + +/***/ }), +/* 65 */ +/***/ (function(module, exports) { + +module.exports = require("universal-analytics"); + +/***/ }), +/* 66 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function MysqlConfig() { + this.database = 'default'; + this.username = 'default'; + this.password = 'default'; +}; + +module.exports = new MysqlConfig(); + +/***/ }), +/* 67 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var logger = __webpack_require__(2); + +var _require = __webpack_require__(25), + returnShortId = _require.returnShortId; + +module.exports = function (sequelize, _ref) { + var STRING = _ref.STRING, + BOOLEAN = _ref.BOOLEAN, + INTEGER = _ref.INTEGER, + TEXT = _ref.TEXT, + DECIMAL = _ref.DECIMAL; + + var Certificate = sequelize.define('Certificate', { + address: { + type: STRING, + default: null + }, + amount: { + type: DECIMAL(19, 8), + default: null + }, + claimId: { + type: STRING, + default: null + }, + claimSequence: { + type: INTEGER, + default: null + }, + decodedClaim: { + type: BOOLEAN, + default: null + }, + depth: { + type: INTEGER, + default: null + }, + effectiveAmount: { + type: DECIMAL(19, 8), + default: null + }, + hasSignature: { + type: BOOLEAN, + default: null + }, + height: { + type: INTEGER, + default: null + }, + hex: { + type: TEXT('long'), + default: null + }, + name: { + type: STRING, + default: null + }, + nout: { + type: INTEGER, + default: null + }, + txid: { + type: STRING, + default: null + }, + validAtHeight: { + type: INTEGER, + default: null + }, + outpoint: { + type: STRING, + default: null + }, + valueVersion: { + type: STRING, + default: null + }, + claimType: { + type: STRING, + default: null + }, + certificateVersion: { + type: STRING, + default: null + }, + keyType: { + type: STRING, + default: null + }, + publicKey: { + type: TEXT('long'), + default: null + } + }, { + freezeTableName: true + }); + + Certificate.associate = function (db) { + Certificate.belongsTo(db.Channel, { + foreignKey: { + allowNull: true + } + }); + }; + + Certificate.getShortChannelIdFromLongChannelId = function (longChannelId, channelName) { + var _this = this; + + logger.debug('getShortChannelIdFromLongChannelId ' + channelName + ':' + longChannelId); + return new Promise(function (resolve, reject) { + _this.findAll({ + where: { name: channelName }, + order: [['height', 'ASC']] + }).then(function (result) { + switch (result.length) { + case 0: + throw new Error('No channel(s) found with that channel name'); + default: + return resolve(returnShortId(result, longChannelId)); + } + }).catch(function (error) { + reject(error); + }); + }); + }; + + Certificate.getLongChannelIdFromShortChannelId = function (channelName, channelClaimId) { + var _this2 = this; + + logger.debug('getLongChannelIdFromShortChannelId(' + channelName + ', ' + channelClaimId + ')'); + return new Promise(function (resolve, reject) { + _this2.findAll({ + where: { + name: channelName, + claimId: { + $like: channelClaimId + '%' + } + }, + order: [['height', 'ASC']] + }).then(function (result) { + switch (result.length) { + case 0: + return resolve(null); + default: + // note results must be sorted + return resolve(result[0].claimId); + } + }).catch(function (error) { + reject(error); + }); + }); + }; + + Certificate.getLongChannelIdFromChannelName = function (channelName) { + var _this3 = this; + + logger.debug('getLongChannelIdFromChannelName(' + channelName + ')'); + return new Promise(function (resolve, reject) { + _this3.findAll({ + where: { name: channelName }, + order: [['effectiveAmount', 'DESC'], ['height', 'ASC']] + }).then(function (result) { + switch (result.length) { + case 0: + return resolve(null); + default: + return resolve(result[0].claimId); + } + }).catch(function (error) { + reject(error); + }); + }); + }; + + Certificate.validateLongChannelId = function (name, claimId) { + var _this4 = this; + + logger.debug('validateLongChannelId(' + name + ', ' + claimId + ')'); + return new Promise(function (resolve, reject) { + _this4.findOne({ + where: { name: name, claimId: claimId } + }).then(function (result) { + if (!result) { + return resolve(null); + }; + resolve(claimId); + }).catch(function (error) { + reject(error); + }); + }); + }; + + Certificate.getLongChannelId = function (channelName, channelClaimId) { + logger.debug('getLongChannelId(' + channelName + ', ' + channelClaimId + ')'); + if (channelClaimId && channelClaimId.length === 40) { + // if a full channel id is provided + return this.validateLongChannelId(channelName, channelClaimId); + } else if (channelClaimId && channelClaimId.length < 40) { + // if a short channel id is provided + return this.getLongChannelIdFromShortChannelId(channelName, channelClaimId); + } else { + return this.getLongChannelIdFromChannelName(channelName); // if no channel id provided + } + }; + + return Certificate; +}; + +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = function (sequelize, _ref) { + var STRING = _ref.STRING; + + var Channel = sequelize.define('Channel', { + channelName: { + type: STRING, + allowNull: false + }, + channelClaimId: { + type: STRING, + allowNull: false + } + }, { + freezeTableName: true + }); + + Channel.associate = function (db) { + Channel.belongsTo(db.User); + Channel.hasOne(db.Certificate); + }; + + return Channel; +}; + +/***/ }), +/* 69 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var logger = __webpack_require__(2); + +var _require = __webpack_require__(25), + returnShortId = _require.returnShortId; + +var _require2 = __webpack_require__(5), + defaultThumbnail = _require2.assetDefaults.thumbnail, + host = _require2.details.host; + +function determineFileExtensionFromContentType(contentType) { + switch (contentType) { + case 'image/jpeg': + case 'image/jpg': + return 'jpeg'; + case 'image/png': + return 'png'; + case 'image/gif': + return 'gif'; + case 'video/mp4': + return 'mp4'; + default: + logger.debug('setting unknown file type as file extension jpeg'); + return 'jpeg'; + } +}; + +function determineThumbnail(storedThumbnail, defaultThumbnail) { + if (storedThumbnail === '') { + return defaultThumbnail; + } + return storedThumbnail; +}; + +function prepareClaimData(claim) { + // logger.debug('preparing claim data based on resolved data:', claim); + claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail); + claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType); + claim['host'] = host; + return claim; +}; + +module.exports = function (sequelize, _ref) { + var STRING = _ref.STRING, + BOOLEAN = _ref.BOOLEAN, + INTEGER = _ref.INTEGER, + TEXT = _ref.TEXT, + DECIMAL = _ref.DECIMAL; + + var Claim = sequelize.define('Claim', { + address: { + type: STRING, + default: null + }, + amount: { + type: DECIMAL(19, 8), + default: null + }, + claimId: { + type: STRING, + default: null + }, + claimSequence: { + type: INTEGER, + default: null + }, + decodedClaim: { + type: BOOLEAN, + default: null + }, + depth: { + type: INTEGER, + default: null + }, + effectiveAmount: { + type: DECIMAL(19, 8), + default: null + }, + hasSignature: { + type: BOOLEAN, + default: null + }, + height: { + type: INTEGER, + default: null + }, + hex: { + type: TEXT('long'), + default: null + }, + name: { + type: STRING, + default: null + }, + nout: { + type: INTEGER, + default: null + }, + txid: { + type: STRING, + default: null + }, + validAtHeight: { + type: INTEGER, + default: null + }, + outpoint: { + type: STRING, + default: null + }, + claimType: { + type: STRING, + default: null + }, + certificateId: { + type: STRING, + default: null + }, + author: { + type: STRING, + default: null + }, + description: { + type: TEXT('long'), + default: null + }, + language: { + type: STRING, + default: null + }, + license: { + type: STRING, + default: null + }, + licenseUrl: { + type: STRING, + default: null + }, + nsfw: { + type: BOOLEAN, + default: null + }, + preview: { + type: STRING, + default: null + }, + thumbnail: { + type: STRING, + default: null + }, + title: { + type: STRING, + default: null + }, + metadataVersion: { + type: STRING, + default: null + }, + contentType: { + type: STRING, + default: null + }, + source: { + type: STRING, + default: null + }, + sourceType: { + type: STRING, + default: null + }, + sourceVersion: { + type: STRING, + default: null + }, + streamVersion: { + type: STRING, + default: null + }, + valueVersion: { + type: STRING, + default: null + }, + channelName: { + type: STRING, + allowNull: true, + default: null + } + }, { + freezeTableName: true + }); + + Claim.associate = function (db) { + Claim.belongsTo(db.File, { + foreignKey: { + allowNull: true + } + }); + }; + + Claim.getShortClaimIdFromLongClaimId = function (claimId, claimName) { + var _this = this; + + logger.debug('Claim.getShortClaimIdFromLongClaimId for ' + claimName + '#' + claimId); + return new Promise(function (resolve, reject) { + _this.findAll({ + where: { name: claimName }, + order: [['height', 'ASC']] + }).then(function (result) { + switch (result.length) { + case 0: + throw new Error('No claim(s) found with that claim name'); + default: + resolve(returnShortId(result, claimId)); + } + }).catch(function (error) { + reject(error); + }); + }); + }; + + Claim.getAllChannelClaims = function (channelClaimId) { + var _this2 = this; + + logger.debug('Claim.getAllChannelClaims for ' + channelClaimId); + return new Promise(function (resolve, reject) { + _this2.findAll({ + where: { certificateId: channelClaimId }, + order: [['height', 'ASC']], + raw: true // returns an array of only data, not an array of instances + }).then(function (channelClaimsArray) { + // logger.debug('channelclaimsarray length:', channelClaimsArray.length); + switch (channelClaimsArray.length) { + case 0: + return resolve(null); + default: + channelClaimsArray.forEach(function (claim) { + claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType); + claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail); + return claim; + }); + return resolve(channelClaimsArray); + } + }).catch(function (error) { + reject(error); + }); + }); + }; + + Claim.getClaimIdByLongChannelId = function (channelClaimId, claimName) { + var _this3 = this; + + logger.debug('finding claim id for claim ' + claimName + ' from channel ' + channelClaimId); + return new Promise(function (resolve, reject) { + _this3.findAll({ + where: { name: claimName, certificateId: channelClaimId }, + order: [['id', 'ASC']] + }).then(function (result) { + switch (result.length) { + case 0: + return resolve(null); + case 1: + return resolve(result[0].claimId); + default: + logger.error(result.length + ' records found for "' + claimName + '" in channel "' + channelClaimId + '"'); + return resolve(result[0].claimId); + } + }).catch(function (error) { + reject(error); + }); + }); + }; + + Claim.getLongClaimIdFromShortClaimId = function (name, shortId) { + var _this4 = this; + + return new Promise(function (resolve, reject) { + _this4.findAll({ + where: { + name: name, + claimId: { + $like: shortId + '%' + } }, + order: [['height', 'ASC']] + }).then(function (result) { + switch (result.length) { + case 0: + return resolve(null); + default: + // note results must be sorted + return resolve(result[0].claimId); + } + }).catch(function (error) { + reject(error); + }); + }); + }; + + Claim.getTopFreeClaimIdByClaimName = function (name) { + var _this5 = this; + + return new Promise(function (resolve, reject) { + _this5.findAll({ + where: { name: name }, + order: [['effectiveAmount', 'DESC'], ['height', 'ASC']] // note: maybe height and effective amount need to switch? + }).then(function (result) { + logger.debug('length of result', result.length); + switch (result.length) { + case 0: + return resolve(null); + default: + return resolve(result[0].dataValues.claimId); + } + }).catch(function (error) { + reject(error); + }); + }); + }; + + Claim.validateLongClaimId = function (name, claimId) { + var _this6 = this; + + return new Promise(function (resolve, reject) { + _this6.findOne({ + where: { name: name, claimId: claimId } + }).then(function (result) { + if (!result) { + return resolve(null); + }; + resolve(claimId); + }).catch(function (error) { + reject(error); + }); + }); + }; + + Claim.getLongClaimId = function (claimName, claimId) { + logger.debug('getLongClaimId(' + claimName + ', ' + claimId + ')'); + if (claimId && claimId.length === 40) { + // if a full claim id is provided + return this.validateLongClaimId(claimName, claimId); + } else if (claimId && claimId.length < 40) { + return this.getLongClaimIdFromShortClaimId(claimName, claimId); // if a short claim id is provided + } else { + return this.getTopFreeClaimIdByClaimName(claimName); // if no claim id is provided + } + }; + + Claim.resolveClaim = function (name, claimId) { + var _this7 = this; + + logger.debug('Claim.resolveClaim: ' + name + ' ' + claimId); + return new Promise(function (resolve, reject) { + _this7.findAll({ + where: { name: name, claimId: claimId } + }).then(function (claimArray) { + switch (claimArray.length) { + case 0: + return resolve(null); + case 1: + return resolve(prepareClaimData(claimArray[0].dataValues)); + default: + logger.error('more than one record matches ' + name + '#' + claimId + ' in db.Claim'); + return resolve(prepareClaimData(claimArray[0].dataValues)); + } + }).catch(function (error) { + reject(error); + }); + }); + }; + + return Claim; +}; + +/***/ }), +/* 70 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = function (sequelize, _ref) { + var STRING = _ref.STRING, + BOOLEAN = _ref.BOOLEAN, + INTEGER = _ref.INTEGER; + + var File = sequelize.define('File', { + name: { + type: STRING, + allowNull: false + }, + claimId: { + type: STRING, + allowNull: false + }, + address: { + type: STRING, + allowNull: false + }, + outpoint: { + type: STRING, + allowNull: false + }, + height: { + type: INTEGER, + allowNull: false, + default: 0 + }, + fileName: { + type: STRING, + allowNull: false + }, + filePath: { + type: STRING, + allowNull: false + }, + fileType: { + type: STRING + }, + nsfw: { + type: BOOLEAN, + allowNull: false, + defaultValue: false + }, + trendingEligible: { + type: BOOLEAN, + allowNull: false, + defaultValue: true + } + }, { + freezeTableName: true + }); + + File.associate = function (db) { + File.hasMany(db.Request); + File.hasOne(db.Claim); + }; + + File.getRecentClaims = function () { + return this.findAll({ + where: { nsfw: false, trendingEligible: true }, + order: [['createdAt', 'DESC']], + limit: 25 + }); + }; + + return File; +}; + +/***/ }), +/* 71 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = function (sequelize, _ref) { + var STRING = _ref.STRING, + BOOLEAN = _ref.BOOLEAN, + TEXT = _ref.TEXT; + + var Request = sequelize.define('Request', { + action: { + type: STRING, + allowNull: false + }, + url: { + type: STRING, + allowNull: false + }, + ipAddress: { + type: STRING, + allowNull: true + }, + result: { + type: TEXT('long'), + allowNull: true, + default: null + } + }, { + freezeTableName: true + }); + + Request.associate = function (db) { + Request.belongsTo(db.File, { + foreignKey: { + allowNull: true + } + }); + }; + + return Request; +}; + +/***/ }), +/* 72 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var bcrypt = __webpack_require__(73); +var logger = __webpack_require__(2); + +module.exports = function (sequelize, _ref) { + var STRING = _ref.STRING; + + var User = sequelize.define('User', { + userName: { + type: STRING, + allowNull: false + }, + password: { + type: STRING, + allowNull: false + } + }, { + freezeTableName: true + }); + + User.associate = function (db) { + User.hasOne(db.Channel); + }; + + User.prototype.comparePassword = function (password) { + return bcrypt.compare(password, this.password); + }; + + User.prototype.changePassword = function (newPassword) { + var _this = this; + + return new Promise(function (resolve, reject) { + // generate a salt string to use for hashing + bcrypt.genSalt(function (saltError, salt) { + if (saltError) { + logger.error('salt error', saltError); + reject(saltError); + return; + } + // generate a hashed version of the user's password + bcrypt.hash(newPassword, salt, function (hashError, hash) { + // if there is an error with the hash generation return the error + if (hashError) { + logger.error('hash error', hashError); + reject(hashError); + return; + } + // replace the current password with the new hash + _this.update({ password: hash }).then(function () { + resolve(); + }).catch(function (error) { + reject(error); + }); + }); + }); + }); + }; + + // pre-save hook method to hash the user's password before the user's info is saved to the db. + User.hook('beforeCreate', function (user, options) { + logger.debug('User.beforeCreate hook...'); + return new Promise(function (resolve, reject) { + // generate a salt string to use for hashing + bcrypt.genSalt(function (saltError, salt) { + if (saltError) { + logger.error('salt error', saltError); + reject(saltError); + return; + } + // generate a hashed version of the user's password + bcrypt.hash(user.password, salt, function (hashError, hash) { + // if there is an error with the hash generation return the error + if (hashError) { + logger.error('hash error', hashError); + reject(hashError); + return; + } + // replace the password string with the hash password value + user.password = hash; + resolve(); + }); + }); + }); + }); + + return User; +}; + +/***/ }), +/* 73 */ +/***/ (function(module, exports) { + +module.exports = require("bcrypt"); + +/***/ }), +/* 74 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var PassportLocalStrategy = __webpack_require__(23).Strategy; +var logger = __webpack_require__(2); +var db = __webpack_require__(6); + +var returnUserAndChannelInfo = function returnUserAndChannelInfo(userInstance) { + return new Promise(function (resolve, reject) { + var userInfo = {}; + userInfo['id'] = userInstance.id; + userInfo['userName'] = userInstance.userName; + userInstance.getChannel().then(function (_ref) { + var channelName = _ref.channelName, + channelClaimId = _ref.channelClaimId; + + userInfo['channelName'] = channelName; + userInfo['channelClaimId'] = channelClaimId; + return db.Certificate.getShortChannelIdFromLongChannelId(channelClaimId, channelName); + }).then(function (shortChannelId) { + userInfo['shortChannelId'] = shortChannelId; + resolve(userInfo); + }).catch(function (error) { + reject(error); + }); + }); +}; + +module.exports = new PassportLocalStrategy({ + usernameField: 'username', + passwordField: 'password' +}, function (username, password, done) { + return db.User.findOne({ + where: { userName: username } + }).then(function (user) { + if (!user) { + logger.debug('no user found'); + return done(null, false, { message: 'Incorrect username or password' }); + } + return user.comparePassword(password).then(function (isMatch) { + if (!isMatch) { + logger.debug('incorrect password'); + return done(null, false, { message: 'Incorrect username or password' }); + } + logger.debug('Password was a match, returning User'); + return returnUserAndChannelInfo(user).then(function (userInfo) { + return done(null, userInfo); + }).catch(function (error) { + return error; + }); + }).catch(function (error) { + return error; + }); + }).catch(function (error) { + return done(error); + }); +}); + +/***/ }), +/* 75 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var logger = __webpack_require__(2); +var passport = __webpack_require__(22); + +module.exports = function (app) { + // route for sign up + app.post('/signup', passport.authenticate('local-signup'), function (req, res) { + logger.verbose('successful signup for ' + req.user.channelName); + res.status(200).json({ + success: true, + channelName: req.user.channelName, + channelClaimId: req.user.channelClaimId, + shortChannelId: req.user.shortChannelId + }); + }); + // route for log in + app.post('/login', function (req, res, next) { + passport.authenticate('local-login', function (err, user, info) { + if (err) { + return next(err); + } + if (!user) { + return res.status(400).json({ + success: false, + message: info.message + }); + } + logger.debug('successful login'); + req.logIn(user, function (err) { + if (err) { + return next(err); + } + return res.status(200).json({ + success: true, + channelName: req.user.channelName, + channelClaimId: req.user.channelClaimId, + shortChannelId: req.user.shortChannelId + }); + }); + })(req, res, next); + }); + // route to log out + app.get('/logout', function (req, res) { + req.logout(); + res.status(200).json({ success: true, message: 'you successfully logged out' }); + }); + // see if user is authenticated, and return credentials if so + app.get('/user', function (req, res) { + if (req.user) { + res.status(200).json({ success: true, data: req.user }); + } else { + res.status(401).json({ success: false, message: 'user is not logged in' }); + } + }); +}; + +/***/ }), +/* 76 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var logger = __webpack_require__(2); +var multipart = __webpack_require__(77); + +var _require = __webpack_require__(5), + uploadDirectory = _require.publishing.uploadDirectory, + host = _require.details.host; + +var multipartMiddleware = multipart({ uploadDir: uploadDirectory }); +var db = __webpack_require__(6); + +var _require2 = __webpack_require__(78), + claimNameIsAvailable = _require2.claimNameIsAvailable, + checkChannelAvailability = _require2.checkChannelAvailability, + publish = _require2.publish; + +var _require3 = __webpack_require__(16), + getClaimList = _require3.getClaimList, + resolveUri = _require3.resolveUri, + getClaim = _require3.getClaim; + +var _require4 = __webpack_require__(26), + addGetResultsToFileData = _require4.addGetResultsToFileData, + createBasicPublishParams = _require4.createBasicPublishParams, + createThumbnailPublishParams = _require4.createThumbnailPublishParams, + parsePublishApiRequestBody = _require4.parsePublishApiRequestBody, + parsePublishApiRequestFiles = _require4.parsePublishApiRequestFiles, + createFileData = _require4.createFileData; + +var errorHandlers = __webpack_require__(27); + +var _require5 = __webpack_require__(17), + sendGATimingEvent = _require5.sendGATimingEvent; + +var _require6 = __webpack_require__(80), + authenticateUser = _require6.authenticateUser; + +var _require7 = __webpack_require__(28), + getChannelData = _require7.getChannelData, + getChannelClaims = _require7.getChannelClaims, + getClaimId = _require7.getClaimId; + +var NO_CHANNEL = 'NO_CHANNEL'; +var NO_CLAIM = 'NO_CLAIM'; + +module.exports = function (app) { + // route to check whether site has published to a channel + app.get('/api/channel/availability/:name', function (_ref, res) { + var ip = _ref.ip, + originalUrl = _ref.originalUrl, + name = _ref.params.name; + + var gaStartTime = Date.now(); + checkChannelAvailability(name).then(function (availableName) { + res.status(200).json(availableName); + sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now()); + }).catch(function (error) { + errorHandlers.handleErrorResponse(originalUrl, ip, error, res); + }); + }); + // route to get a short channel id from long channel Id + app.get('/api/channel/short-id/:longId/:name', function (_ref2, res) { + var ip = _ref2.ip, + originalUrl = _ref2.originalUrl, + params = _ref2.params; + + db.Certificate.getShortChannelIdFromLongChannelId(params.longId, params.name).then(function (shortId) { + res.status(200).json(shortId); + }).catch(function (error) { + errorHandlers.handleErrorResponse(originalUrl, ip, error, res); + }); + }); + app.get('/api/channel/data/:channelName/:channelClaimId', function (_ref3, res) { + var ip = _ref3.ip, + originalUrl = _ref3.originalUrl, + body = _ref3.body, + params = _ref3.params; + + var channelName = params.channelName; + var channelClaimId = params.channelClaimId; + if (channelClaimId === 'none') channelClaimId = null; + getChannelData(channelName, channelClaimId, 0).then(function (data) { + if (data === NO_CHANNEL) { + return res.status(404).json({ success: false, message: 'No matching channel was found' }); + } + res.status(200).json({ success: true, data: data }); + }).catch(function (error) { + errorHandlers.handleErrorResponse(originalUrl, ip, error, res); + }); + }); + app.get('/api/channel/claims/:channelName/:channelClaimId/:page', function (_ref4, res) { + var ip = _ref4.ip, + originalUrl = _ref4.originalUrl, + body = _ref4.body, + params = _ref4.params; + + var channelName = params.channelName; + var channelClaimId = params.channelClaimId; + if (channelClaimId === 'none') channelClaimId = null; + var page = params.page; + getChannelClaims(channelName, channelClaimId, page).then(function (data) { + if (data === NO_CHANNEL) { + return res.status(404).json({ success: false, message: 'No matching channel was found' }); + } + res.status(200).json({ success: true, data: data }); + }).catch(function (error) { + errorHandlers.handleErrorResponse(originalUrl, ip, error, res); + }); + }); + // route to run a claim_list request on the daemon + app.get('/api/claim/list/:name', function (_ref5, res) { + var ip = _ref5.ip, + originalUrl = _ref5.originalUrl, + params = _ref5.params; + + getClaimList(params.name).then(function (claimsList) { + res.status(200).json(claimsList); + }).catch(function (error) { + errorHandlers.handleErrorResponse(originalUrl, ip, error, res); + }); + }); + // route to get an asset + app.get('/api/claim/get/:name/:claimId', function (_ref6, res) { + var ip = _ref6.ip, + originalUrl = _ref6.originalUrl, + params = _ref6.params; + + var name = params.name; + var claimId = params.claimId; + // resolve the claim + db.Claim.resolveClaim(name, claimId).then(function (resolveResult) { + // make sure a claim actually exists at that uri + if (!resolveResult) { + throw new Error('No matching uri found in Claim table'); + } + var fileData = createFileData(resolveResult); + // get the claim + return Promise.all([fileData, getClaim(name + '#' + claimId)]); + }).then(function (_ref7) { + var _ref8 = _slicedToArray(_ref7, 2), + fileData = _ref8[0], + getResult = _ref8[1]; + + fileData = addGetResultsToFileData(fileData, getResult); + return Promise.all([db.upsert(db.File, fileData, { name: name, claimId: claimId }, 'File'), getResult]); + }).then(function (_ref9) { + var _ref10 = _slicedToArray(_ref9, 2), + fileRecord = _ref10[0], + _ref10$ = _ref10[1], + message = _ref10$.message, + completed = _ref10$.completed; + + res.status(200).json({ success: true, message: message, completed: completed }); + }).catch(function (error) { + errorHandlers.handleErrorResponse(originalUrl, ip, error, res); + }); + }); + // route to check whether this site published to a claim + app.get('/api/claim/availability/:name', function (_ref11, res) { + var ip = _ref11.ip, + originalUrl = _ref11.originalUrl, + name = _ref11.params.name; + + var gaStartTime = Date.now(); + claimNameIsAvailable(name).then(function (result) { + res.status(200).json(result); + sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now()); + }).catch(function (error) { + errorHandlers.handleErrorResponse(originalUrl, ip, error, res); + }); + }); + // route to run a resolve request on the daemon + app.get('/api/claim/resolve/:name/:claimId', function (_ref12, res) { + var headers = _ref12.headers, + ip = _ref12.ip, + originalUrl = _ref12.originalUrl, + params = _ref12.params; + + resolveUri(params.name + '#' + params.claimId).then(function (resolvedUri) { + res.status(200).json(resolvedUri); + }).catch(function (error) { + errorHandlers.handleErrorResponse(originalUrl, ip, error, res); + }); + }); + // route to run a publish request on the daemon + app.post('/api/claim/publish', multipartMiddleware, function (_ref13, res) { + var body = _ref13.body, + files = _ref13.files, + headers = _ref13.headers, + ip = _ref13.ip, + originalUrl = _ref13.originalUrl, + user = _ref13.user; + + // define variables + var channelName = void 0, + channelId = void 0, + channelPassword = void 0, + description = void 0, + fileName = void 0, + filePath = void 0, + fileType = void 0, + gaStartTime = void 0, + license = void 0, + name = void 0, + nsfw = void 0, + thumbnail = void 0, + thumbnailFileName = void 0, + thumbnailFilePath = void 0, + thumbnailFileType = void 0, + title = void 0; + // record the start time of the request + gaStartTime = Date.now(); + // validate the body and files of the request + try { + var _parsePublishApiReque = parsePublishApiRequestBody(body); + // validateApiPublishRequest(body, files); + + + name = _parsePublishApiReque.name; + nsfw = _parsePublishApiReque.nsfw; + license = _parsePublishApiReque.license; + title = _parsePublishApiReque.title; + description = _parsePublishApiReque.description; + thumbnail = _parsePublishApiReque.thumbnail; + + var _parsePublishApiReque2 = parsePublishApiRequestFiles(files); + + fileName = _parsePublishApiReque2.fileName; + filePath = _parsePublishApiReque2.filePath; + fileType = _parsePublishApiReque2.fileType; + thumbnailFileName = _parsePublishApiReque2.thumbnailFileName; + thumbnailFilePath = _parsePublishApiReque2.thumbnailFilePath; + thumbnailFileType = _parsePublishApiReque2.thumbnailFileType; + channelName = body.channelName; + channelId = body.channelId; + channelPassword = body.channelPassword; + } catch (error) { + return res.status(400).json({ success: false, message: error.message }); + } + // check channel authorization + Promise.all([authenticateUser(channelName, channelId, channelPassword, user), claimNameIsAvailable(name), createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail), createThumbnailPublishParams(thumbnailFilePath, name, license, nsfw)]).then(function (_ref14) { + var _ref15 = _slicedToArray(_ref14, 4), + _ref15$ = _ref15[0], + channelName = _ref15$.channelName, + channelClaimId = _ref15$.channelClaimId, + validatedClaimName = _ref15[1], + publishParams = _ref15[2], + thumbnailPublishParams = _ref15[3]; + + // add channel details to the publish params + if (channelName && channelClaimId) { + publishParams['channel_name'] = channelName; + publishParams['channel_id'] = channelClaimId; + } + // publish the thumbnail + if (thumbnailPublishParams) { + publish(thumbnailPublishParams, thumbnailFileName, thumbnailFileType); + } + // publish the asset + return publish(publishParams, fileName, fileType); + }).then(function (result) { + res.status(200).json({ + success: true, + message: 'publish completed successfully', + data: { + name: name, + claimId: result.claim_id, + url: host + '/' + result.claim_id + '/' + name, + lbryTx: result + } + }); + // record the publish end time and send to google analytics + sendGATimingEvent('end-to-end', 'publish', fileType, gaStartTime, Date.now()); + }).catch(function (error) { + errorHandlers.handleErrorResponse(originalUrl, ip, error, res); + }); + }); + // route to get a short claim id from long claim Id + app.get('/api/claim/short-id/:longId/:name', function (_ref16, res) { + var ip = _ref16.ip, + originalUrl = _ref16.originalUrl, + body = _ref16.body, + params = _ref16.params; + + db.Claim.getShortClaimIdFromLongClaimId(params.longId, params.name).then(function (shortId) { + res.status(200).json({ success: true, data: shortId }); + }).catch(function (error) { + errorHandlers.handleErrorResponse(originalUrl, ip, error, res); + }); + }); + app.post('/api/claim/long-id', function (_ref17, res) { + var ip = _ref17.ip, + originalUrl = _ref17.originalUrl, + body = _ref17.body, + params = _ref17.params; + + logger.debug('body:', body); + var channelName = body.channelName; + var channelClaimId = body.channelClaimId; + var claimName = body.claimName; + var claimId = body.claimId; + getClaimId(channelName, channelClaimId, claimName, claimId).then(function (result) { + if (result === NO_CHANNEL) { + return res.status(404).json({ success: false, message: 'No matching channel could be found' }); + } + if (result === NO_CLAIM) { + return res.status(404).json({ success: false, message: 'No matching claim id could be found' }); + } + res.status(200).json({ success: true, data: result }); + }).catch(function (error) { + errorHandlers.handleErrorResponse(originalUrl, ip, error, res); + }); + }); + app.get('/api/claim/data/:claimName/:claimId', function (_ref18, res) { + var ip = _ref18.ip, + originalUrl = _ref18.originalUrl, + body = _ref18.body, + params = _ref18.params; + + var claimName = params.claimName; + var claimId = params.claimId; + if (claimId === 'none') claimId = null; + db.Claim.resolveClaim(claimName, claimId).then(function (claimInfo) { + if (!claimInfo) { + return res.status(404).json({ success: false, message: 'No claim could be found' }); + } + res.status(200).json({ success: true, data: claimInfo }); + }).catch(function (error) { + errorHandlers.handleErrorResponse(originalUrl, ip, error, res); + }); + }); + // route to see if asset is available locally + app.get('/api/file/availability/:name/:claimId', function (_ref19, res) { + var ip = _ref19.ip, + originalUrl = _ref19.originalUrl, + params = _ref19.params; + + var name = params.name; + var claimId = params.claimId; + db.File.findOne({ where: { name: name, claimId: claimId } }).then(function (result) { + if (result) { + return res.status(200).json({ success: true, data: true }); + } + res.status(200).json({ success: true, data: false }); + }).catch(function (error) { + errorHandlers.handleErrorResponse(originalUrl, ip, error, res); + }); + }); +}; + +/***/ }), +/* 77 */ +/***/ (function(module, exports) { + +module.exports = require("connect-multiparty"); + +/***/ }), +/* 78 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var logger = __webpack_require__(2); +var db = __webpack_require__(6); +var lbryApi = __webpack_require__(16); +var publishHelpers = __webpack_require__(26); + +var _require = __webpack_require__(5), + _require$publishing = _require.publishing, + primaryClaimAddress = _require$publishing.primaryClaimAddress, + additionalClaimAddresses = _require$publishing.additionalClaimAddresses; + +var Sequelize = __webpack_require__(24); +var Op = Sequelize.Op; + +module.exports = { + publish: function publish(publishParams, fileName, fileType) { + return new Promise(function (resolve, reject) { + var publishResults = void 0, + certificateId = void 0, + channelName = void 0; + // publish the file + return lbryApi.publishClaim(publishParams).then(function (tx) { + logger.info('Successfully published ' + publishParams.name + ' ' + fileName, tx); + publishResults = tx; + // get the channel information + if (publishParams.channel_name) { + logger.debug('this claim was published in channel: ' + publishParams.channel_name); + return db.Channel.findOne({ where: { channelName: publishParams.channel_name } }); + } else { + logger.debug('this claim was not published in a channel'); + return null; + } + }).then(function (channel) { + // set channel information + certificateId = null; + channelName = null; + if (channel) { + certificateId = channel.channelClaimId; + channelName = channel.channelName; + } + logger.debug('certificateId: ' + certificateId); + }).then(function () { + // create the File record + var fileRecord = { + name: publishParams.name, + claimId: publishResults.claim_id, + title: publishParams.metadata.title, + description: publishParams.metadata.description, + address: publishParams.claim_address, + outpoint: publishResults.txid + ':' + publishResults.nout, + height: 0, + fileName: fileName, + filePath: publishParams.file_path, + fileType: fileType, + nsfw: publishParams.metadata.nsfw + }; + // create the Claim record + var claimRecord = { + name: publishParams.name, + claimId: publishResults.claim_id, + title: publishParams.metadata.title, + description: publishParams.metadata.description, + address: publishParams.claim_address, + thumbnail: publishParams.metadata.thumbnail, + outpoint: publishResults.txid + ':' + publishResults.nout, + height: 0, + contentType: fileType, + nsfw: publishParams.metadata.nsfw, + amount: publishParams.bid, + certificateId: certificateId, + channelName: channelName + }; + // upsert criteria + var upsertCriteria = { + name: publishParams.name, + claimId: publishResults.claim_id + }; + // upsert the records + return Promise.all([db.upsert(db.File, fileRecord, upsertCriteria, 'File'), db.upsert(db.Claim, claimRecord, upsertCriteria, 'Claim')]); + }).then(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + file = _ref2[0], + claim = _ref2[1]; + + logger.debug('File and Claim records successfully created'); + return Promise.all([file.setClaim(claim), claim.setFile(file)]); + }).then(function () { + logger.debug('File and Claim records successfully associated'); + resolve(publishResults); // resolve the promise with the result from lbryApi.publishClaim; + }).catch(function (error) { + logger.error('PUBLISH ERROR', error); + publishHelpers.deleteTemporaryFile(publishParams.file_path); // delete the local file + reject(error); + }); + }); + }, + claimNameIsAvailable: function claimNameIsAvailable(name) { + var claimAddresses = additionalClaimAddresses || []; + claimAddresses.push(primaryClaimAddress); + // find any records where the name is used + return db.Claim.findAll({ + attributes: ['address'], + where: { + name: name, + address: _defineProperty({}, Op.or, claimAddresses) + } + }).then(function (result) { + if (result.length >= 1) { + throw new Error('That claim is already in use'); + }; + return name; + }).catch(function (error) { + throw error; + }); + }, + checkChannelAvailability: function checkChannelAvailability(name) { + return db.Channel.findAll({ + where: { channelName: name } + }).then(function (result) { + if (result.length >= 1) { + throw new Error('That channel has already been claimed'); + } + return name; + }).catch(function (error) { + throw error; + }); + } +}; + +/***/ }), +/* 79 */ +/***/ (function(module, exports) { + +module.exports = require("fs"); + +/***/ }), +/* 80 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var db = __webpack_require__(6); +var logger = __webpack_require__(2); + +module.exports = { + authenticateUser: function authenticateUser(channelName, channelId, channelPassword, user) { + // case: no channelName or channel Id are provided (anonymous), regardless of whether user token is provided + if (!channelName && !channelId) { + return { + channelName: null, + channelClaimId: null + }; + } + // case: channelName or channel Id are provided with user token + if (user) { + if (channelName && channelName !== user.channelName) { + throw new Error('the provided channel name does not match user credentials'); + } + if (channelId && channelId !== user.channelClaimId) { + throw new Error('the provided channel id does not match user credentials'); + } + return { + channelName: user.channelName, + channelClaimId: user.channelClaimId + }; + } + // case: channelName or channel Id are provided with password instead of user token + if (!channelPassword) throw new Error('no channel password provided'); + return module.exports.authenticateChannelCredentials(channelName, channelId, channelPassword); + }, + authenticateChannelCredentials: function authenticateChannelCredentials(channelName, channelId, userPassword) { + return new Promise(function (resolve, reject) { + // hoisted variables + var channelData = void 0; + // build the params for finding the channel + var channelFindParams = {}; + if (channelName) channelFindParams['channelName'] = channelName; + if (channelId) channelFindParams['channelClaimId'] = channelId; + // find the channel + db.Channel.findOne({ + where: channelFindParams + }).then(function (channel) { + if (!channel) { + logger.debug('no channel found'); + throw new Error('Authentication failed, you do not have access to that channel'); + } + channelData = channel.get(); + logger.debug('channel data:', channelData); + return db.User.findOne({ + where: { userName: channelData.channelName.substring(1) } + }); + }).then(function (user) { + if (!user) { + logger.debug('no user found'); + throw new Error('Authentication failed, you do not have access to that channel'); + } + return user.comparePassword(userPassword); + }).then(function (isMatch) { + if (!isMatch) { + logger.debug('incorrect password'); + throw new Error('Authentication failed, you do not have access to that channel'); + } + logger.debug('...password was a match...'); + resolve(channelData); + }).catch(function (error) { + reject(error); + }); + }); + } +}; + +/***/ }), +/* 81 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var CLAIMS_PER_PAGE = 12; + +module.exports = { + returnPaginatedChannelClaims: function returnPaginatedChannelClaims(channelName, longChannelClaimId, claims, page) { + var totalPages = module.exports.determineTotalPages(claims); + var paginationPage = module.exports.getPageFromQuery(page); + var viewData = { + channelName: channelName, + longChannelClaimId: longChannelClaimId, + claims: module.exports.extractPageFromClaims(claims, paginationPage), + previousPage: module.exports.determinePreviousPage(paginationPage), + currentPage: paginationPage, + nextPage: module.exports.determineNextPage(totalPages, paginationPage), + totalPages: totalPages, + totalResults: module.exports.determineTotalClaims(claims) + }; + return viewData; + }, + getPageFromQuery: function getPageFromQuery(page) { + if (page) { + return parseInt(page); + } + return 1; + }, + extractPageFromClaims: function extractPageFromClaims(claims, pageNumber) { + if (!claims) { + return []; // if no claims, return this default + } + // logger.debug('claims is array?', Array.isArray(claims)); + // logger.debug(`pageNumber ${pageNumber} is number?`, Number.isInteger(pageNumber)); + var claimStartIndex = (pageNumber - 1) * CLAIMS_PER_PAGE; + var claimEndIndex = claimStartIndex + CLAIMS_PER_PAGE; + var pageOfClaims = claims.slice(claimStartIndex, claimEndIndex); + return pageOfClaims; + }, + determineTotalPages: function determineTotalPages(claims) { + if (!claims) { + return 0; + } else { + var totalClaims = claims.length; + if (totalClaims < CLAIMS_PER_PAGE) { + return 1; + } + var fullPages = Math.floor(totalClaims / CLAIMS_PER_PAGE); + var remainder = totalClaims % CLAIMS_PER_PAGE; + if (remainder === 0) { + return fullPages; + } + return fullPages + 1; + } + }, + determinePreviousPage: function determinePreviousPage(currentPage) { + if (currentPage === 1) { + return null; + } + return currentPage - 1; + }, + determineNextPage: function determineNextPage(totalPages, currentPage) { + if (currentPage === totalPages) { + return null; + } + return currentPage + 1; + }, + determineTotalClaims: function determineTotalClaims(claims) { + if (!claims) { + return 0; + } + return claims.length; + } +}; + +/***/ }), +/* 82 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _require = __webpack_require__(5), + host = _require.details; + +var handlePageRender = __webpack_require__(29); + +module.exports = function (app) { + // route for the home page + app.get('/', function (req, res) { + handlePageRender(req, res); + }); + // route to display login page + app.get('/login', function (req, res) { + handlePageRender(req, res); + }); + // route to show 'about' page + app.get('/about', function (req, res) { + handlePageRender(req, res); + }); + // route to display a list of the trending images + app.get('/trending', function (req, res) { + res.status(301).redirect('/popular'); + }); + app.get('/popular', function (req, res) { + handlePageRender(req, res); + }); + // route to display a list of the trending images + app.get('/new', function (req, res) { + handlePageRender(req, res); + }); + // route to send embedable video player (for twitter) + app.get('/embed/:claimId/:name', function (_ref, res) { + var params = _ref.params; + + var claimId = params.claimId; + var name = params.name; + // get and render the content + res.status(200).render('embed', { layout: 'embed', host: host, claimId: claimId, name: name }); + }); +}; + +/***/ }), +/* 83 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function () { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; + var action = arguments[1]; + + switch (action.type) { + case actions.FILE_SELECTED: + return Object.assign({}, initialState, { // note: clears to initial state + file: action.data + }); + case actions.FILE_CLEAR: + return initialState; + case actions.METADATA_UPDATE: + return Object.assign({}, state, { + metadata: Object.assign({}, state.metadata, _defineProperty({}, action.data.name, action.data.value)) + }); + case actions.CLAIM_UPDATE: + return Object.assign({}, state, { + claim: action.data + }); + case actions.SET_PUBLISH_IN_CHANNEL: + return Object.assign({}, state, { + publishInChannel: action.channel + }); + case actions.PUBLISH_STATUS_UPDATE: + return Object.assign({}, state, { + status: action.data + }); + case actions.ERROR_UPDATE: + return Object.assign({}, state, { + error: Object.assign({}, state.error, _defineProperty({}, action.data.name, action.data.value)) + }); + case actions.SELECTED_CHANNEL_UPDATE: + return Object.assign({}, state, { + selectedChannel: action.data + }); + case actions.TOGGLE_METADATA_INPUTS: + return Object.assign({}, state, { + showMetadataInputs: action.data + }); + case actions.THUMBNAIL_NEW: + return Object.assign({}, state, { + thumbnail: action.data + }); + default: + return state; + } +}; + +var _publish_action_types = __webpack_require__(32); + +var actions = _interopRequireWildcard(_publish_action_types); + +var _publish_channel_select_states = __webpack_require__(33); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var _require = __webpack_require__(5), + publishing = _require.publishing; + +var initialState = { + disabled: publishing.disabled, + disabledMessage: publishing.disabledMessage, + publishInChannel: false, + selectedChannel: _publish_channel_select_states.LOGIN, + showMetadataInputs: false, + status: { + status: null, + message: null + }, + error: { + file: null, + url: null, + channel: null, + publishSubmit: null + }, + file: null, + claim: '', + metadata: { + title: '', + description: '', + license: '', + nsfw: false + }, + thumbnail: null +}; + +/***/ }), +/* 84 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function () { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; + var action = arguments[1]; + + switch (action.type) { + case actions.CHANNEL_UPDATE: + return Object.assign({}, state, { + loggedInChannel: action.data + }); + default: + return state; + } +}; + +var _channel_action_types = __webpack_require__(34); + +var actions = _interopRequireWildcard(_channel_action_types); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +var initialState = { + loggedInChannel: { + name: null, + shortId: null, + longId: null + } +}; + +/***/ }), +/* 85 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function () { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; + var action = arguments[1]; + + switch (action.type) { + // handle request + case actions.REQUEST_ERROR: + return Object.assign({}, state, { + request: Object.assign({}, state.request, { + error: action.data + }) + }); + case actions.REQUEST_UPDATE: + return Object.assign({}, state, { + request: Object.assign({}, state.request, { + type: action.data.requestType, + id: action.data.requestId + }) + }); + // store requests + case actions.REQUEST_LIST_ADD: + return Object.assign({}, state, { + requestList: Object.assign({}, state.requestList, _defineProperty({}, action.data.id, { + error: action.data.error, + key: action.data.key + })) + }); + // asset data + case actions.ASSET_ADD: + return Object.assign({}, state, { + assetList: Object.assign({}, state.assetList, _defineProperty({}, action.data.id, { + error: action.data.error, + name: action.data.name, + claimId: action.data.claimId, + shortId: action.data.shortId, + claimData: action.data.claimData + })) + }); + // channel data + case actions.CHANNEL_ADD: + return Object.assign({}, state, { + channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.id, { + name: action.data.name, + longId: action.data.longId, + shortId: action.data.shortId, + claimsData: action.data.claimsData + })) + }); + case actions.CHANNEL_CLAIMS_UPDATE_SUCCESS: + return Object.assign({}, state, { + channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.channelListId, Object.assign({}, state.channelList[action.data.channelListId], { + claimsData: action.data.claimsData + }))) + }); + // display an asset + case actions.FILE_AVAILABILITY_UPDATE: + return Object.assign({}, state, { + displayAsset: Object.assign({}, state.displayAsset, { + status: action.data + }) + }); + case actions.DISPLAY_ASSET_ERROR: + return Object.assign({}, state, { + displayAsset: Object.assign({}, state.displayAsset, { + error: action.data, + status: _asset_display_states.ERROR + }) + }); + default: + return state; + } +}; + +var _show_action_types = __webpack_require__(12); + +var actions = _interopRequireWildcard(_show_action_types); + +var _asset_display_states = __webpack_require__(35); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var initialState = { + request: { + error: null, + type: null, + id: null + }, + requestList: {}, + channelList: {}, + assetList: {}, + displayAsset: { + error: null, + status: _asset_display_states.LOCAL_CHECK + } +}; + +/***/ }), +/* 86 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function () { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; + var action = arguments[1]; + + switch (action.type) { + default: + return state; + } +}; + +var siteConfig = __webpack_require__(5); + +var googleAnalyticsId = siteConfig.analytics.googleId, + _siteConfig$assetDefa = siteConfig.assetDefaults, + defaultThumbnail = _siteConfig$assetDefa.thumbnail, + defaultDescription = _siteConfig$assetDefa.description, + _siteConfig$details = siteConfig.details, + description = _siteConfig$details.description, + host = _siteConfig$details.host, + title = _siteConfig$details.title, + twitter = _siteConfig$details.twitter; + + +var initialState = { + description: description, + googleAnalyticsId: googleAnalyticsId, + host: host, + title: title, + twitter: twitter, + defaultDescription: defaultDescription, + defaultThumbnail: defaultThumbnail +}; + +/***/ }), +/* 87 */ +/***/ (function(module, exports) { + +module.exports = require("react-ga"); + +/***/ }), +/* 88 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _SEO = __webpack_require__(9); + +var _SEO2 = _interopRequireDefault(_SEO); + +var _NavBar = __webpack_require__(7); + +var _NavBar2 = _interopRequireDefault(_NavBar); + +var _PublishTool = __webpack_require__(97); + +var _PublishTool2 = _interopRequireDefault(_PublishTool); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var HomePage = function (_React$Component) { + _inherits(HomePage, _React$Component); + + function HomePage() { + _classCallCheck(this, HomePage); + + return _possibleConstructorReturn(this, (HomePage.__proto__ || Object.getPrototypeOf(HomePage)).apply(this, arguments)); + } + + _createClass(HomePage, [{ + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + { className: 'row row--tall flex-container--column' }, + _react2.default.createElement(_SEO2.default, null), + _react2.default.createElement(_NavBar2.default, null), + _react2.default.createElement( + 'div', + { className: 'row row--tall row--padded flex-container--column' }, + _react2.default.createElement(_PublishTool2.default, null) + ) + ); + } + }]); + + return HomePage; +}(_react2.default.Component); + +; + +exports.default = HomePage; + +/***/ }), +/* 89 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _reactHelmet = __webpack_require__(14); + +var _reactHelmet2 = _interopRequireDefault(_reactHelmet); + +var _propTypes = __webpack_require__(10); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _pageTitle = __webpack_require__(90); + +var _metaTags = __webpack_require__(91); + +var _canonicalLink = __webpack_require__(92); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var SEO = function (_React$Component) { + _inherits(SEO, _React$Component); + + function SEO() { + _classCallCheck(this, SEO); + + return _possibleConstructorReturn(this, (SEO.__proto__ || Object.getPrototypeOf(SEO)).apply(this, arguments)); + } + + _createClass(SEO, [{ + key: 'render', + value: function render() { + // props from state + var _props = this.props, + defaultDescription = _props.defaultDescription, + defaultThumbnail = _props.defaultThumbnail, + siteDescription = _props.siteDescription, + siteHost = _props.siteHost, + siteTitle = _props.siteTitle, + siteTwitter = _props.siteTwitter; + // props from parent + + var _props2 = this.props, + asset = _props2.asset, + channel = _props2.channel, + pageUri = _props2.pageUri; + var pageTitle = this.props.pageTitle; + // create page title, tags, and canonical link + + pageTitle = (0, _pageTitle.createPageTitle)(siteTitle, pageTitle); + var metaTags = (0, _metaTags.createMetaTags)(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail); + var canonicalLink = (0, _canonicalLink.createCanonicalLink)(asset, channel, pageUri, siteHost); + // render results + return _react2.default.createElement(_reactHelmet2.default, { + title: pageTitle, + meta: metaTags, + link: [{ rel: 'canonical', href: canonicalLink }] + }); + } + }]); + + return SEO; +}(_react2.default.Component); + +; + +SEO.propTypes = { + pageTitle: _propTypes2.default.string, + pageUri: _propTypes2.default.string, + channel: _propTypes2.default.object, + asset: _propTypes2.default.object +}; + +exports.default = SEO; + +/***/ }), +/* 90 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var createPageTitle = exports.createPageTitle = function createPageTitle(siteTitle, pageTitle) { + if (!pageTitle) { + return "" + siteTitle; + } + return siteTitle + " - " + pageTitle; +}; + +/***/ }), +/* 91 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var determineOgThumbnailContentType = function determineOgThumbnailContentType(thumbnail) { + if (thumbnail) { + var fileExt = thumbnail.substring(thumbnail.lastIndexOf('.')); + switch (fileExt) { + case 'jpeg': + case 'jpg': + return 'image/jpeg'; + case 'png': + return 'image/png'; + case 'gif': + return 'image/gif'; + case 'mp4': + return 'video/mp4'; + default: + return 'image/jpeg'; + } + } + return ''; +}; + +var createBasicMetaTags = function createBasicMetaTags(siteHost, siteDescription, siteTitle, siteTwitter) { + return [{ property: 'og:title', content: siteTitle }, { property: 'og:url', content: siteHost }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: siteDescription }, { property: 'twitter:site', content: siteTwitter }, { property: 'twitter:card', content: 'summary' }]; +}; + +var createChannelMetaTags = function createChannelMetaTags(siteTitle, siteHost, siteTwitter, channel) { + var name = channel.name, + longId = channel.longId; + + return [{ property: 'og:title', content: name + ' on ' + siteTitle }, { property: 'og:url', content: siteHost + '/' + name + ':' + longId }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: name + ', a channel on ' + siteTitle }, { property: 'twitter:site', content: siteTwitter }, { property: 'twitter:card', content: 'summary' }]; +}; + +var createAssetMetaTags = function createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail) { + var claimData = asset.claimData; + var contentType = claimData.contentType; + + var embedUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name; + var showUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name; + var source = siteHost + '/' + claimData.claimId + '/' + claimData.name + '.' + claimData.fileExt; + var ogTitle = claimData.title || claimData.name; + var ogDescription = claimData.description || defaultDescription; + var ogThumbnailContentType = determineOgThumbnailContentType(claimData.thumbnail); + var ogThumbnail = claimData.thumbnail || defaultThumbnail; + var metaTags = [{ property: 'og:title', content: ogTitle }, { property: 'og:url', content: showUrl }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: ogDescription }, { property: 'og:image:width', content: 600 }, { property: 'og:image:height', content: 315 }, { property: 'twitter:site', content: siteTwitter }]; + if (contentType === 'video/mp4' || contentType === 'video/webm') { + metaTags.push({ property: 'og:video', content: source }); + metaTags.push({ property: 'og:video:secure_url', content: source }); + metaTags.push({ property: 'og:video:type', content: contentType }); + metaTags.push({ property: 'og:image', content: ogThumbnail }); + metaTags.push({ property: 'og:image:type', content: ogThumbnailContentType }); + metaTags.push({ property: 'og:type', content: 'video' }); + metaTags.push({ property: 'twitter:card', content: 'player' }); + metaTags.push({ property: 'twitter:player', content: embedUrl }); + metaTags.push({ property: 'twitter:player:width', content: 600 }); + metaTags.push({ property: 'twitter:text:player_width', content: 600 }); + metaTags.push({ property: 'twitter:player:height', content: 337 }); + metaTags.push({ property: 'twitter:player:stream', content: source }); + metaTags.push({ property: 'twitter:player:stream:content_type', content: contentType }); + } else { + metaTags.push({ property: 'og:image', content: source }); + metaTags.push({ property: 'og:image:type', content: contentType }); + metaTags.push({ property: 'og:type', content: 'article' }); + metaTags.push({ property: 'twitter:card', content: 'summary_large_image' }); + } + return metaTags; +}; + +var createMetaTags = exports.createMetaTags = function createMetaTags(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail) { + if (asset) { + return createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail); + }; + if (channel) { + return createChannelMetaTags(siteHost, siteTitle, siteTwitter, channel); + }; + return createBasicMetaTags(siteDescription, siteHost, siteTitle, siteTwitter); +}; + +/***/ }), +/* 92 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var createBasicCanonicalLink = function createBasicCanonicalLink(page, siteHost) { + return siteHost + "/" + page; +}; + +var createAssetCanonicalLink = function createAssetCanonicalLink(asset, siteHost) { + var channelName = void 0, + certificateId = void 0, + name = void 0, + claimId = void 0; + if (asset.claimData) { + var _asset$claimData = asset.claimData; + channelName = _asset$claimData.channelName; + certificateId = _asset$claimData.certificateId; + name = _asset$claimData.name; + claimId = _asset$claimData.claimId; + }; + if (channelName) { + return siteHost + "/" + channelName + ":" + certificateId + "/" + name; + }; + return siteHost + "/" + claimId + "/" + name; +}; + +var createChannelCanonicalLink = function createChannelCanonicalLink(channel, siteHost) { + var name = channel.name, + longId = channel.longId; + + return siteHost + "/" + name + ":" + longId; +}; + +var createCanonicalLink = exports.createCanonicalLink = function createCanonicalLink(asset, channel, page, siteHost) { + if (asset) { + return createAssetCanonicalLink(asset, siteHost); + } + if (channel) { + return createChannelCanonicalLink(channel, siteHost); + } + return createBasicCanonicalLink(page, siteHost); +}; + +/***/ }), +/* 93 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _reactRouterDom = __webpack_require__(3); + +var _Logo = __webpack_require__(94); + +var _Logo2 = _interopRequireDefault(_Logo); + +var _NavBarChannelOptionsDropdown = __webpack_require__(95); + +var _NavBarChannelOptionsDropdown2 = _interopRequireDefault(_NavBarChannelOptionsDropdown); + +var _request = __webpack_require__(11); + +var _request2 = _interopRequireDefault(_request); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var VIEW = 'VIEW'; +var LOGOUT = 'LOGOUT'; + +var NavBar = function (_React$Component) { + _inherits(NavBar, _React$Component); + + function NavBar(props) { + _classCallCheck(this, NavBar); + + var _this = _possibleConstructorReturn(this, (NavBar.__proto__ || Object.getPrototypeOf(NavBar)).call(this, props)); + + _this.checkForLoggedInUser = _this.checkForLoggedInUser.bind(_this); + _this.logoutUser = _this.logoutUser.bind(_this); + _this.handleSelection = _this.handleSelection.bind(_this); + return _this; + } + + _createClass(NavBar, [{ + key: 'componentDidMount', + value: function componentDidMount() { + // check to see if the user is already logged in + this.checkForLoggedInUser(); + } + }, { + key: 'checkForLoggedInUser', + value: function checkForLoggedInUser() { + var _this2 = this; + + var params = { credentials: 'include' }; + (0, _request2.default)('/user', params).then(function (_ref) { + var data = _ref.data; + + _this2.props.onChannelLogin(data.channelName, data.shortChannelId, data.channelClaimId); + }).catch(function (error) { + console.log('/user error:', error.message); + }); + } + }, { + key: 'logoutUser', + value: function logoutUser() { + var _this3 = this; + + var params = { credentials: 'include' }; + (0, _request2.default)('/logout', params).then(function () { + _this3.props.onChannelLogout(); + }).catch(function (error) { + console.log('/logout error', error.message); + }); + } + }, { + key: 'handleSelection', + value: function handleSelection(event) { + var value = event.target.selectedOptions[0].value; + switch (value) { + case LOGOUT: + this.logoutUser(); + break; + case VIEW: + // redirect to channel page + this.props.history.push('/' + this.props.channelName + ':' + this.props.channelLongId); + break; + default: + break; + } + } + }, { + key: 'render', + value: function render() { + var siteDescription = this.props.siteDescription; + + return _react2.default.createElement( + 'div', + { className: 'row row--wide nav-bar' }, + _react2.default.createElement( + 'div', + { className: 'row row--padded row--short flex-container--row flex-container--space-between-center' }, + _react2.default.createElement(_Logo2.default, null), + _react2.default.createElement( + 'div', + { className: 'nav-bar--center' }, + _react2.default.createElement( + 'span', + { className: 'nav-bar-tagline' }, + siteDescription + ) + ), + _react2.default.createElement( + 'div', + { className: 'nav-bar--right' }, + _react2.default.createElement( + _reactRouterDom.NavLink, + { className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/', exact: true }, + 'Publish' + ), + _react2.default.createElement( + _reactRouterDom.NavLink, + { className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/about' }, + 'About' + ), + this.props.channelName ? _react2.default.createElement(_NavBarChannelOptionsDropdown2.default, { + channelName: this.props.channelName, + handleSelection: this.handleSelection, + defaultSelection: this.props.channelName, + VIEW: VIEW, + LOGOUT: LOGOUT + }) : _react2.default.createElement( + _reactRouterDom.NavLink, + { id: 'nav-bar-login-link', className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/login' }, + 'Channel' + ) + ) + ) + ); + } + }]); + + return NavBar; +}(_react2.default.Component); + +exports.default = (0, _reactRouterDom.withRouter)(NavBar); + +/***/ }), +/* 94 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _reactRouterDom = __webpack_require__(3); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function Logo() { + return _react2.default.createElement( + 'svg', + { version: '1.1', id: 'Layer_1', x: '0px', y: '0px', height: '24px', viewBox: '0 0 80 31', enableBackground: 'new 0 0 80 31', className: 'nav-bar-logo' }, + _react2.default.createElement( + _reactRouterDom.Link, + { to: '/' }, + _react2.default.createElement( + 'title', + null, + 'Logo' + ), + _react2.default.createElement( + 'desc', + null, + 'Spee.ch logo' + ), + _react2.default.createElement( + 'g', + { id: 'About' }, + _react2.default.createElement( + 'g', + { id: 'Publish-Form-V2-_x28_filled_x29_', transform: 'translate(-42.000000, -23.000000)' }, + _react2.default.createElement( + 'g', + { id: 'Group-17', transform: 'translate(42.000000, 22.000000)' }, + _react2.default.createElement( + 'text', + { transform: 'matrix(1 0 0 1 0 20)', fontSize: '25', fontFamily: 'Roboto' }, + 'Spee 10000000) { + throw new Error('Sorry, images are limited to 10 megabytes.'); + } + break; + case 'image/gif': + if (file.size > 50000000) { + throw new Error('Sorry, GIFs are limited to 50 megabytes.'); + } + break; + case 'video/mp4': + if (file.size > 50000000) { + throw new Error('Sorry, videos are limited to 50 megabytes.'); + } + break; + default: + throw new Error(file.type + ' is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.'); + } + } +}; + +/***/ }), +/* 101 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(10); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var PublishPreview = function (_React$Component) { + _inherits(PublishPreview, _React$Component); + + function PublishPreview(props) { + _classCallCheck(this, PublishPreview); + + var _this = _possibleConstructorReturn(this, (PublishPreview.__proto__ || Object.getPrototypeOf(PublishPreview)).call(this, props)); + + _this.state = { + imgSource: '', + defaultThumbnail: '/assets/img/video_thumb_default.png' + }; + return _this; + } + + _createClass(PublishPreview, [{ + key: 'componentDidMount', + value: function componentDidMount() { + this.setPreviewImageSource(this.props.file); + } + }, { + key: 'componentWillReceiveProps', + value: function componentWillReceiveProps(newProps) { + if (newProps.file !== this.props.file) { + this.setPreviewImageSource(newProps.file); + } + if (newProps.thumbnail !== this.props.thumbnail) { + if (newProps.thumbnail) { + this.setPreviewImageSourceFromFile(newProps.thumbnail); + } else { + this.setState({ imgSource: this.state.defaultThumbnail }); + } + } + } + }, { + key: 'setPreviewImageSourceFromFile', + value: function setPreviewImageSourceFromFile(file) { + var _this2 = this; + + var previewReader = new FileReader(); + previewReader.readAsDataURL(file); + previewReader.onloadend = function () { + _this2.setState({ imgSource: previewReader.result }); + }; + } + }, { + key: 'setPreviewImageSource', + value: function setPreviewImageSource(file) { + if (file.type !== 'video/mp4') { + this.setPreviewImageSourceFromFile(file); + } else { + if (this.props.thumbnail) { + this.setPreviewImageSourceFromFile(this.props.thumbnail); + } + this.setState({ imgSource: this.state.defaultThumbnail }); + } + } + }, { + key: 'render', + value: function render() { + return _react2.default.createElement('img', { + id: 'dropzone-preview', + src: this.state.imgSource, + className: this.props.dimPreview ? 'dim' : '', + alt: 'publish preview' + }); + } + }]); + + return PublishPreview; +}(_react2.default.Component); + +; + +PublishPreview.propTypes = { + dimPreview: _propTypes2.default.bool.isRequired, + file: _propTypes2.default.object.isRequired, + thumbnail: _propTypes2.default.object +}; + +exports.default = PublishPreview; + +/***/ }), +/* 102 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _publish = __webpack_require__(4); + +var _view = __webpack_require__(103); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var channel = _ref.channel, + publish = _ref.publish; + + return { + file: publish.file + }; +}; + +var mapDispatchToProps = { + clearFile: _publish.clearFile, + startPublish: _publish.startPublish +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); + +/***/ }), +/* 103 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _reactRouterDom = __webpack_require__(3); + +var _Dropzone = __webpack_require__(38); + +var _Dropzone2 = _interopRequireDefault(_Dropzone); + +var _PublishTitleInput = __webpack_require__(104); + +var _PublishTitleInput2 = _interopRequireDefault(_PublishTitleInput); + +var _PublishUrlInput = __webpack_require__(106); + +var _PublishUrlInput2 = _interopRequireDefault(_PublishUrlInput); + +var _PublishThumbnailInput = __webpack_require__(109); + +var _PublishThumbnailInput2 = _interopRequireDefault(_PublishThumbnailInput); + +var _PublishMetadataInputs = __webpack_require__(111); + +var _PublishMetadataInputs2 = _interopRequireDefault(_PublishMetadataInputs); + +var _ChannelSelect = __webpack_require__(114); + +var _ChannelSelect2 = _interopRequireDefault(_ChannelSelect); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var PublishDetails = function (_React$Component) { + _inherits(PublishDetails, _React$Component); + + function PublishDetails(props) { + _classCallCheck(this, PublishDetails); + + var _this = _possibleConstructorReturn(this, (PublishDetails.__proto__ || Object.getPrototypeOf(PublishDetails)).call(this, props)); + + _this.onPublishSubmit = _this.onPublishSubmit.bind(_this); + return _this; + } + + _createClass(PublishDetails, [{ + key: 'onPublishSubmit', + value: function onPublishSubmit() { + this.props.startPublish(this.props.history); + } + }, { + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + { className: 'row row--no-bottom' }, + _react2.default.createElement( + 'div', + { className: 'column column--10' }, + _react2.default.createElement(_PublishTitleInput2.default, null) + ), + _react2.default.createElement( + 'div', + { className: 'column column--5 column--sml-10' }, + _react2.default.createElement( + 'div', + { className: 'row row--padded' }, + _react2.default.createElement(_Dropzone2.default, null) + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--5 column--sml-10 align-content-top' }, + _react2.default.createElement( + 'div', + { id: 'publish-active-area', className: 'row row--padded' }, + _react2.default.createElement( + 'div', + { className: 'row row--padded row--no-top row--wide' }, + _react2.default.createElement(_PublishUrlInput2.default, null) + ), + _react2.default.createElement( + 'div', + { className: 'row row--padded row--no-top row--wide' }, + _react2.default.createElement(_ChannelSelect2.default, null) + ), + this.props.file.type === 'video/mp4' && _react2.default.createElement( + 'div', + { className: 'row row--padded row--no-top row--wide ' }, + _react2.default.createElement(_PublishThumbnailInput2.default, null) + ), + _react2.default.createElement( + 'div', + { className: 'row row--padded row--no-top row--no-bottom row--wide' }, + _react2.default.createElement(_PublishMetadataInputs2.default, null) + ), + _react2.default.createElement( + 'div', + { className: 'row row--wide align-content-center' }, + _react2.default.createElement( + 'button', + { id: 'publish-submit', className: 'button--primary button--large', onClick: this.onPublishSubmit }, + 'Publish' + ) + ), + _react2.default.createElement( + 'div', + { className: 'row row--padded row--no-bottom align-content-center' }, + _react2.default.createElement( + 'button', + { className: 'button--cancel', onClick: this.props.clearFile }, + 'Cancel' + ) + ), + _react2.default.createElement( + 'div', + { className: 'row row--short align-content-center' }, + _react2.default.createElement( + 'p', + { className: 'fine-print' }, + 'By clicking \'Publish\', you affirm that you have the rights to publish this content to the LBRY network, and that you understand the properties of publishing it to a decentralized, user-controlled network. ', + _react2.default.createElement( + 'a', + { className: 'link--primary', target: '_blank', href: 'https://lbry.io/learn' }, + 'Read more.' + ) + ) + ) + ) + ) + ); + } + }]); + + return PublishDetails; +}(_react2.default.Component); + +; + +exports.default = (0, _reactRouterDom.withRouter)(PublishDetails); + +/***/ }), +/* 104 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _publish = __webpack_require__(4); + +var _view = __webpack_require__(105); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var publish = _ref.publish; + + return { + title: publish.metadata.title + }; +}; + +var mapDispatchToProps = function mapDispatchToProps(dispatch) { + return { + onMetadataChange: function onMetadataChange(name, value) { + dispatch((0, _publish.updateMetadata)(name, value)); + } + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); + +/***/ }), +/* 105 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var PublishTitleInput = function (_React$Component) { + _inherits(PublishTitleInput, _React$Component); + + function PublishTitleInput(props) { + _classCallCheck(this, PublishTitleInput); + + var _this = _possibleConstructorReturn(this, (PublishTitleInput.__proto__ || Object.getPrototypeOf(PublishTitleInput)).call(this, props)); + + _this.handleInput = _this.handleInput.bind(_this); + return _this; + } + + _createClass(PublishTitleInput, [{ + key: 'handleInput', + value: function handleInput(e) { + var name = e.target.name; + var value = e.target.value; + this.props.onMetadataChange(name, value); + } + }, { + key: 'render', + value: function render() { + return _react2.default.createElement('input', { type: 'text', id: 'publish-title', className: 'input-text text--large input-text--full-width', name: 'title', placeholder: 'Give your post a title...', onChange: this.handleInput, value: this.props.title }); + } + }]); + + return PublishTitleInput; +}(_react2.default.Component); + +exports.default = PublishTitleInput; + +/***/ }), +/* 106 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _publish = __webpack_require__(4); + +var _reactRedux = __webpack_require__(1); + +var _view = __webpack_require__(107); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var channel = _ref.channel, + publish = _ref.publish; + + return { + loggedInChannelName: channel.loggedInChannel.name, + loggedInChannelShortId: channel.loggedInChannel.shortId, + fileName: publish.file.name, + publishInChannel: publish.publishInChannel, + selectedChannel: publish.selectedChannel, + claim: publish.claim, + urlError: publish.error.url + }; +}; + +var mapDispatchToProps = function mapDispatchToProps(dispatch) { + return { + onClaimChange: function onClaimChange(value) { + dispatch((0, _publish.updateClaim)(value)); + dispatch((0, _publish.updateError)('publishSubmit', null)); + }, + onUrlError: function onUrlError(value) { + dispatch((0, _publish.updateError)('url', value)); + } + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); + +/***/ }), +/* 107 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _request = __webpack_require__(11); + +var _request2 = _interopRequireDefault(_request); + +var _PublishUrlMiddleDisplay = __webpack_require__(108); + +var _PublishUrlMiddleDisplay2 = _interopRequireDefault(_PublishUrlMiddleDisplay); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var PublishUrlInput = function (_React$Component) { + _inherits(PublishUrlInput, _React$Component); + + function PublishUrlInput(props) { + _classCallCheck(this, PublishUrlInput); + + var _this = _possibleConstructorReturn(this, (PublishUrlInput.__proto__ || Object.getPrototypeOf(PublishUrlInput)).call(this, props)); + + _this.handleInput = _this.handleInput.bind(_this); + return _this; + } + + _createClass(PublishUrlInput, [{ + key: 'componentDidMount', + value: function componentDidMount() { + var _props = this.props, + claim = _props.claim, + fileName = _props.fileName; + + if (!claim) { + this.setClaimName(fileName); + } + } + }, { + key: 'componentWillReceiveProps', + value: function componentWillReceiveProps(_ref) { + var claim = _ref.claim, + fileName = _ref.fileName; + + // if a new file was chosen, update the claim name + if (fileName !== this.props.fileName) { + return this.setClaimName(fileName); + } + // if the claim has updated, check its availability + if (claim !== this.props.claim) { + this.validateClaim(claim); + } + } + }, { + key: 'handleInput', + value: function handleInput(event) { + var value = event.target.value; + value = this.cleanseInput(value); + // update the state + this.props.onClaimChange(value); + } + }, { + key: 'cleanseInput', + value: function cleanseInput(input) { + input = input.replace(/\s+/g, '-'); // replace spaces with dashes + input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-' + return input; + } + }, { + key: 'setClaimName', + value: function setClaimName(fileName) { + var fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.')); + var cleanClaimName = this.cleanseInput(fileNameWithoutEnding); + this.props.onClaimChange(cleanClaimName); + } + }, { + key: 'validateClaim', + value: function validateClaim(claim) { + var _this2 = this; + + if (!claim) { + return this.props.onUrlError('Enter a url above'); + } + (0, _request2.default)('/api/claim/availability/' + claim).then(function () { + _this2.props.onUrlError(null); + }).catch(function (error) { + _this2.props.onUrlError(error.message); + }); + } + }, { + key: 'render', + value: function render() { + var _props2 = this.props, + claim = _props2.claim, + loggedInChannelName = _props2.loggedInChannelName, + loggedInChannelShortId = _props2.loggedInChannelShortId, + publishInChannel = _props2.publishInChannel, + selectedChannel = _props2.selectedChannel, + urlError = _props2.urlError; + + return _react2.default.createElement( + 'div', + { className: 'column column--10 column--sml-10' }, + _react2.default.createElement( + 'div', + { className: 'input-text--primary span--relative' }, + _react2.default.createElement( + 'span', + { className: 'url-text--secondary' }, + 'spee.ch / ' + ), + _react2.default.createElement(_PublishUrlMiddleDisplay2.default, { + publishInChannel: publishInChannel, + selectedChannel: selectedChannel, + loggedInChannelName: loggedInChannelName, + loggedInChannelShortId: loggedInChannelShortId + }), + _react2.default.createElement('input', { type: 'text', id: 'claim-name-input', className: 'input-text', name: 'claim', placeholder: 'your-url-here', onChange: this.handleInput, value: claim }), + claim && !urlError && _react2.default.createElement( + 'span', + { id: 'input-success-claim-name', className: 'info-message--success span--absolute' }, + '\u2713' + ), + urlError && _react2.default.createElement( + 'span', + { id: 'input-success-channel-name', className: 'info-message--failure span--absolute' }, + '\u2716' + ) + ), + _react2.default.createElement( + 'div', + null, + urlError ? _react2.default.createElement( + 'p', + { id: 'input-error-claim-name', className: 'info-message--failure' }, + urlError + ) : _react2.default.createElement( + 'p', + { className: 'info-message' }, + 'Choose a custom url' + ) + ) + ); + } + }]); + + return PublishUrlInput; +}(_react2.default.Component); + +exports.default = PublishUrlInput; + +/***/ }), +/* 108 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(10); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function UrlMiddle(_ref) { + var publishInChannel = _ref.publishInChannel, + selectedChannel = _ref.selectedChannel, + loggedInChannelName = _ref.loggedInChannelName, + loggedInChannelShortId = _ref.loggedInChannelShortId; + + if (publishInChannel) { + if (selectedChannel === loggedInChannelName) { + return _react2.default.createElement( + 'span', + { id: 'url-channel', className: 'url-text--secondary' }, + loggedInChannelName, + ':', + loggedInChannelShortId, + ' /' + ); + } + return _react2.default.createElement( + 'span', + { id: 'url-channel-placeholder', className: 'url-text--secondary tooltip' }, + '@channel', + _react2.default.createElement( + 'span', + { + className: 'tooltip-text' }, + 'Select a channel below' + ), + ' /' + ); + } + return _react2.default.createElement( + 'span', + { id: 'url-no-channel-placeholder', className: 'url-text--secondary tooltip' }, + 'xyz', + _react2.default.createElement( + 'span', + { className: 'tooltip-text' }, + 'This will be a random id' + ), + ' /' + ); +} + +UrlMiddle.propTypes = { + publishInChannel: _propTypes2.default.bool.isRequired, + loggedInChannelName: _propTypes2.default.string, + loggedInChannelShortId: _propTypes2.default.string +}; + +exports.default = UrlMiddle; + +/***/ }), +/* 109 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _publish = __webpack_require__(4); + +var _view = __webpack_require__(110); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var file = _ref.publish.file; + + return { + file: file + }; +}; + +var mapDispatchToProps = { + onNewThumbnail: _publish.onNewThumbnail +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); + +/***/ }), +/* 110 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +function dataURItoBlob(dataURI) { + // convert base64/URLEncoded data component to raw binary data held in a string + var byteString = atob(dataURI.split(',')[1]); + // separate out the mime component + var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; + // write the bytes of the string to a typed array + var ia = new Uint8Array(byteString.length); + for (var i = 0; i < byteString.length; i++) { + ia[i] = byteString.charCodeAt(i); + } + return new Blob([ia], { type: mimeString }); +} + +var PublishThumbnailInput = function (_React$Component) { + _inherits(PublishThumbnailInput, _React$Component); + + function PublishThumbnailInput(props) { + _classCallCheck(this, PublishThumbnailInput); + + var _this = _possibleConstructorReturn(this, (PublishThumbnailInput.__proto__ || Object.getPrototypeOf(PublishThumbnailInput)).call(this, props)); + + _this.state = { + videoSource: null, + error: null, + sliderMinRange: 1, + sliderMaxRange: null, + sliderValue: null + }; + _this.handleVideoLoadedData = _this.handleVideoLoadedData.bind(_this); + _this.handleSliderChange = _this.handleSliderChange.bind(_this); + _this.createThumbnail = _this.createThumbnail.bind(_this); + return _this; + } + + _createClass(PublishThumbnailInput, [{ + key: 'componentDidMount', + value: function componentDidMount() { + var file = this.props.file; + + this.setVideoSource(file); + } + }, { + key: 'componentWillReceiveProps', + value: function componentWillReceiveProps(nextProps) { + // if file changes + if (nextProps.file && nextProps.file !== this.props.file) { + var file = nextProps.file; + + this.setVideoSource(file); + }; + } + }, { + key: 'setVideoSource', + value: function setVideoSource(file) { + var _this2 = this; + + var previewReader = new FileReader(); + previewReader.readAsDataURL(file); + previewReader.onloadend = function () { + var dataUri = previewReader.result; + var blob = dataURItoBlob(dataUri); + var videoSource = URL.createObjectURL(blob); + _this2.setState({ videoSource: videoSource }); + }; + } + }, { + key: 'handleVideoLoadedData', + value: function handleVideoLoadedData(event) { + var duration = event.target.duration; + var totalMinutes = Math.floor(duration / 60); + var totalSeconds = Math.floor(duration % 60); + // set the slider + this.setState({ + sliderMaxRange: duration * 100, + sliderValue: duration * 100 / 2, + totalMinutes: totalMinutes, + totalSeconds: totalSeconds + }); + // update the current time of the video + var video = document.getElementById('video-thumb-player'); + video.currentTime = duration / 2; + } + }, { + key: 'handleSliderChange', + value: function handleSliderChange(event) { + var value = parseInt(event.target.value); + // update the slider value + this.setState({ + sliderValue: value + }); + // update the current time of the video + var video = document.getElementById('video-thumb-player'); + video.currentTime = value / 100; + } + }, { + key: 'createThumbnail', + value: function createThumbnail() { + // take a snapshot + var video = document.getElementById('video-thumb-player'); + var canvas = document.createElement('canvas'); + canvas.width = video.videoWidth; + canvas.height = video.videoHeight; + canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height); + var dataUrl = canvas.toDataURL(); + var blob = dataURItoBlob(dataUrl); + var snapshot = new File([blob], 'thumbnail.png', { + type: 'image/png' + }); + // set the thumbnail in redux store + if (snapshot) { + this.props.onNewThumbnail(snapshot); + } + } + }, { + key: 'render', + value: function render() { + var _state = this.state, + error = _state.error, + videoSource = _state.videoSource, + sliderMinRange = _state.sliderMinRange, + sliderMaxRange = _state.sliderMaxRange, + sliderValue = _state.sliderValue, + totalMinutes = _state.totalMinutes, + totalSeconds = _state.totalSeconds; + + return _react2.default.createElement( + 'div', + null, + _react2.default.createElement( + 'label', + { className: 'label' }, + 'Thumbnail:' + ), + _react2.default.createElement('video', { + id: 'video-thumb-player', + preload: 'metadata', + muted: true, + style: { display: 'none' }, + playsInline: true, + onLoadedData: this.handleVideoLoadedData, + src: videoSource, + onSeeked: this.createThumbnail + }), + sliderValue ? _react2.default.createElement( + 'div', + null, + _react2.default.createElement( + 'div', + { className: 'flex-container--row flex-container--space-between-center', style: { width: '100%' } }, + _react2.default.createElement( + 'span', + { className: 'info-message' }, + '0\'00"' + ), + _react2.default.createElement( + 'span', + { className: 'info-message' }, + totalMinutes, + '\'', + totalSeconds, + '"' + ) + ), + _react2.default.createElement( + 'div', + null, + _react2.default.createElement('input', { + type: 'range', + min: sliderMinRange, + max: sliderMaxRange, + value: sliderValue, + className: 'slider', + onChange: this.handleSliderChange + }) + ) + ) : _react2.default.createElement( + 'p', + { className: 'info-message' }, + 'loading... ' + ), + error ? _react2.default.createElement( + 'p', + { className: 'info-message--failure' }, + error + ) : _react2.default.createElement( + 'p', + { className: 'info-message' }, + 'Use slider to set thumbnail' + ) + ); + } + }]); + + return PublishThumbnailInput; +}(_react2.default.Component); + +exports.default = PublishThumbnailInput; + +/***/ }), +/* 111 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _publish = __webpack_require__(4); + +var _view = __webpack_require__(112); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var publish = _ref.publish; + + return { + showMetadataInputs: publish.showMetadataInputs, + description: publish.metadata.description, + license: publish.metadata.license, + nsfw: publish.metadata.nsfw + }; +}; + +var mapDispatchToProps = function mapDispatchToProps(dispatch) { + return { + onMetadataChange: function onMetadataChange(name, value) { + dispatch((0, _publish.updateMetadata)(name, value)); + }, + onToggleMetadataInputs: function onToggleMetadataInputs(value) { + dispatch((0, _publish.toggleMetadataInputs)(value)); + } + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); + +/***/ }), +/* 112 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _ExpandingTextArea = __webpack_require__(113); + +var _ExpandingTextArea2 = _interopRequireDefault(_ExpandingTextArea); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var PublishMetadataInputs = function (_React$Component) { + _inherits(PublishMetadataInputs, _React$Component); + + function PublishMetadataInputs(props) { + _classCallCheck(this, PublishMetadataInputs); + + var _this = _possibleConstructorReturn(this, (PublishMetadataInputs.__proto__ || Object.getPrototypeOf(PublishMetadataInputs)).call(this, props)); + + _this.toggleShowInputs = _this.toggleShowInputs.bind(_this); + _this.handleInput = _this.handleInput.bind(_this); + _this.handleSelect = _this.handleSelect.bind(_this); + return _this; + } + + _createClass(PublishMetadataInputs, [{ + key: 'toggleShowInputs', + value: function toggleShowInputs() { + this.props.onToggleMetadataInputs(!this.props.showMetadataInputs); + } + }, { + key: 'handleInput', + value: function handleInput(event) { + var target = event.target; + var value = target.type === 'checkbox' ? target.checked : target.value; + var name = target.name; + this.props.onMetadataChange(name, value); + } + }, { + key: 'handleSelect', + value: function handleSelect(event) { + var name = event.target.name; + var selectedOption = event.target.selectedOptions[0].value; + this.props.onMetadataChange(name, selectedOption); + } + }, { + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + { id: 'publish-details', className: 'row row--padded row--no-top row--wide' }, + this.props.showMetadataInputs && _react2.default.createElement( + 'div', + null, + _react2.default.createElement( + 'div', + { className: 'row row--no-top' }, + _react2.default.createElement( + 'div', + { className: 'column column--3 column--med-10 align-content-top' }, + _react2.default.createElement( + 'label', + { htmlFor: 'publish-license', className: 'label' }, + 'Description:' + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--7 column--sml-10' }, + _react2.default.createElement(_ExpandingTextArea2.default, { + id: 'publish-description', + className: 'textarea textarea--primary textarea--full-width', + rows: 1, + maxLength: 2000, + style: { maxHeight: 200 }, + name: 'description', + placeholder: 'Optional description', + value: this.props.description, + onChange: this.handleInput }) + ) + ), + _react2.default.createElement( + 'div', + { className: 'row row--no-top' }, + _react2.default.createElement( + 'div', + { className: 'column column--3 column--med-10' }, + _react2.default.createElement( + 'label', + { htmlFor: 'publish-license', className: 'label' }, + 'License:' + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--7 column--sml-10' }, + _react2.default.createElement( + 'select', + { type: 'text', name: 'license', id: 'publish-license', className: 'select select--primary', onChange: this.handleSelect }, + _react2.default.createElement( + 'option', + { value: ' ' }, + 'Unspecified' + ), + _react2.default.createElement( + 'option', + { value: 'Public Domain' }, + 'Public Domain' + ), + _react2.default.createElement( + 'option', + { value: 'Creative Commons' }, + 'Creative Commons' + ) + ) + ) + ), + _react2.default.createElement( + 'div', + { className: 'row row--no-top' }, + _react2.default.createElement( + 'div', + { className: 'column column--3' }, + _react2.default.createElement( + 'label', + { htmlFor: 'publish-nsfw', className: 'label' }, + 'Mature:' + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--7' }, + _react2.default.createElement('input', { className: 'input-checkbox', type: 'checkbox', id: 'publish-nsfw', name: 'nsfw', value: this.props.nsfw, onChange: this.handleInput }) + ) + ) + ), + _react2.default.createElement( + 'button', + { className: 'button--secondary', onClick: this.toggleShowInputs }, + this.props.showMetadataInputs ? 'less' : 'more' + ) + ); + } + }]); + + return PublishMetadataInputs; +}(_react2.default.Component); + +exports.default = PublishMetadataInputs; + +/***/ }), +/* 113 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(10); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var ExpandingTextarea = function (_Component) { + _inherits(ExpandingTextarea, _Component); + + function ExpandingTextarea(props) { + _classCallCheck(this, ExpandingTextarea); + + var _this = _possibleConstructorReturn(this, (ExpandingTextarea.__proto__ || Object.getPrototypeOf(ExpandingTextarea)).call(this, props)); + + _this._handleChange = _this._handleChange.bind(_this); + return _this; + } + + _createClass(ExpandingTextarea, [{ + key: 'componentDidMount', + value: function componentDidMount() { + this.adjustTextarea({}); + } + }, { + key: '_handleChange', + value: function _handleChange(event) { + var onChange = this.props.onChange; + + if (onChange) onChange(event); + this.adjustTextarea(event); + } + }, { + key: 'adjustTextarea', + value: function adjustTextarea(_ref) { + var _ref$target = _ref.target, + target = _ref$target === undefined ? this.el : _ref$target; + + target.style.height = 0; + target.style.height = target.scrollHeight + 'px'; + } + }, { + key: 'render', + value: function render() { + var _this2 = this; + + var rest = _objectWithoutProperties(this.props, []); + + return _react2.default.createElement('textarea', _extends({}, rest, { + ref: function ref(x) { + return _this2.el = x; + }, + onChange: this._handleChange + })); + } + }]); + + return ExpandingTextarea; +}(_react.Component); + +ExpandingTextarea.propTypes = { + onChange: _propTypes2.default.func +}; + +exports.default = ExpandingTextarea; + +/***/ }), +/* 114 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _publish = __webpack_require__(4); + +var _view = __webpack_require__(115); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var channel = _ref.channel, + publish = _ref.publish; + + return { + loggedInChannelName: channel.loggedInChannel.name, + publishInChannel: publish.publishInChannel, + selectedChannel: publish.selectedChannel, + channelError: publish.error.channel + }; +}; + +var mapDispatchToProps = function mapDispatchToProps(dispatch) { + return { + onPublishInChannelChange: function onPublishInChannelChange(value) { + dispatch((0, _publish.updateError)('channel', null)); + dispatch((0, _publish.setPublishInChannel)(value)); + }, + onChannelSelect: function onChannelSelect(value) { + dispatch((0, _publish.updateError)('channel', null)); + dispatch((0, _publish.updateSelectedChannel)(value)); + } + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); + +/***/ }), +/* 115 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _ChannelLoginForm = __webpack_require__(39); + +var _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm); + +var _ChannelCreateForm = __webpack_require__(40); + +var _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm); + +var _publish_channel_select_states = __webpack_require__(33); + +var states = _interopRequireWildcard(_publish_channel_select_states); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var ChannelSelect = function (_React$Component) { + _inherits(ChannelSelect, _React$Component); + + function ChannelSelect(props) { + _classCallCheck(this, ChannelSelect); + + var _this = _possibleConstructorReturn(this, (ChannelSelect.__proto__ || Object.getPrototypeOf(ChannelSelect)).call(this, props)); + + _this.toggleAnonymousPublish = _this.toggleAnonymousPublish.bind(_this); + _this.handleSelection = _this.handleSelection.bind(_this); + return _this; + } + + _createClass(ChannelSelect, [{ + key: 'toggleAnonymousPublish', + value: function toggleAnonymousPublish(event) { + var value = event.target.value; + if (value === 'anonymous') { + this.props.onPublishInChannelChange(false); + } else { + this.props.onPublishInChannelChange(true); + } + } + }, { + key: 'handleSelection', + value: function handleSelection(event) { + var selectedOption = event.target.selectedOptions[0].value; + this.props.onChannelSelect(selectedOption); + } + }, { + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + null, + _react2.default.createElement( + 'form', + null, + _react2.default.createElement( + 'div', + { className: 'column column--3 column--med-10' }, + _react2.default.createElement('input', { type: 'radio', name: 'anonymous-or-channel', id: 'anonymous-radio', className: 'input-radio', value: 'anonymous', checked: !this.props.publishInChannel, onChange: this.toggleAnonymousPublish }), + _react2.default.createElement( + 'label', + { className: 'label label--pointer', htmlFor: 'anonymous-radio' }, + 'Anonymous' + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--7 column--med-10' }, + _react2.default.createElement('input', { type: 'radio', name: 'anonymous-or-channel', id: 'channel-radio', className: 'input-radio', value: 'in a channel', checked: this.props.publishInChannel, onChange: this.toggleAnonymousPublish }), + _react2.default.createElement( + 'label', + { className: 'label label--pointer', htmlFor: 'channel-radio' }, + 'In a channel' + ) + ), + this.props.channelError ? _react2.default.createElement( + 'p', + { className: 'info-message--failure' }, + this.props.channelError + ) : _react2.default.createElement( + 'p', + { className: 'info-message' }, + 'Publish anonymously or in a channel' + ) + ), + this.props.publishInChannel && _react2.default.createElement( + 'div', + null, + _react2.default.createElement( + 'div', + { className: 'column column--3' }, + _react2.default.createElement( + 'label', + { className: 'label', htmlFor: 'channel-name-select' }, + 'Channel:' + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--7' }, + _react2.default.createElement( + 'select', + { type: 'text', id: 'channel-name-select', className: 'select select--arrow', value: this.props.selectedChannel, onChange: this.handleSelection }, + this.props.loggedInChannelName && _react2.default.createElement( + 'option', + { value: this.props.loggedInChannelName, id: 'publish-channel-select-channel-option' }, + this.props.loggedInChannelName + ), + _react2.default.createElement( + 'option', + { value: states.LOGIN }, + 'Existing' + ), + _react2.default.createElement( + 'option', + { value: states.CREATE }, + 'New' + ) + ) + ), + this.props.selectedChannel === states.LOGIN && _react2.default.createElement(_ChannelLoginForm2.default, null), + this.props.selectedChannel === states.CREATE && _react2.default.createElement(_ChannelCreateForm2.default, null) + ) + ); + } + }]); + + return ChannelSelect; +}(_react2.default.Component); + +exports.default = ChannelSelect; + +/***/ }), +/* 116 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _request = __webpack_require__(11); + +var _request2 = _interopRequireDefault(_request); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var ChannelLoginForm = function (_React$Component) { + _inherits(ChannelLoginForm, _React$Component); + + function ChannelLoginForm(props) { + _classCallCheck(this, ChannelLoginForm); + + var _this = _possibleConstructorReturn(this, (ChannelLoginForm.__proto__ || Object.getPrototypeOf(ChannelLoginForm)).call(this, props)); + + _this.state = { + error: null, + name: '', + password: '' + }; + _this.handleInput = _this.handleInput.bind(_this); + _this.loginToChannel = _this.loginToChannel.bind(_this); + return _this; + } + + _createClass(ChannelLoginForm, [{ + key: 'handleInput', + value: function handleInput(event) { + var name = event.target.name; + var value = event.target.value; + this.setState(_defineProperty({}, name, value)); + } + }, { + key: 'loginToChannel', + value: function loginToChannel(event) { + var _this2 = this; + + event.preventDefault(); + var params = { + method: 'POST', + body: JSON.stringify({ username: this.state.name, password: this.state.password }), + headers: new Headers({ + 'Content-Type': 'application/json' + }), + credentials: 'include' + }; + (0, _request2.default)('login', params).then(function (_ref) { + var success = _ref.success, + channelName = _ref.channelName, + shortChannelId = _ref.shortChannelId, + channelClaimId = _ref.channelClaimId, + message = _ref.message; + + if (success) { + _this2.props.onChannelLogin(channelName, shortChannelId, channelClaimId); + } else { + _this2.setState({ 'error': message }); + }; + }).catch(function (error) { + if (error.message) { + _this2.setState({ 'error': error.message }); + } else { + _this2.setState({ 'error': error }); + } + }); + } + }, { + key: 'render', + value: function render() { + return _react2.default.createElement( + 'form', + { id: 'channel-login-form' }, + _react2.default.createElement( + 'div', + { className: 'row row--wide row--short' }, + _react2.default.createElement( + 'div', + { className: 'column column--3 column--sml-10' }, + _react2.default.createElement( + 'label', + { className: 'label', htmlFor: 'channel-login-name-input' }, + 'Name:' + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--6 column--sml-10' }, + _react2.default.createElement( + 'div', + { className: 'input-text--primary flex-container--row flex-container--left-bottom' }, + _react2.default.createElement( + 'span', + null, + '@' + ), + _react2.default.createElement('input', { type: 'text', id: 'channel-login-name-input', className: 'input-text', name: 'name', placeholder: 'Your Channel Name', value: this.state.channelName, onChange: this.handleInput }) + ) + ) + ), + _react2.default.createElement( + 'div', + { className: 'row row--wide row--short' }, + _react2.default.createElement( + 'div', + { className: 'column column--3 column--sml-10' }, + _react2.default.createElement( + 'label', + { className: 'label', htmlFor: 'channel-login-password-input' }, + 'Password:' + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--6 column--sml-10' }, + _react2.default.createElement( + 'div', + { className: 'input-text--primary' }, + _react2.default.createElement('input', { type: 'password', id: 'channel-login-password-input', name: 'password', className: 'input-text', placeholder: '', value: this.state.channelPassword, onChange: this.handleInput }) + ) + ) + ), + this.state.error ? _react2.default.createElement( + 'p', + { className: 'info-message--failure' }, + this.state.error + ) : _react2.default.createElement( + 'p', + { className: 'info-message' }, + 'Enter the name and password for your channel' + ), + _react2.default.createElement( + 'div', + { className: 'row row--wide' }, + _react2.default.createElement( + 'button', + { className: 'button--primary', onClick: this.loginToChannel }, + 'Authenticate' + ) + ) + ); + } + }]); + + return ChannelLoginForm; +}(_react2.default.Component); + +exports.default = ChannelLoginForm; + +/***/ }), +/* 117 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _ProgressBar = __webpack_require__(20); + +var _ProgressBar2 = _interopRequireDefault(_ProgressBar); + +var _request = __webpack_require__(11); + +var _request2 = _interopRequireDefault(_request); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var ChannelCreateForm = function (_React$Component) { + _inherits(ChannelCreateForm, _React$Component); + + function ChannelCreateForm(props) { + _classCallCheck(this, ChannelCreateForm); + + var _this = _possibleConstructorReturn(this, (ChannelCreateForm.__proto__ || Object.getPrototypeOf(ChannelCreateForm)).call(this, props)); + + _this.state = { + error: null, + channel: '', + password: '', + status: null + }; + _this.handleChannelInput = _this.handleChannelInput.bind(_this); + _this.handleInput = _this.handleInput.bind(_this); + _this.createChannel = _this.createChannel.bind(_this); + return _this; + } + + _createClass(ChannelCreateForm, [{ + key: 'cleanseChannelInput', + value: function cleanseChannelInput(input) { + input = input.replace(/\s+/g, '-'); // replace spaces with dashes + input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-' + return input; + } + }, { + key: 'handleChannelInput', + value: function handleChannelInput(event) { + var value = event.target.value; + value = this.cleanseChannelInput(value); + this.setState({ channel: value }); + if (value) { + this.updateIsChannelAvailable(value); + } else { + this.setState({ error: 'Please enter a channel name' }); + } + } + }, { + key: 'handleInput', + value: function handleInput(event) { + var name = event.target.name; + var value = event.target.value; + this.setState(_defineProperty({}, name, value)); + } + }, { + key: 'updateIsChannelAvailable', + value: function updateIsChannelAvailable(channel) { + var _this2 = this; + + var channelWithAtSymbol = '@' + channel; + (0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol).then(function () { + _this2.setState({ 'error': null }); + }).catch(function (error) { + _this2.setState({ 'error': error.message }); + }); + } + }, { + key: 'checkIsChannelAvailable', + value: function checkIsChannelAvailable(channel) { + var channelWithAtSymbol = '@' + channel; + return (0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol); + } + }, { + key: 'checkIsPasswordProvided', + value: function checkIsPasswordProvided(password) { + return new Promise(function (resolve, reject) { + if (!password || password.length < 1) { + return reject(new Error('Please provide a password')); + } + resolve(); + }); + } + }, { + key: 'makePublishChannelRequest', + value: function makePublishChannelRequest(username, password) { + var params = { + method: 'POST', + body: JSON.stringify({ username: username, password: password }), + headers: new Headers({ + 'Content-Type': 'application/json' + }), + credentials: 'include' + }; + return new Promise(function (resolve, reject) { + (0, _request2.default)('/signup', params).then(function (result) { + return resolve(result); + }).catch(function (error) { + reject(new Error('Unfortunately, we encountered an error while creating your channel. Please let us know in Discord! ' + error.message)); + }); + }); + } + }, { + key: 'createChannel', + value: function createChannel(event) { + var _this3 = this; + + event.preventDefault(); + this.checkIsPasswordProvided(this.state.password).then(function () { + return _this3.checkIsChannelAvailable(_this3.state.channel); + }).then(function () { + _this3.setState({ status: 'We are publishing your new channel. Sit tight...' }); + return _this3.makePublishChannelRequest(_this3.state.channel, _this3.state.password); + }).then(function (result) { + _this3.setState({ status: null }); + _this3.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId); + }).catch(function (error) { + if (error.message) { + _this3.setState({ 'error': error.message, status: null }); + } else { + _this3.setState({ 'error': error, status: null }); + }; + }); + } + }, { + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + null, + !this.state.status ? _react2.default.createElement( + 'form', + { id: 'publish-channel-form' }, + _react2.default.createElement( + 'div', + { className: 'row row--wide row--short' }, + _react2.default.createElement( + 'div', + { className: 'column column--3 column--sml-10' }, + _react2.default.createElement( + 'label', + { className: 'label', htmlFor: 'new-channel-name' }, + 'Name:' + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--6 column--sml-10' }, + _react2.default.createElement( + 'div', + { className: 'input-text--primary flex-container--row flex-container--left-bottom span--relative' }, + _react2.default.createElement( + 'span', + null, + '@' + ), + _react2.default.createElement('input', { type: 'text', name: 'channel', id: 'new-channel-name', className: 'input-text', placeholder: 'exampleChannelName', value: this.state.channel, onChange: this.handleChannelInput }), + this.state.channel && !this.state.error && _react2.default.createElement( + 'span', + { id: 'input-success-channel-name', className: 'info-message--success span--absolute' }, + '\u2713' + ), + this.state.error && _react2.default.createElement( + 'span', + { id: 'input-success-channel-name', className: 'info-message--failure span--absolute' }, + '\u2716' + ) + ) + ) + ), + _react2.default.createElement( + 'div', + { className: 'row row--wide row--short' }, + _react2.default.createElement( + 'div', + { className: 'column column--3 column--sml-10' }, + _react2.default.createElement( + 'label', + { className: 'label', htmlFor: 'new-channel-password' }, + 'Password:' + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--6 column--sml-10' }, + _react2.default.createElement( + 'div', + { className: 'input-text--primary' }, + _react2.default.createElement('input', { type: 'password', name: 'password', id: 'new-channel-password', className: 'input-text', placeholder: '', value: this.state.password, onChange: this.handleInput }) + ) + ) + ), + this.state.error ? _react2.default.createElement( + 'p', + { className: 'info-message--failure' }, + this.state.error + ) : _react2.default.createElement( + 'p', + { className: 'info-message' }, + 'Choose a name and password for your channel' + ), + _react2.default.createElement( + 'div', + { className: 'row row--wide' }, + _react2.default.createElement( + 'button', + { className: 'button--primary', onClick: this.createChannel }, + 'Create Channel' + ) + ) + ) : _react2.default.createElement( + 'div', + null, + _react2.default.createElement( + 'p', + { className: 'fine-print' }, + this.state.status + ), + _react2.default.createElement(_ProgressBar2.default, { size: 12 }) + ) + ); + } + }]); + + return ChannelCreateForm; +}(_react2.default.Component); + +exports.default = ChannelCreateForm; + +/***/ }), +/* 118 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var ActiveStatusBar = function ActiveStatusBar() { + return _react2.default.createElement( + 'span', + { className: 'progress-bar progress-bar--active' }, + '| ' + ); +}; + +exports.default = ActiveStatusBar; + +/***/ }), +/* 119 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var InactiveStatusBar = function InactiveStatusBar() { + return _react2.default.createElement( + 'span', + { className: 'progress-bar progress-bar--inactive' }, + '| ' + ); +}; + +exports.default = InactiveStatusBar; + +/***/ }), +/* 120 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _publish = __webpack_require__(4); + +var _view = __webpack_require__(121); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var publish = _ref.publish; + + return { + status: publish.status.status, + message: publish.status.message + }; +}; + +var mapDispatchToProps = { + clearFile: _publish.clearFile +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); + +/***/ }), +/* 121 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _ProgressBar = __webpack_require__(20); + +var _ProgressBar2 = _interopRequireDefault(_ProgressBar); + +var _publish_claim_states = __webpack_require__(122); + +var publishStates = _interopRequireWildcard(_publish_claim_states); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var PublishStatus = function (_React$Component) { + _inherits(PublishStatus, _React$Component); + + function PublishStatus() { + _classCallCheck(this, PublishStatus); + + return _possibleConstructorReturn(this, (PublishStatus.__proto__ || Object.getPrototypeOf(PublishStatus)).apply(this, arguments)); + } + + _createClass(PublishStatus, [{ + key: 'render', + value: function render() { + var _props = this.props, + status = _props.status, + message = _props.message, + clearFile = _props.clearFile; + + return _react2.default.createElement( + 'div', + { className: 'row row--tall flex-container--column flex-container--center-center' }, + status === publishStates.LOAD_START && _react2.default.createElement( + 'div', + { className: 'row align-content-center' }, + _react2.default.createElement( + 'p', + null, + 'File is loading to server' + ), + _react2.default.createElement( + 'p', + { className: 'blue' }, + '0%' + ) + ), + status === publishStates.LOADING && _react2.default.createElement( + 'div', + null, + _react2.default.createElement( + 'div', + { className: 'row align-content-center' }, + _react2.default.createElement( + 'p', + null, + 'File is loading to server' + ), + _react2.default.createElement( + 'p', + { className: 'blue' }, + message + ) + ) + ), + status === publishStates.PUBLISHING && _react2.default.createElement( + 'div', + { className: 'row align-content-center' }, + _react2.default.createElement( + 'p', + null, + 'Upload complete. Your file is now being published on the blockchain...' + ), + _react2.default.createElement(_ProgressBar2.default, { size: 12 }), + _react2.default.createElement( + 'p', + null, + 'Curious what magic is happening here? ', + _react2.default.createElement( + 'a', + { className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' }, + 'Learn more.' + ) + ) + ), + status === publishStates.SUCCESS && _react2.default.createElement( + 'div', + { className: 'row align-content-center' }, + _react2.default.createElement( + 'p', + null, + 'Your publish is complete! You are being redirected to it now.' + ), + _react2.default.createElement( + 'p', + null, + 'If you are not automatically redirected, ', + _react2.default.createElement( + 'a', + { className: 'link--primary', target: '_blank', href: message }, + 'click here.' + ) + ) + ), + status === publishStates.FAILED && _react2.default.createElement( + 'div', + { className: 'row align-content-center' }, + _react2.default.createElement( + 'p', + null, + 'Something went wrong...' + ), + _react2.default.createElement( + 'p', + null, + _react2.default.createElement( + 'strong', + null, + message + ) + ), + _react2.default.createElement( + 'p', + null, + 'For help, post the above error text in the #speech channel on the ', + _react2.default.createElement( + 'a', + { className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' }, + 'lbry discord' + ) + ), + _react2.default.createElement( + 'button', + { className: 'button--secondary', onClick: clearFile }, + 'Reset' + ) + ) + ); + } + }]); + + return PublishStatus; +}(_react2.default.Component); + +; + +exports.default = PublishStatus; + +/***/ }), +/* 122 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var LOAD_START = exports.LOAD_START = 'LOAD_START'; +var LOADING = exports.LOADING = 'LOADING'; +var PUBLISHING = exports.PUBLISHING = 'PUBLISHING'; +var SUCCESS = exports.SUCCESS = 'SUCCESS'; +var FAILED = exports.FAILED = 'FAILED'; + +/***/ }), +/* 123 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _view = __webpack_require__(124); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var publish = _ref.publish; + + return { + message: publish.disabledMessage + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); + +/***/ }), +/* 124 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var PublishDisabledMessage = function (_React$Component) { + _inherits(PublishDisabledMessage, _React$Component); + + function PublishDisabledMessage() { + _classCallCheck(this, PublishDisabledMessage); + + return _possibleConstructorReturn(this, (PublishDisabledMessage.__proto__ || Object.getPrototypeOf(PublishDisabledMessage)).apply(this, arguments)); + } + + _createClass(PublishDisabledMessage, [{ + key: 'render', + value: function render() { + var message = this.props.message; + console.log('this.props.message:', message); + return _react2.default.createElement( + 'div', + { className: 'row dropzone--disabled row--tall flex-container--column flex-container--center-center' }, + _react2.default.createElement( + 'p', + { className: 'text--disabled' }, + 'Publishing is currently disabled.' + ), + _react2.default.createElement( + 'p', + { className: 'text--disabled' }, + message + ) + ); + } + }]); + + return PublishDisabledMessage; +}(_react2.default.Component); + +exports.default = PublishDisabledMessage; + +/***/ }), +/* 125 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _NavBar = __webpack_require__(7); + +var _NavBar2 = _interopRequireDefault(_NavBar); + +var _SEO = __webpack_require__(9); + +var _SEO2 = _interopRequireDefault(_SEO); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var AboutPage = function (_React$Component) { + _inherits(AboutPage, _React$Component); + + function AboutPage() { + _classCallCheck(this, AboutPage); + + return _possibleConstructorReturn(this, (AboutPage.__proto__ || Object.getPrototypeOf(AboutPage)).apply(this, arguments)); + } + + _createClass(AboutPage, [{ + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + null, + _react2.default.createElement(_SEO2.default, { pageTitle: 'About', pageUri: 'about' }), + _react2.default.createElement(_NavBar2.default, null), + _react2.default.createElement( + 'div', + { className: 'row row--padded' }, + _react2.default.createElement( + 'div', + { className: 'column column--5 column--med-10 align-content-top' }, + _react2.default.createElement( + 'div', + { className: 'column column--8 column--med-10' }, + _react2.default.createElement( + 'p', + { className: 'pull-quote' }, + 'Spee.ch is an open-source project. Please contribute to the existing site, or fork it and make your own.' + ), + _react2.default.createElement( + 'p', + null, + _react2.default.createElement( + 'a', + { className: 'link--primary', target: '_blank', href: 'https://twitter.com/spee_ch' }, + 'TWITTER' + ) + ), + _react2.default.createElement( + 'p', + null, + _react2.default.createElement( + 'a', + { className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch' }, + 'GITHUB' + ) + ), + _react2.default.createElement( + 'p', + null, + _react2.default.createElement( + 'a', + { className: 'link--primary', target: '_blank', href: 'https://discord.gg/YjYbwhS' }, + 'DISCORD CHANNEL' + ) + ), + _react2.default.createElement( + 'p', + null, + _react2.default.createElement( + 'a', + { className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch/blob/master/README.md' }, + 'DOCUMENTATION' + ) + ) + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--5 column--med-10 align-content-top' }, + _react2.default.createElement( + 'div', + { className: 'column column--8 column--med-10' }, + _react2.default.createElement( + 'p', + null, + 'Spee.ch is a media-hosting site that reads from and publishes content to the ', + _react2.default.createElement( + 'a', + { className: 'link--primary', href: 'https://lbry.io' }, + 'LBRY' + ), + ' blockchain.' + ), + _react2.default.createElement( + 'p', + null, + 'Spee.ch is a hosting service, but with the added benefit that it stores your content on a decentralized network of computers -- the ', + _react2.default.createElement( + 'a', + { className: 'link--primary', href: 'https://lbry.io/get' }, + 'LBRY' + ), + ' network. This means that your images are stored in multiple locations without a single point of failure.' + ), + _react2.default.createElement( + 'h3', + null, + 'Contribute' + ), + _react2.default.createElement( + 'p', + null, + 'If you have an idea for your own spee.ch-like site on top of LBRY, fork our ', + _react2.default.createElement( + 'a', + { className: 'link--primary', href: 'https://github.com/lbryio/spee.ch' }, + 'github repo' + ), + ' and go to town!' + ), + _react2.default.createElement( + 'p', + null, + 'If you want to improve spee.ch, join our ', + _react2.default.createElement( + 'a', + { className: 'link--primary', href: 'https://discord.gg/YjYbwhS' }, + 'discord channel' + ), + ' or solve one of our ', + _react2.default.createElement( + 'a', + { className: 'link--primary', href: 'https://github.com/lbryio/spee.ch/issues' }, + 'github issues' + ), + '.' + ) + ) + ) + ) + ); + } + }]); + + return AboutPage; +}(_react2.default.Component); + +; + +exports.default = AboutPage; + +/***/ }), +/* 126 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _view = __webpack_require__(127); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var channel = _ref.channel; + + return { + loggedInChannelName: channel.loggedInChannel.name + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); + +/***/ }), +/* 127 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _reactRouterDom = __webpack_require__(3); + +var _SEO = __webpack_require__(9); + +var _SEO2 = _interopRequireDefault(_SEO); + +var _NavBar = __webpack_require__(7); + +var _NavBar2 = _interopRequireDefault(_NavBar); + +var _ChannelLoginForm = __webpack_require__(39); + +var _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm); + +var _ChannelCreateForm = __webpack_require__(40); + +var _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var LoginPage = function (_React$Component) { + _inherits(LoginPage, _React$Component); + + function LoginPage() { + _classCallCheck(this, LoginPage); + + return _possibleConstructorReturn(this, (LoginPage.__proto__ || Object.getPrototypeOf(LoginPage)).apply(this, arguments)); + } + + _createClass(LoginPage, [{ + key: 'componentWillReceiveProps', + value: function componentWillReceiveProps(newProps) { + // re-route the user to the homepage if the user is logged in + if (newProps.loggedInChannelName !== this.props.loggedInChannelName) { + this.props.history.push('/'); + } + } + }, { + key: 'render', + value: function render() { + return _react2.default.createElement( + 'div', + null, + _react2.default.createElement(_SEO2.default, { pageTitle: 'Login', pageUri: 'login' }), + _react2.default.createElement(_NavBar2.default, null), + _react2.default.createElement( + 'div', + { className: 'row row--padded' }, + _react2.default.createElement( + 'div', + { className: 'column column--5 column--med-10 align-content-top' }, + _react2.default.createElement( + 'div', + { className: 'column column--8 column--med-10' }, + _react2.default.createElement( + 'p', + null, + 'Channels allow you to publish and group content under an identity. You can create a channel for yourself, or share one with like-minded friends. You can create 1 channel, or 100, so whether you\'re ', + _react2.default.createElement( + 'a', + { className: 'link--primary', target: '_blank', href: '/@catalonia2017:43dcf47163caa21d8404d9fe9b30f78ef3e146a8' }, + 'documenting important events' + ), + ', or making a public repository for ', + _react2.default.createElement( + 'a', + { className: 'link--primary', target: '_blank', href: '/@catGifs' }, + 'cat gifs' + ), + ' (password: \'1234\'), try creating a channel for it!' + ) + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--5 column--med-10 align-content-top' }, + _react2.default.createElement( + 'div', + { className: 'column column--8 column--med-10' }, + _react2.default.createElement( + 'h3', + { className: 'h3--no-bottom' }, + 'Log in to an existing channel:' + ), + _react2.default.createElement(_ChannelLoginForm2.default, null), + _react2.default.createElement( + 'h3', + { className: 'h3--no-bottom' }, + 'Create a brand new channel:' + ), + _react2.default.createElement(_ChannelCreateForm2.default, null) + ) + ) + ) + ); + } + }]); + + return LoginPage; +}(_react2.default.Component); + +; + +exports.default = (0, _reactRouterDom.withRouter)(LoginPage); + +/***/ }), +/* 128 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _show = __webpack_require__(8); + +var _view = __webpack_require__(129); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var show = _ref.show; + + return { + error: show.request.error, + requestType: show.request.type + }; +}; + +var mapDispatchToProps = { + onHandleShowPageUri: _show.onHandleShowPageUri +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); + +/***/ }), +/* 129 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _ErrorPage = __webpack_require__(21); + +var _ErrorPage2 = _interopRequireDefault(_ErrorPage); + +var _ShowAssetLite = __webpack_require__(130); + +var _ShowAssetLite2 = _interopRequireDefault(_ShowAssetLite); + +var _ShowAssetDetails = __webpack_require__(133); + +var _ShowAssetDetails2 = _interopRequireDefault(_ShowAssetDetails); + +var _ShowChannel = __webpack_require__(139); + +var _ShowChannel2 = _interopRequireDefault(_ShowChannel); + +var _show_request_types = __webpack_require__(41); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var ShowPage = function (_React$Component) { + _inherits(ShowPage, _React$Component); + + function ShowPage() { + _classCallCheck(this, ShowPage); + + return _possibleConstructorReturn(this, (ShowPage.__proto__ || Object.getPrototypeOf(ShowPage)).apply(this, arguments)); + } + + _createClass(ShowPage, [{ + key: 'componentDidMount', + value: function componentDidMount() { + this.props.onHandleShowPageUri(this.props.match.params); + } + }, { + key: 'componentWillReceiveProps', + value: function componentWillReceiveProps(nextProps) { + if (nextProps.match.params !== this.props.match.params) { + this.props.onHandleShowPageUri(nextProps.match.params); + } + } + }, { + key: 'render', + value: function render() { + var _props = this.props, + error = _props.error, + requestType = _props.requestType; + + if (error) { + return _react2.default.createElement(_ErrorPage2.default, { error: error }); + } + switch (requestType) { + case _show_request_types.CHANNEL: + return _react2.default.createElement(_ShowChannel2.default, null); + case _show_request_types.ASSET_LITE: + return _react2.default.createElement(_ShowAssetLite2.default, null); + case _show_request_types.ASSET_DETAILS: + return _react2.default.createElement(_ShowAssetDetails2.default, null); + default: + return _react2.default.createElement( + 'p', + null, + 'loading...' + ); + } + } + }]); + + return ShowPage; +}(_react2.default.Component); + +; + +exports.default = ShowPage; + +/***/ }), +/* 130 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _view = __webpack_require__(131); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var show = _ref.show; + + // select request info + var requestId = show.request.id; + // select asset info + var asset = void 0; + var request = show.requestList[requestId] || null; + var assetList = show.assetList; + if (request && assetList) { + var assetKey = request.key; // note: just store this in the request + asset = assetList[assetKey] || null; + }; + // return props + return { + asset: asset + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); + +/***/ }), +/* 131 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _SEO = __webpack_require__(9); + +var _SEO2 = _interopRequireDefault(_SEO); + +var _reactRouterDom = __webpack_require__(3); + +var _AssetDisplay = __webpack_require__(42); + +var _AssetDisplay2 = _interopRequireDefault(_AssetDisplay); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var ShowLite = function (_React$Component) { + _inherits(ShowLite, _React$Component); + + function ShowLite() { + _classCallCheck(this, ShowLite); + + return _possibleConstructorReturn(this, (ShowLite.__proto__ || Object.getPrototypeOf(ShowLite)).apply(this, arguments)); + } + + _createClass(ShowLite, [{ + key: 'render', + value: function render() { + var asset = this.props.asset; + + if (asset) { + var _asset$claimData = asset.claimData, + name = _asset$claimData.name, + claimId = _asset$claimData.claimId; + + return _react2.default.createElement( + 'div', + { className: 'row row--tall flex-container--column flex-container--center-center show-lite-container' }, + _react2.default.createElement(_SEO2.default, { pageTitle: name, asset: asset }), + _react2.default.createElement(_AssetDisplay2.default, null), + _react2.default.createElement( + _reactRouterDom.Link, + { id: 'asset-boilerpate', className: 'link--primary fine-print', to: '/' + claimId + '/' + name }, + 'hosted via Spee.ch' + ) + ); + } + return _react2.default.createElement( + 'div', + { className: 'row row--tall row--padded flex-container--column flex-container--center-center' }, + _react2.default.createElement( + 'p', + null, + 'loading asset data...' + ) + ); + } + }]); + + return ShowLite; +}(_react2.default.Component); + +; + +exports.default = ShowLite; + +/***/ }), +/* 132 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _ProgressBar = __webpack_require__(20); + +var _ProgressBar2 = _interopRequireDefault(_ProgressBar); + +var _asset_display_states = __webpack_require__(35); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var AssetDisplay = function (_React$Component) { + _inherits(AssetDisplay, _React$Component); + + function AssetDisplay() { + _classCallCheck(this, AssetDisplay); + + return _possibleConstructorReturn(this, (AssetDisplay.__proto__ || Object.getPrototypeOf(AssetDisplay)).apply(this, arguments)); + } + + _createClass(AssetDisplay, [{ + key: 'componentDidMount', + value: function componentDidMount() { + var _props$asset$claimDat = this.props.asset.claimData, + name = _props$asset$claimDat.name, + claimId = _props$asset$claimDat.claimId; + + this.props.onFileRequest(name, claimId); + } + }, { + key: 'render', + value: function render() { + var _props = this.props, + status = _props.status, + error = _props.error, + _props$asset$claimDat2 = _props.asset.claimData, + name = _props$asset$claimDat2.name, + claimId = _props$asset$claimDat2.claimId, + contentType = _props$asset$claimDat2.contentType, + fileExt = _props$asset$claimDat2.fileExt, + thumbnail = _props$asset$claimDat2.thumbnail; + + return _react2.default.createElement( + 'div', + { id: 'asset-display-component' }, + status === _asset_display_states.LOCAL_CHECK && _react2.default.createElement( + 'div', + null, + _react2.default.createElement( + 'p', + null, + 'Checking to see if Spee.ch has your asset locally...' + ) + ), + status === _asset_display_states.UNAVAILABLE && _react2.default.createElement( + 'div', + null, + _react2.default.createElement( + 'p', + null, + 'Sit tight, we\'re searching the LBRY blockchain for your asset!' + ), + _react2.default.createElement(_ProgressBar2.default, { size: 12 }), + _react2.default.createElement( + 'p', + null, + 'Curious what magic is happening here? ', + _react2.default.createElement( + 'a', + { className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' }, + 'Learn more.' + ) + ) + ), + status === _asset_display_states.ERROR && _react2.default.createElement( + 'div', + null, + _react2.default.createElement( + 'p', + null, + 'Unfortunately, we couldn\'t download your asset from LBRY. You can help us out by sharing the below error message in the ', + _react2.default.createElement( + 'a', + { className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' }, + 'LBRY discord' + ), + '.' + ), + _react2.default.createElement( + 'i', + null, + _react2.default.createElement( + 'p', + { id: 'error-message' }, + error + ) + ) + ), + status === _asset_display_states.AVAILABLE && function () { + switch (contentType) { + case 'image/jpeg': + case 'image/jpg': + case 'image/png': + return _react2.default.createElement('img', { + className: 'asset', + src: '/' + claimId + '/' + name + '.' + fileExt, + alt: name }); + case 'image/gif': + return _react2.default.createElement('img', { + className: 'asset', + src: '/' + claimId + '/' + name + '.' + fileExt, + alt: name + }); + case 'video/mp4': + return _react2.default.createElement( + 'video', + { className: 'asset video', controls: true, poster: thumbnail }, + _react2.default.createElement('source', { + src: '/' + claimId + '/' + name + '.' + fileExt + }), + _react2.default.createElement( + 'p', + null, + 'Your browser does not support the ', + _react2.default.createElement( + 'code', + null, + 'video' + ), + ' element.' + ) + ); + default: + return _react2.default.createElement( + 'p', + null, + 'Unsupported file type' + ); + } + }() + ); + } + }]); + + return AssetDisplay; +}(_react2.default.Component); + +; + +exports.default = AssetDisplay; + +/***/ }), +/* 133 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _view = __webpack_require__(134); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var show = _ref.show; + + // select request info + var requestId = show.request.id; + // select asset info + var asset = void 0; + var request = show.requestList[requestId] || null; + var assetList = show.assetList; + if (request && assetList) { + var assetKey = request.key; // note: just store this in the request + asset = assetList[assetKey] || null; + }; + // return props + return { + asset: asset + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); + +/***/ }), +/* 134 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _SEO = __webpack_require__(9); + +var _SEO2 = _interopRequireDefault(_SEO); + +var _NavBar = __webpack_require__(7); + +var _NavBar2 = _interopRequireDefault(_NavBar); + +var _ErrorPage = __webpack_require__(21); + +var _ErrorPage2 = _interopRequireDefault(_ErrorPage); + +var _AssetTitle = __webpack_require__(135); + +var _AssetTitle2 = _interopRequireDefault(_AssetTitle); + +var _AssetDisplay = __webpack_require__(42); + +var _AssetDisplay2 = _interopRequireDefault(_AssetDisplay); + +var _AssetInfo = __webpack_require__(137); + +var _AssetInfo2 = _interopRequireDefault(_AssetInfo); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var ShowAssetDetails = function (_React$Component) { + _inherits(ShowAssetDetails, _React$Component); + + function ShowAssetDetails() { + _classCallCheck(this, ShowAssetDetails); + + return _possibleConstructorReturn(this, (ShowAssetDetails.__proto__ || Object.getPrototypeOf(ShowAssetDetails)).apply(this, arguments)); + } + + _createClass(ShowAssetDetails, [{ + key: 'render', + value: function render() { + var asset = this.props.asset; + + if (asset) { + var name = asset.claimData.name; + + return _react2.default.createElement( + 'div', + null, + _react2.default.createElement(_SEO2.default, { pageTitle: name + ' - details', asset: asset }), + _react2.default.createElement(_NavBar2.default, null), + _react2.default.createElement( + 'div', + { className: 'row row--tall row--padded' }, + _react2.default.createElement( + 'div', + { className: 'column column--10' }, + _react2.default.createElement(_AssetTitle2.default, null) + ), + _react2.default.createElement( + 'div', + { className: 'column column--5 column--sml-10 align-content-top' }, + _react2.default.createElement( + 'div', + { className: 'row row--padded show-details-container' }, + _react2.default.createElement(_AssetDisplay2.default, null) + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--5 column--sml-10 align-content-top' }, + _react2.default.createElement( + 'div', + { className: 'row row--padded' }, + _react2.default.createElement(_AssetInfo2.default, null) + ) + ) + ) + ); + }; + return _react2.default.createElement(_ErrorPage2.default, { error: 'loading asset data...' }); + } + }]); + + return ShowAssetDetails; +}(_react2.default.Component); + +; + +exports.default = ShowAssetDetails; + +/***/ }), +/* 135 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _view = __webpack_require__(136); + +var _view2 = _interopRequireDefault(_view); + +var _show = __webpack_require__(13); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var show = _ref.show; + + var _selectAsset = (0, _show.selectAsset)(show), + title = _selectAsset.claimData.title; + + return { + title: title + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); + +/***/ }), +/* 136 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var AssetTitle = function AssetTitle(_ref) { + var title = _ref.title; + + return _react2.default.createElement( + 'div', + null, + _react2.default.createElement( + 'span', + { className: 'text--large' }, + title + ) + ); +}; + +exports.default = AssetTitle; + +/***/ }), +/* 137 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _view = __webpack_require__(138); + +var _view2 = _interopRequireDefault(_view); + +var _show = __webpack_require__(13); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var show = _ref.show; + + // select asset + var asset = (0, _show.selectAsset)(show); + // return props + return { + asset: asset + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); + +/***/ }), +/* 138 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _reactRouterDom = __webpack_require__(3); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var AssetInfo = function (_React$Component) { + _inherits(AssetInfo, _React$Component); + + function AssetInfo(props) { + _classCallCheck(this, AssetInfo); + + var _this = _possibleConstructorReturn(this, (AssetInfo.__proto__ || Object.getPrototypeOf(AssetInfo)).call(this, props)); + + _this.copyToClipboard = _this.copyToClipboard.bind(_this); + return _this; + } + + _createClass(AssetInfo, [{ + key: 'copyToClipboard', + value: function copyToClipboard(event) { + var elementToCopy = event.target.dataset.elementtocopy; + var element = document.getElementById(elementToCopy); + element.select(); + try { + document.execCommand('copy'); + } catch (err) { + this.setState({ error: 'Oops, unable to copy' }); + } + } + }, { + key: 'render', + value: function render() { + var _props$asset = this.props.asset, + shortId = _props$asset.shortId, + _props$asset$claimDat = _props$asset.claimData, + channelName = _props$asset$claimDat.channelName, + certificateId = _props$asset$claimDat.certificateId, + description = _props$asset$claimDat.description, + name = _props$asset$claimDat.name, + claimId = _props$asset$claimDat.claimId, + fileExt = _props$asset$claimDat.fileExt, + contentType = _props$asset$claimDat.contentType, + thumbnail = _props$asset$claimDat.thumbnail, + host = _props$asset$claimDat.host; + + return _react2.default.createElement( + 'div', + null, + channelName && _react2.default.createElement( + 'div', + { className: 'row row--padded row--wide row--no-top' }, + _react2.default.createElement( + 'div', + { className: 'column column--2 column--med-10' }, + _react2.default.createElement( + 'span', + { className: 'text' }, + 'Channel:' + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--8 column--med-10' }, + _react2.default.createElement( + 'span', + { className: 'text' }, + _react2.default.createElement( + _reactRouterDom.Link, + { to: '/' + channelName + ':' + certificateId }, + channelName + ) + ) + ) + ), + description && _react2.default.createElement( + 'div', + { className: 'row row--padded row--wide row--no-top' }, + _react2.default.createElement( + 'span', + { className: 'text' }, + description + ) + ), + _react2.default.createElement( + 'div', + { id: 'show-share-buttons' }, + _react2.default.createElement( + 'div', + { className: 'row row--padded row--wide row--no-top' }, + _react2.default.createElement( + 'div', + { className: 'column column--2 column--med-10' }, + _react2.default.createElement( + 'span', + { className: 'text' }, + 'Share:' + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--8 column--med-10' }, + _react2.default.createElement( + 'div', + { + className: 'row row--short row--wide flex-container--row flex-container--space-between-bottom flex-container--wrap' }, + _react2.default.createElement( + 'a', + { className: 'link--primary', target: '_blank', href: 'https://twitter.com/intent/tweet?text=' + host + '/' + shortId + '/' + name }, + 'twitter' + ), + _react2.default.createElement( + 'a', + { className: 'link--primary', target: '_blank', href: 'https://www.facebook.com/sharer/sharer.php?u=' + host + '/' + shortId + '/' + name }, + 'facebook' + ), + _react2.default.createElement( + 'a', + { className: 'link--primary', target: '_blank', href: 'http://tumblr.com/widgets/share/tool?canonicalUrl=' + host + '/' + shortId + '/' + name }, + 'tumblr' + ), + _react2.default.createElement( + 'a', + { className: 'link--primary', target: '_blank', href: 'https://www.reddit.com/submit?url=' + host + '/' + shortId + '/' + name + '&title=' + name }, + 'reddit' + ) + ) + ) + ) + ), + _react2.default.createElement( + 'div', + { className: 'row row--padded row--wide row--no-top' }, + _react2.default.createElement( + 'div', + { id: 'show-short-link' }, + _react2.default.createElement( + 'div', + { className: 'column column--2 column--med-10' }, + _react2.default.createElement( + 'span', + { className: 'text' }, + 'Link:' + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--8 column--med-10' }, + _react2.default.createElement( + 'div', + { className: 'row row--short row--wide' }, + _react2.default.createElement( + 'div', + { className: 'column column--7' }, + _react2.default.createElement( + 'div', + { className: 'input-error', id: 'input-error-copy-short-link', hidden: 'true' }, + 'error here' + ), + _react2.default.createElement('input', { type: 'text', id: 'short-link', className: 'input-disabled input-text--full-width', readOnly: true, + spellCheck: 'false', + value: host + '/' + shortId + '/' + name + '.' + fileExt, + onClick: this.select }) + ), + _react2.default.createElement('div', { className: 'column column--1' }), + _react2.default.createElement( + 'div', + { className: 'column column--2' }, + _react2.default.createElement( + 'button', + { className: 'button--primary button--wide', 'data-elementtocopy': 'short-link', + onClick: this.copyToClipboard }, + 'copy' + ) + ) + ) + ) + ), + _react2.default.createElement( + 'div', + { id: 'show-embed-code' }, + _react2.default.createElement( + 'div', + { className: 'column column--2 column--med-10' }, + _react2.default.createElement( + 'span', + { className: 'text' }, + 'Embed:' + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--8 column--med-10' }, + _react2.default.createElement( + 'div', + { className: 'row row--short row--wide' }, + _react2.default.createElement( + 'div', + { className: 'column column--7' }, + _react2.default.createElement( + 'div', + { className: 'input-error', id: 'input-error-copy-embed-text', hidden: 'true' }, + 'error here' + ), + contentType === 'video/mp4' ? _react2.default.createElement('input', { type: 'text', id: 'embed-text', className: 'input-disabled input-text--full-width', readOnly: true, + onClick: this.select, spellCheck: 'false', + value: '' }) : _react2.default.createElement('input', { type: 'text', id: 'embed-text', className: 'input-disabled input-text--full-width', readOnly: true, + onClick: this.select, spellCheck: 'false', + value: '' + }) + ), + _react2.default.createElement('div', { className: 'column column--1' }), + _react2.default.createElement( + 'div', + { className: 'column column--2' }, + _react2.default.createElement( + 'button', + { className: 'button--primary button--wide', 'data-elementtocopy': 'embed-text', + onClick: this.copyToClipboard }, + 'copy' + ) + ) + ) + ) + ) + ), + _react2.default.createElement( + 'div', + { className: 'flex-container--row flex-container--space-between-bottom' }, + _react2.default.createElement( + _reactRouterDom.Link, + { className: 'link--primary', to: '/' + shortId + '/' + name + '.' + fileExt }, + _react2.default.createElement( + 'span', + { + className: 'text' }, + 'Direct Link' + ) + ), + _react2.default.createElement( + 'a', + { className: 'link--primary', href: host + '/' + claimId + '/' + name + '.' + fileExt, download: name }, + 'Download' + ), + _react2.default.createElement( + 'a', + { className: 'link--primary', target: '_blank', href: 'https://lbry.io/dmca' }, + 'Report' + ) + ) + ); + } + }]); + + return AssetInfo; +}(_react2.default.Component); + +; + +exports.default = AssetInfo; + +/***/ }), +/* 139 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _view = __webpack_require__(140); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var show = _ref.show; + + // select request info + var requestId = show.request.id; + // select request + var previousRequest = show.requestList[requestId] || null; + // select channel + var channel = void 0; + if (previousRequest) { + var channelKey = previousRequest.key; + channel = show.channelList[channelKey] || null; + } + return { + channel: channel + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); + +/***/ }), +/* 140 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _SEO = __webpack_require__(9); + +var _SEO2 = _interopRequireDefault(_SEO); + +var _ErrorPage = __webpack_require__(21); + +var _ErrorPage2 = _interopRequireDefault(_ErrorPage); + +var _NavBar = __webpack_require__(7); + +var _NavBar2 = _interopRequireDefault(_NavBar); + +var _ChannelClaimsDisplay = __webpack_require__(141); + +var _ChannelClaimsDisplay2 = _interopRequireDefault(_ChannelClaimsDisplay); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var ShowChannel = function (_React$Component) { + _inherits(ShowChannel, _React$Component); + + function ShowChannel() { + _classCallCheck(this, ShowChannel); + + return _possibleConstructorReturn(this, (ShowChannel.__proto__ || Object.getPrototypeOf(ShowChannel)).apply(this, arguments)); + } + + _createClass(ShowChannel, [{ + key: 'render', + value: function render() { + var channel = this.props.channel; + + if (channel) { + var name = channel.name, + longId = channel.longId, + shortId = channel.shortId; + + return _react2.default.createElement( + 'div', + null, + _react2.default.createElement(_SEO2.default, { pageTitle: name, channel: channel }), + _react2.default.createElement(_NavBar2.default, null), + _react2.default.createElement( + 'div', + { className: 'row row--tall row--padded' }, + _react2.default.createElement( + 'div', + { className: 'column column--10' }, + _react2.default.createElement( + 'h2', + null, + 'channel name: ', + name + ), + _react2.default.createElement( + 'p', + { className: 'fine-print' }, + 'full channel id: ', + longId + ), + _react2.default.createElement( + 'p', + { className: 'fine-print' }, + 'short channel id: ', + shortId + ) + ), + _react2.default.createElement( + 'div', + { className: 'column column--10' }, + _react2.default.createElement(_ChannelClaimsDisplay2.default, null) + ) + ) + ); + }; + return _react2.default.createElement(_ErrorPage2.default, { error: 'loading channel data...' }); + } + }]); + + return ShowChannel; +}(_react2.default.Component); + +; + +exports.default = ShowChannel; + +/***/ }), +/* 141 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _show = __webpack_require__(8); + +var _view = __webpack_require__(142); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var show = _ref.show; + + // select channel key + var request = show.requestList[show.request.id]; + var channelKey = request.key; + // select channel claims + var channel = show.channelList[channelKey] || null; + // return props + return { + channelKey: channelKey, + channel: channel + }; +}; + +var mapDispatchToProps = { + onUpdateChannelClaims: _show.onUpdateChannelClaims +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); + +/***/ }), +/* 142 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _AssetPreview = __webpack_require__(143); + +var _AssetPreview2 = _interopRequireDefault(_AssetPreview); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var ChannelClaimsDisplay = function (_React$Component) { + _inherits(ChannelClaimsDisplay, _React$Component); + + function ChannelClaimsDisplay(props) { + _classCallCheck(this, ChannelClaimsDisplay); + + var _this = _possibleConstructorReturn(this, (ChannelClaimsDisplay.__proto__ || Object.getPrototypeOf(ChannelClaimsDisplay)).call(this, props)); + + _this.showNextResultsPage = _this.showNextResultsPage.bind(_this); + _this.showPreviousResultsPage = _this.showPreviousResultsPage.bind(_this); + return _this; + } + + _createClass(ChannelClaimsDisplay, [{ + key: 'showPreviousResultsPage', + value: function showPreviousResultsPage() { + var currentPage = this.props.channel.claimsData.currentPage; + + var previousPage = parseInt(currentPage) - 1; + this.showNewPage(previousPage); + } + }, { + key: 'showNextResultsPage', + value: function showNextResultsPage() { + var currentPage = this.props.channel.claimsData.currentPage; + + var nextPage = parseInt(currentPage) + 1; + this.showNewPage(nextPage); + } + }, { + key: 'showNewPage', + value: function showNewPage(page) { + var _props = this.props, + channelKey = _props.channelKey, + _props$channel = _props.channel, + name = _props$channel.name, + longId = _props$channel.longId; + + this.props.onUpdateChannelClaims(channelKey, name, longId, page); + } + }, { + key: 'render', + value: function render() { + var _props$channel$claims = this.props.channel.claimsData, + claims = _props$channel$claims.claims, + currentPage = _props$channel$claims.currentPage, + totalPages = _props$channel$claims.totalPages; + + return _react2.default.createElement( + 'div', + { className: 'row row--tall' }, + claims.length > 0 ? _react2.default.createElement( + 'div', + null, + claims.map(function (claim, index) { + return _react2.default.createElement(_AssetPreview2.default, { + claimData: claim, + key: claim.name + '-' + index + }); + }), + _react2.default.createElement( + 'div', + null, + currentPage > 1 && _react2.default.createElement( + 'button', + { className: 'button--secondary', onClick: this.showPreviousResultsPage }, + 'Previous Page' + ), + currentPage < totalPages && _react2.default.createElement( + 'button', + { className: 'button--secondary', onClick: this.showNextResultsPage }, + 'Next Page' + ) + ) + ) : _react2.default.createElement( + 'p', + null, + 'There are no claims in this channel' + ) + ); + } + }]); + + return ChannelClaimsDisplay; +}(_react2.default.Component); + +; + +exports.default = ChannelClaimsDisplay; + +/***/ }), +/* 143 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _view = __webpack_require__(144); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var defaultThumbnail = _ref.site.defaults.defaultThumbnail; + + return { + defaultThumbnail: defaultThumbnail + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); + +/***/ }), +/* 144 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _reactRouterDom = __webpack_require__(3); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var AssetPreview = function AssetPreview(_ref) { + var defaultThumbnail = _ref.defaultThumbnail, + _ref$claimData = _ref.claimData, + name = _ref$claimData.name, + claimId = _ref$claimData.claimId, + fileExt = _ref$claimData.fileExt, + contentType = _ref$claimData.contentType, + thumbnail = _ref$claimData.thumbnail; + + var directSourceLink = claimId + '/' + name + '.' + fileExt; + var showUrlLink = '/' + claimId + '/' + name; + return _react2.default.createElement( + 'div', + { className: 'asset-holder' }, + _react2.default.createElement( + _reactRouterDom.Link, + { to: showUrlLink }, + function () { + switch (contentType) { + case 'image/jpeg': + case 'image/jpg': + case 'image/png': + case 'image/gif': + return _react2.default.createElement('img', { + className: 'asset-preview', + src: directSourceLink, + alt: name + }); + case 'video/mp4': + return _react2.default.createElement('img', { + className: 'asset-preview video', + src: thumbnail || defaultThumbnail, + alt: name + }); + default: + return _react2.default.createElement( + 'p', + null, + 'unsupported file type' + ); + } + }() + ) + ); +}; + +exports.default = AssetPreview; + +/***/ }), +/* 145 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reactRedux = __webpack_require__(1); + +var _view = __webpack_require__(146); + +var _view2 = _interopRequireDefault(_view); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var mapStateToProps = function mapStateToProps(_ref) { + var _ref$site = _ref.site, + host = _ref$site.host, + title = _ref$site.title; + + return { + host: host, + title: title + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); + +/***/ }), +/* 146 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _NavBar = __webpack_require__(7); + +var _NavBar2 = _interopRequireDefault(_NavBar); + +var _reactHelmet = __webpack_require__(14); + +var _reactHelmet2 = _interopRequireDefault(_reactHelmet); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var FourOhForPage = function (_React$Component) { + _inherits(FourOhForPage, _React$Component); + + function FourOhForPage() { + _classCallCheck(this, FourOhForPage); + + return _possibleConstructorReturn(this, (FourOhForPage.__proto__ || Object.getPrototypeOf(FourOhForPage)).apply(this, arguments)); + } + + _createClass(FourOhForPage, [{ + key: 'render', + value: function render() { + var _props = this.props, + title = _props.title, + host = _props.host; + + return _react2.default.createElement( + 'div', + null, + _react2.default.createElement( + _reactHelmet2.default, + null, + _react2.default.createElement( + 'title', + null, + title, + ' - 404' + ), + _react2.default.createElement('link', { rel: 'canonical', href: host + '/404' }) + ), + _react2.default.createElement(_NavBar2.default, null), + _react2.default.createElement( + 'div', + { className: 'row row--padded' }, + _react2.default.createElement( + 'h2', + null, + '404' + ), + _react2.default.createElement( + 'p', + null, + 'That page does not exist' + ) + ) + ); + } + }]); + + return FourOhForPage; +}(_react2.default.Component); + +; + +exports.default = FourOhForPage; + +/***/ }), +/* 147 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _require = __webpack_require__(17), + sendGAServeEvent = _require.sendGAServeEvent; + +var _require2 = __webpack_require__(148), + determineResponseType = _require2.determineResponseType, + flipClaimNameAndIdForBackwardsCompatibility = _require2.flipClaimNameAndIdForBackwardsCompatibility, + logRequestData = _require2.logRequestData, + getClaimIdAndServeAsset = _require2.getClaimIdAndServeAsset; + +var lbryUri = __webpack_require__(149); +var handleShowRender = __webpack_require__(150); +var SERVE = 'SERVE'; + +module.exports = function (app) { + // route to serve a specific asset using the channel or claim id + app.get('/:identifier/:claim', function (req, res) { + var headers = req.headers, + ip = req.ip, + originalUrl = req.originalUrl, + params = req.params; + // decide if this is a show request + + var hasFileExtension = void 0; + try { + var _lbryUri$parseModifie = lbryUri.parseModifier(params.claim); + + hasFileExtension = _lbryUri$parseModifie.hasFileExtension; + } catch (error) { + return res.status(400).json({ success: false, message: error.message }); + } + var responseType = determineResponseType(hasFileExtension, headers); + if (responseType !== SERVE) { + return handleShowRender(req, res); + } + // handle serve request + // send google analytics + sendGAServeEvent(headers, ip, originalUrl); + // parse the claim + var claimName = void 0; + try { + var _lbryUri$parseClaim = lbryUri.parseClaim(params.claim); + + claimName = _lbryUri$parseClaim.claimName; + } catch (error) { + return res.status(400).json({ success: false, message: error.message }); + } + // parse the identifier + var isChannel = void 0, + channelName = void 0, + channelClaimId = void 0, + claimId = void 0; + try { + var _lbryUri$parseIdentif = lbryUri.parseIdentifier(params.identifier); + + isChannel = _lbryUri$parseIdentif.isChannel; + channelName = _lbryUri$parseIdentif.channelName; + channelClaimId = _lbryUri$parseIdentif.channelClaimId; + claimId = _lbryUri$parseIdentif.claimId; + } catch (error) { + return res.status(400).json({ success: false, message: error.message }); + } + if (!isChannel) { + var _flipClaimNameAndIdFo = flipClaimNameAndIdForBackwardsCompatibility(claimId, claimName); + + var _flipClaimNameAndIdFo2 = _slicedToArray(_flipClaimNameAndIdFo, 2); + + claimId = _flipClaimNameAndIdFo2[0]; + claimName = _flipClaimNameAndIdFo2[1]; + } + // log the request data for debugging + logRequestData(responseType, claimName, channelName, claimId); + // get the claim Id and then serve the asset + getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res); + }); + // route to serve the winning asset at a claim or a channel page + app.get('/:claim', function (req, res) { + var headers = req.headers, + ip = req.ip, + originalUrl = req.originalUrl, + params = req.params; + // decide if this is a show request + + var hasFileExtension = void 0; + try { + var _lbryUri$parseModifie2 = lbryUri.parseModifier(params.claim); + + hasFileExtension = _lbryUri$parseModifie2.hasFileExtension; + } catch (error) { + return res.status(400).json({ success: false, message: error.message }); + } + var responseType = determineResponseType(hasFileExtension, headers); + if (responseType !== SERVE) { + return handleShowRender(req, res); + } + // handle serve request + // send google analytics + sendGAServeEvent(headers, ip, originalUrl); + // parse the claim + var claimName = void 0; + try { + var _lbryUri$parseClaim2 = lbryUri.parseClaim(params.claim); + + claimName = _lbryUri$parseClaim2.claimName; + } catch (error) { + return res.status(400).json({ success: false, message: error.message }); + } + // log the request data for debugging + logRequestData(responseType, claimName, null, null); + // get the claim Id and then serve the asset + getClaimIdAndServeAsset(null, null, claimName, null, originalUrl, ip, res); + }); +}; + +/***/ }), +/* 148 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var logger = __webpack_require__(2); + +var _require = __webpack_require__(28), + getClaimId = _require.getClaimId, + getLocalFileRecord = _require.getLocalFileRecord; + +var _require2 = __webpack_require__(27), + handleErrorResponse = _require2.handleErrorResponse; + +var SERVE = 'SERVE'; +var SHOW = 'SHOW'; +var NO_FILE = 'NO_FILE'; +var NO_CHANNEL = 'NO_CHANNEL'; +var NO_CLAIM = 'NO_CLAIM'; + +function clientAcceptsHtml(_ref) { + var accept = _ref.accept; + + return accept && accept.match(/text\/html/); +}; + +function requestIsFromBrowser(headers) { + return headers['user-agent'] && headers['user-agent'].match(/Mozilla/); +}; + +function clientWantsAsset(_ref2) { + var accept = _ref2.accept, + range = _ref2.range; + + var imageIsWanted = accept && accept.match(/image\/.*/) && !accept.match(/text\/html/) && !accept.match(/text\/\*/); + var videoIsWanted = accept && range; + return imageIsWanted || videoIsWanted; +}; + +function isValidClaimId(claimId) { + return claimId.length === 40 && !/[^A-Za-z0-9]/g.test(claimId); +}; + +function isValidShortId(claimId) { + return claimId.length === 1; // it should really evaluate the short url itself +}; + +function isValidShortIdOrClaimId(input) { + return isValidClaimId(input) || isValidShortId(input); +}; + +function serveAssetToClient(claimId, name, res) { + return getLocalFileRecord(claimId, name).then(function (fileRecord) { + // check that a local record was found + if (fileRecord === NO_FILE) { + return res.status(307).redirect('/api/claim/get/' + name + '/' + claimId); + } + // serve the file + var filePath = fileRecord.filePath, + fileType = fileRecord.fileType; + + logger.verbose('serving file: ' + filePath); + var sendFileOptions = { + headers: { + 'X-Content-Type-Options': 'nosniff', + 'Content-Type': fileType || 'image/jpeg' + } + }; + res.status(200).sendFile(filePath, sendFileOptions); + }).catch(function (error) { + throw error; + }); +}; + +module.exports = { + getClaimIdAndServeAsset: function getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res) { + // get the claim Id and then serve the asset + getClaimId(channelName, channelClaimId, claimName, claimId).then(function (fullClaimId) { + if (fullClaimId === NO_CLAIM) { + return res.status(404).json({ success: false, message: 'no claim id could be found' }); + } else if (fullClaimId === NO_CHANNEL) { + return res.status(404).json({ success: false, message: 'no channel id could be found' }); + } + serveAssetToClient(fullClaimId, claimName, res); + // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'success'); + }).catch(function (error) { + handleErrorResponse(originalUrl, ip, error, res); + // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'fail'); + }); + }, + determineResponseType: function determineResponseType(hasFileExtension, headers) { + var responseType = void 0; + if (hasFileExtension) { + responseType = SERVE; // assume a serve request if file extension is present + if (clientAcceptsHtml(headers)) { + // if the request comes from a browser, change it to a show request + responseType = SHOW; + } + } else { + responseType = SHOW; + if (clientWantsAsset(headers) && requestIsFromBrowser(headers)) { + // this is in case someone embeds a show url + logger.debug('Show request came from browser but wants an image/video. Changing response to serve...'); + responseType = SERVE; + } + } + return responseType; + }, + flipClaimNameAndIdForBackwardsCompatibility: function flipClaimNameAndIdForBackwardsCompatibility(identifier, name) { + // this is a patch for backwards compatability with '/name/claim_id' url format + if (isValidShortIdOrClaimId(name) && !isValidShortIdOrClaimId(identifier)) { + var tempName = name; + name = identifier; + identifier = tempName; + } + return [identifier, name]; + }, + logRequestData: function logRequestData(responseType, claimName, channelName, claimId) { + logger.debug('responseType ===', responseType); + logger.debug('claim name === ', claimName); + logger.debug('channel name ===', channelName); + logger.debug('claim id ===', claimId); + } +}; + +/***/ }), +/* 149 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var logger = __webpack_require__(2); + +module.exports = { + REGEXP_INVALID_CLAIM: /[^A-Za-z0-9-]/g, + REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g, + REGEXP_ADDRESS: /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/, + CHANNEL_CHAR: '@', + parseIdentifier: function parseIdentifier(identifier) { + logger.debug('parsing identifier:', identifier); + var componentsRegex = new RegExp('([^:$#/]*)' + // value (stops at the first separator or end) + '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end) + ); + + var _componentsRegex$exec = componentsRegex.exec(identifier).map(function (match) { + return match || null; + }), + _componentsRegex$exec2 = _slicedToArray(_componentsRegex$exec, 4), + proto = _componentsRegex$exec2[0], + value = _componentsRegex$exec2[1], + modifierSeperator = _componentsRegex$exec2[2], + modifier = _componentsRegex$exec2[3]; + + logger.debug(proto + ', ' + value + ', ' + modifierSeperator + ', ' + modifier); + + // Validate and process name + if (!value) { + throw new Error('Check your url. No channel name provided before "' + modifierSeperator + '"'); + } + var isChannel = value.startsWith(module.exports.CHANNEL_CHAR); + var channelName = isChannel ? value : null; + var claimId = void 0; + if (isChannel) { + if (!channelName) { + throw new Error('No channel name after @.'); + } + var nameBadChars = channelName.match(module.exports.REGEXP_INVALID_CHANNEL); + if (nameBadChars) { + throw new Error('Invalid characters in channel name: ' + nameBadChars.join(', ') + '.'); + } + } else { + claimId = value; + } + + // Validate and process modifier + var channelClaimId = void 0; + if (modifierSeperator) { + if (!modifier) { + throw new Error('No modifier provided after separator "' + modifierSeperator + '"'); + } + + if (modifierSeperator === ':') { + channelClaimId = modifier; + } else { + throw new Error('The "' + modifierSeperator + '" modifier is not currently supported'); + } + } + return { + isChannel: isChannel, + channelName: channelName, + channelClaimId: channelClaimId, + claimId: claimId + }; + }, + parseClaim: function parseClaim(claim) { + logger.debug('parsing name:', claim); + var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first modifier) + '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end) + ); + + var _componentsRegex$exec3 = componentsRegex.exec(claim).map(function (match) { + return match || null; + }), + _componentsRegex$exec4 = _slicedToArray(_componentsRegex$exec3, 4), + proto = _componentsRegex$exec4[0], + claimName = _componentsRegex$exec4[1], + modifierSeperator = _componentsRegex$exec4[2], + modifier = _componentsRegex$exec4[3]; + + logger.debug(proto + ', ' + claimName + ', ' + modifierSeperator + ', ' + modifier); + + // Validate and process name + if (!claimName) { + throw new Error('No claim name provided before .'); + } + var nameBadChars = claimName.match(module.exports.REGEXP_INVALID_CLAIM); + if (nameBadChars) { + throw new Error('Invalid characters in claim name: ' + nameBadChars.join(', ') + '.'); + } + // Validate and process modifier + if (modifierSeperator) { + if (!modifier) { + throw new Error('No file extension provided after separator ' + modifierSeperator + '.'); + } + if (modifierSeperator !== '.') { + throw new Error('The ' + modifierSeperator + ' modifier is not supported in the claim name'); + } + } + // return results + return { + claimName: claimName + }; + }, + parseModifier: function parseModifier(claim) { + logger.debug('parsing modifier:', claim); + var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first modifier) + '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end) + ); + + var _componentsRegex$exec5 = componentsRegex.exec(claim).map(function (match) { + return match || null; + }), + _componentsRegex$exec6 = _slicedToArray(_componentsRegex$exec5, 4), + proto = _componentsRegex$exec6[0], + claimName = _componentsRegex$exec6[1], + modifierSeperator = _componentsRegex$exec6[2], + modifier = _componentsRegex$exec6[3]; + + logger.debug(proto + ', ' + claimName + ', ' + modifierSeperator + ', ' + modifier); + // Validate and process modifier + var hasFileExtension = false; + if (modifierSeperator) { + hasFileExtension = true; + } + return { + hasFileExtension: hasFileExtension + }; + } +}; + +/***/ }), +/* 150 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _server = __webpack_require__(30); + +var _redux = __webpack_require__(18); + +var _index = __webpack_require__(31); + +var _index2 = _interopRequireDefault(_index); + +var _reactRedux = __webpack_require__(1); + +var _reactRouterDom = __webpack_require__(3); + +var _index3 = __webpack_require__(36); + +var _index4 = _interopRequireDefault(_index3); + +var _app = __webpack_require__(37); + +var _app2 = _interopRequireDefault(_app); + +var _renderFullPage = __webpack_require__(43); + +var _renderFullPage2 = _interopRequireDefault(_renderFullPage); + +var _reduxSaga = __webpack_require__(151); + +var _reduxSaga2 = _interopRequireDefault(_reduxSaga); + +var _effects = __webpack_require__(15); + +var _show_uri = __webpack_require__(152); + +var _show = __webpack_require__(8); + +var _reactHelmet = __webpack_require__(14); + +var _reactHelmet2 = _interopRequireDefault(_reactHelmet); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var returnSagaWithParams = function returnSagaWithParams(saga, params) { + return (/*#__PURE__*/regeneratorRuntime.mark(function _callee() { + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return (0, _effects.call)(saga, params); + + case 2: + case 'end': + return _context.stop(); + } + } + }, _callee, this); + }) + ); +}; + +module.exports = function (req, res) { + var context = {}; + + // create and apply middleware + var sagaMiddleware = (0, _reduxSaga2.default)(); + var middleware = (0, _redux.applyMiddleware)(sagaMiddleware); + + // create a new Redux store instance + var store = (0, _redux.createStore)(_index2.default, middleware); + + // create saga + var action = (0, _show.onHandleShowPageUri)(req.params); + var saga = returnSagaWithParams(_show_uri.handleShowPageUri, action); + + // run the saga middleware + sagaMiddleware.run(saga).done.then(function () { + // render component to a string + var html = (0, _server.renderToString)(_react2.default.createElement( + _reactRedux.Provider, + { store: store }, + _react2.default.createElement( + _reactRouterDom.StaticRouter, + { location: req.url, context: context }, + _react2.default.createElement( + _index4.default, + null, + _react2.default.createElement(_app2.default, null) + ) + ) + )); + + // get head tags from helmet + var helmet = _reactHelmet2.default.renderStatic(); + + // check for a redirect + if (context.url) { + return res.redirect(301, context.url); + } + + // get the initial state from our Redux store + var preloadedState = store.getState(); + + // send the rendered page back to the client + res.send((0, _renderFullPage2.default)(helmet, html, preloadedState)); + }); +}; + +/***/ }), +/* 151 */ +/***/ (function(module, exports) { + +module.exports = require("redux-saga"); + +/***/ }), +/* 152 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.handleShowPageUri = handleShowPageUri; +exports.watchHandleShowPageUri = watchHandleShowPageUri; + +var _effects = __webpack_require__(15); + +var _show_action_types = __webpack_require__(12); + +var actions = _interopRequireWildcard(_show_action_types); + +var _show = __webpack_require__(8); + +var _show_asset = __webpack_require__(153); + +var _show_channel = __webpack_require__(155); + +var _lbryUri = __webpack_require__(157); + +var _lbryUri2 = _interopRequireDefault(_lbryUri); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +var _marked = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateIdentifierAndClaim), + _marked2 = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateClaimOnly), + _marked3 = /*#__PURE__*/regeneratorRuntime.mark(handleShowPageUri), + _marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchHandleShowPageUri); + +function parseAndUpdateIdentifierAndClaim(modifier, claim) { + var isChannel, channelName, channelClaimId, claimId, claimName, extension, _lbryUri$parseIdentif, _lbryUri$parseClaim; + + return regeneratorRuntime.wrap(function parseAndUpdateIdentifierAndClaim$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + // this is a request for an asset + // claim will be an asset claim + // the identifier could be a channel or a claim id + isChannel = void 0, channelName = void 0, channelClaimId = void 0, claimId = void 0, claimName = void 0, extension = void 0; + _context.prev = 1; + _lbryUri$parseIdentif = _lbryUri2.default.parseIdentifier(modifier); + isChannel = _lbryUri$parseIdentif.isChannel; + channelName = _lbryUri$parseIdentif.channelName; + channelClaimId = _lbryUri$parseIdentif.channelClaimId; + claimId = _lbryUri$parseIdentif.claimId; + _lbryUri$parseClaim = _lbryUri2.default.parseClaim(claim); + claimName = _lbryUri$parseClaim.claimName; + extension = _lbryUri$parseClaim.extension; + _context.next = 17; + break; + + case 12: + _context.prev = 12; + _context.t0 = _context['catch'](1); + _context.next = 16; + return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message)); + + case 16: + return _context.abrupt('return', _context.sent); + + case 17: + if (!isChannel) { + _context.next = 21; + break; + } + + _context.next = 20; + return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, channelName, channelClaimId, extension)); + + case 20: + return _context.abrupt('return', _context.sent); + + case 21: + ; + _context.next = 24; + return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, claimId, null, null, extension)); + + case 24: + case 'end': + return _context.stop(); + } + } + }, _marked, this, [[1, 12]]); +} +function parseAndUpdateClaimOnly(claim) { + var isChannel, channelName, channelClaimId, _lbryUri$parseIdentif2, claimName, extension, _lbryUri$parseClaim2; + + return regeneratorRuntime.wrap(function parseAndUpdateClaimOnly$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + // this could be a request for an asset or a channel page + // claim could be an asset claim or a channel claim + isChannel = void 0, channelName = void 0, channelClaimId = void 0; + _context2.prev = 1; + _lbryUri$parseIdentif2 = _lbryUri2.default.parseIdentifier(claim); + isChannel = _lbryUri$parseIdentif2.isChannel; + channelName = _lbryUri$parseIdentif2.channelName; + channelClaimId = _lbryUri$parseIdentif2.channelClaimId; + _context2.next = 13; + break; + + case 8: + _context2.prev = 8; + _context2.t0 = _context2['catch'](1); + _context2.next = 12; + return (0, _effects.put)((0, _show.onRequestError)(_context2.t0.message)); + + case 12: + return _context2.abrupt('return', _context2.sent); + + case 13: + if (!isChannel) { + _context2.next = 17; + break; + } + + _context2.next = 16; + return (0, _effects.call)(_show_channel.newChannelRequest, (0, _show.onNewChannelRequest)(channelName, channelClaimId)); + + case 16: + return _context2.abrupt('return', _context2.sent); + + case 17: + // if not for a channel, parse the claim request + claimName = void 0, extension = void 0; + _context2.prev = 18; + _lbryUri$parseClaim2 = _lbryUri2.default.parseClaim(claim); + claimName = _lbryUri$parseClaim2.claimName; + extension = _lbryUri$parseClaim2.extension; + _context2.next = 29; + break; + + case 24: + _context2.prev = 24; + _context2.t1 = _context2['catch'](18); + _context2.next = 28; + return (0, _effects.put)((0, _show.onRequestError)(_context2.t1.message)); + + case 28: + return _context2.abrupt('return', _context2.sent); + + case 29: + _context2.next = 31; + return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, null, null, extension)); + + case 31: + case 'end': + return _context2.stop(); + } + } + }, _marked2, this, [[1, 8], [18, 24]]); +} + +function handleShowPageUri(action) { + var _action$data, identifier, claim; + + return regeneratorRuntime.wrap(function handleShowPageUri$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + _action$data = action.data, identifier = _action$data.identifier, claim = _action$data.claim; + + if (!identifier) { + _context3.next = 5; + break; + } + + _context3.next = 4; + return (0, _effects.call)(parseAndUpdateIdentifierAndClaim, identifier, claim); + + case 4: + return _context3.abrupt('return', _context3.sent); + + case 5: + _context3.next = 7; + return (0, _effects.call)(parseAndUpdateClaimOnly, claim); + + case 7: + case 'end': + return _context3.stop(); + } + } + }, _marked3, this); +}; + +function watchHandleShowPageUri() { + return regeneratorRuntime.wrap(function watchHandleShowPageUri$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + _context4.next = 2; + return (0, _effects.takeLatest)(actions.HANDLE_SHOW_URI, handleShowPageUri); + + case 2: + case 'end': + return _context4.stop(); + } + } + }, _marked4, this); +}; + +/***/ }), +/* 153 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.newAssetRequest = newAssetRequest; +exports.watchNewAssetRequest = watchNewAssetRequest; + +var _effects = __webpack_require__(15); + +var _show_action_types = __webpack_require__(12); + +var actions = _interopRequireWildcard(_show_action_types); + +var _show = __webpack_require__(8); + +var _assetApi = __webpack_require__(154); + +var _show2 = __webpack_require__(13); + +var _site = __webpack_require__(44); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +var _marked = /*#__PURE__*/regeneratorRuntime.mark(newAssetRequest), + _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewAssetRequest); + +function newAssetRequest(action) { + var _action$data, requestType, requestId, name, modifier, state, host, longId, _ref, assetKey, shortId, _ref2, claimData, _ref3; + + return regeneratorRuntime.wrap(function newAssetRequest$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, name = _action$data.name, modifier = _action$data.modifier; + // put an action to update the request in redux + + _context.next = 3; + return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId)); + + case 3: + _context.next = 5; + return (0, _effects.select)(_show2.selectShowState); + + case 5: + state = _context.sent; + _context.next = 8; + return (0, _effects.select)(_site.selectSiteHost); + + case 8: + host = _context.sent; + + if (!state.requestList[requestId]) { + _context.next = 11; + break; + } + + return _context.abrupt('return', null); + + case 11: + // get long id && add request to request list + longId = void 0; + _context.prev = 12; + _context.next = 15; + return (0, _effects.call)(_assetApi.getLongClaimId, host, name, modifier); + + case 15: + _ref = _context.sent; + longId = _ref.data; + _context.next = 24; + break; + + case 19: + _context.prev = 19; + _context.t0 = _context['catch'](12); + _context.next = 23; + return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message)); + + case 23: + return _context.abrupt('return', _context.sent); + + case 24: + assetKey = 'a#' + name + '#' + longId; + _context.next = 27; + return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, assetKey)); + + case 27: + if (!state.assetList[assetKey]) { + _context.next = 29; + break; + } + + return _context.abrupt('return', null); + + case 29: + // get short Id + shortId = void 0; + _context.prev = 30; + _context.next = 33; + return (0, _effects.call)(_assetApi.getShortId, host, name, longId); + + case 33: + _ref2 = _context.sent; + shortId = _ref2.data; + _context.next = 42; + break; + + case 37: + _context.prev = 37; + _context.t1 = _context['catch'](30); + _context.next = 41; + return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message)); + + case 41: + return _context.abrupt('return', _context.sent); + + case 42: + // get asset claim data + claimData = void 0; + _context.prev = 43; + _context.next = 46; + return (0, _effects.call)(_assetApi.getClaimData, host, name, longId); + + case 46: + _ref3 = _context.sent; + claimData = _ref3.data; + _context.next = 55; + break; + + case 50: + _context.prev = 50; + _context.t2 = _context['catch'](43); + _context.next = 54; + return (0, _effects.put)((0, _show.onRequestError)(_context.t2.message)); + + case 54: + return _context.abrupt('return', _context.sent); + + case 55: + _context.next = 57; + return (0, _effects.put)((0, _show.addAssetToAssetList)(assetKey, null, name, longId, shortId, claimData)); + + case 57: + _context.next = 59; + return (0, _effects.put)((0, _show.onRequestError)(null)); + + case 59: + case 'end': + return _context.stop(); + } + } + }, _marked, this, [[12, 19], [30, 37], [43, 50]]); +}; + +function watchNewAssetRequest() { + return regeneratorRuntime.wrap(function watchNewAssetRequest$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + _context2.next = 2; + return (0, _effects.takeLatest)(actions.ASSET_REQUEST_NEW, newAssetRequest); + + case 2: + case 'end': + return _context2.stop(); + } + } + }, _marked2, this); +}; + +/***/ }), +/* 154 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getLongClaimId = getLongClaimId; +exports.getShortId = getShortId; +exports.getClaimData = getClaimData; + +var _request = __webpack_require__(11); + +var _request2 = _interopRequireDefault(_request); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function getLongClaimId(host, name, modifier) { + var body = {}; + // create request params + if (modifier) { + if (modifier.id) { + body['claimId'] = modifier.id; + } else { + body['channelName'] = modifier.channel.name; + body['channelClaimId'] = modifier.channel.id; + } + } + body['claimName'] = name; + var params = { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(body) + }; + // create url + var url = host + '/api/claim/long-id'; + // return the request promise + return (0, _request2.default)(url, params); +}; + +function getShortId(host, name, claimId) { + var url = host + '/api/claim/short-id/' + claimId + '/' + name; + return (0, _request2.default)(url); +}; + +function getClaimData(host, name, claimId) { + var url = host + '/api/claim/data/' + name + '/' + claimId; + return (0, _request2.default)(url); +}; + +/***/ }), +/* 155 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.newChannelRequest = newChannelRequest; +exports.watchNewChannelRequest = watchNewChannelRequest; +exports.watchUpdateChannelClaims = watchUpdateChannelClaims; + +var _effects = __webpack_require__(15); + +var _show_action_types = __webpack_require__(12); + +var actions = _interopRequireWildcard(_show_action_types); + +var _show = __webpack_require__(8); + +var _channelApi = __webpack_require__(156); + +var _show2 = __webpack_require__(13); + +var _site = __webpack_require__(44); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +var _marked = /*#__PURE__*/regeneratorRuntime.mark(newChannelRequest), + _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewChannelRequest), + _marked3 = /*#__PURE__*/regeneratorRuntime.mark(getNewClaimsAndUpdateChannel), + _marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchUpdateChannelClaims); + +function newChannelRequest(action) { + var _action$data, requestType, requestId, channelName, channelId, state, host, longId, shortId, _ref, _ref$data, channelKey, claimsData, _ref2; + + return regeneratorRuntime.wrap(function newChannelRequest$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, channelName = _action$data.channelName, channelId = _action$data.channelId; + // put an action to update the request in redux + + _context.next = 3; + return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId)); + + case 3: + _context.next = 5; + return (0, _effects.select)(_show2.selectShowState); + + case 5: + state = _context.sent; + _context.next = 8; + return (0, _effects.select)(_site.selectSiteHost); + + case 8: + host = _context.sent; + + if (!state.requestList[requestId]) { + _context.next = 11; + break; + } + + return _context.abrupt('return', null); + + case 11: + // get channel long id + longId = void 0, shortId = void 0; + _context.prev = 12; + _context.next = 15; + return (0, _effects.call)(_channelApi.getChannelData, host, channelName, channelId); + + case 15: + _ref = _context.sent; + _ref$data = _ref.data; + longId = _ref$data.longChannelClaimId; + shortId = _ref$data.shortChannelClaimId; + _context.next = 26; + break; + + case 21: + _context.prev = 21; + _context.t0 = _context['catch'](12); + _context.next = 25; + return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message)); + + case 25: + return _context.abrupt('return', _context.sent); + + case 26: + // store the request in the channel requests list + channelKey = 'c#' + channelName + '#' + longId; + _context.next = 29; + return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, channelKey)); + + case 29: + if (!state.channelList[channelKey]) { + _context.next = 31; + break; + } + + return _context.abrupt('return', null); + + case 31: + // get channel claims data + claimsData = void 0; + _context.prev = 32; + _context.next = 35; + return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, channelName, 1); + + case 35: + _ref2 = _context.sent; + claimsData = _ref2.data; + _context.next = 44; + break; + + case 39: + _context.prev = 39; + _context.t1 = _context['catch'](32); + _context.next = 43; + return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message)); + + case 43: + return _context.abrupt('return', _context.sent); + + case 44: + _context.next = 46; + return (0, _effects.put)((0, _show.addNewChannelToChannelList)(channelKey, channelName, shortId, longId, claimsData)); + + case 46: + _context.next = 48; + return (0, _effects.put)((0, _show.onRequestError)(null)); + + case 48: + case 'end': + return _context.stop(); + } + } + }, _marked, this, [[12, 21], [32, 39]]); +} + +function watchNewChannelRequest() { + return regeneratorRuntime.wrap(function watchNewChannelRequest$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + _context2.next = 2; + return (0, _effects.takeLatest)(actions.CHANNEL_REQUEST_NEW, newChannelRequest); + + case 2: + case 'end': + return _context2.stop(); + } + } + }, _marked2, this); +}; + +function getNewClaimsAndUpdateChannel(action) { + var _action$data2, channelKey, name, longId, page, host, claimsData, _ref3; + + return regeneratorRuntime.wrap(function getNewClaimsAndUpdateChannel$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + _action$data2 = action.data, channelKey = _action$data2.channelKey, name = _action$data2.name, longId = _action$data2.longId, page = _action$data2.page; + _context3.next = 3; + return (0, _effects.select)(_site.selectSiteHost); + + case 3: + host = _context3.sent; + claimsData = void 0; + _context3.prev = 5; + _context3.next = 8; + return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, name, page); + + case 8: + _ref3 = _context3.sent; + claimsData = _ref3.data; + _context3.next = 17; + break; + + case 12: + _context3.prev = 12; + _context3.t0 = _context3['catch'](5); + _context3.next = 16; + return (0, _effects.put)((0, _show.onRequestError)(_context3.t0.message)); + + case 16: + return _context3.abrupt('return', _context3.sent); + + case 17: + _context3.next = 19; + return (0, _effects.put)((0, _show.updateChannelClaims)(channelKey, claimsData)); + + case 19: + case 'end': + return _context3.stop(); + } + } + }, _marked3, this, [[5, 12]]); +} + +function watchUpdateChannelClaims() { + return regeneratorRuntime.wrap(function watchUpdateChannelClaims$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + _context4.next = 2; + return (0, _effects.takeLatest)(actions.CHANNEL_CLAIMS_UPDATE_ASYNC, getNewClaimsAndUpdateChannel); + + case 2: + case 'end': + return _context4.stop(); + } + } + }, _marked4, this); +} + +/***/ }), +/* 156 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getChannelData = getChannelData; +exports.getChannelClaims = getChannelClaims; + +var _request = __webpack_require__(11); + +var _request2 = _interopRequireDefault(_request); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function getChannelData(host, id, name) { + if (!id) id = 'none'; + var url = host + '/api/channel/data/' + name + '/' + id; + return (0, _request2.default)(url); +}; + +function getChannelClaims(host, longId, name, page) { + if (!page) page = 1; + var url = host + '/api/channel/claims/' + name + '/' + longId + '/' + page; + return (0, _request2.default)(url); +}; + +/***/ }), +/* 157 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +module.exports = { + REGEXP_INVALID_CLAIM: /[^A-Za-z0-9-]/g, + REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g, + REGEXP_ADDRESS: /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/, + CHANNEL_CHAR: '@', + parseIdentifier: function parseIdentifier(identifier) { + var componentsRegex = new RegExp('([^:$#/]*)' + // value (stops at the first separator or end) + '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end) + ); + + var _componentsRegex$exec = componentsRegex // eslint-disable-line no-unused-vars + .exec(identifier).map(function (match) { + return match || null; + }), + _componentsRegex$exec2 = _slicedToArray(_componentsRegex$exec, 4), + proto = _componentsRegex$exec2[0], + value = _componentsRegex$exec2[1], + modifierSeperator = _componentsRegex$exec2[2], + modifier = _componentsRegex$exec2[3]; + + // Validate and process name + + + if (!value) { + throw new Error('Check your URL. No channel name provided before "' + modifierSeperator + '"'); + } + var isChannel = value.startsWith(module.exports.CHANNEL_CHAR); + var channelName = isChannel ? value : null; + var claimId = void 0; + if (isChannel) { + if (!channelName) { + throw new Error('Check your URL. No channel name after "@".'); + } + var nameBadChars = channelName.match(module.exports.REGEXP_INVALID_CHANNEL); + if (nameBadChars) { + throw new Error('Check your URL. Invalid characters in channel name: "' + nameBadChars.join(', ') + '".'); + } + } else { + claimId = value; + } + + // Validate and process modifier + var channelClaimId = void 0; + if (modifierSeperator) { + if (!modifier) { + throw new Error('Check your URL. No modifier provided after separator "' + modifierSeperator + '"'); + } + + if (modifierSeperator === ':') { + channelClaimId = modifier; + } else { + throw new Error('Check your URL. The "' + modifierSeperator + '" modifier is not currently supported'); + } + } + return { + isChannel: isChannel, + channelName: channelName, + channelClaimId: channelClaimId || null, + claimId: claimId || null + }; + }, + parseClaim: function parseClaim(name) { + var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first extension) + '([:$#.]?)([^/]*)' // extension separator, extension (stops at the first path separator or end) + ); + + var _componentsRegex$exec3 = componentsRegex // eslint-disable-line no-unused-vars + .exec(name).map(function (match) { + return match || null; + }), + _componentsRegex$exec4 = _slicedToArray(_componentsRegex$exec3, 4), + proto = _componentsRegex$exec4[0], + claimName = _componentsRegex$exec4[1], + extensionSeperator = _componentsRegex$exec4[2], + extension = _componentsRegex$exec4[3]; + + // Validate and process name + + + if (!claimName) { + throw new Error('Check your URL. No claim name provided before "."'); + } + var nameBadChars = claimName.match(module.exports.REGEXP_INVALID_CLAIM); + if (nameBadChars) { + throw new Error('Check your URL. Invalid characters in claim name: "' + nameBadChars.join(', ') + '".'); + } + // Validate and process extension + if (extensionSeperator) { + if (!extension) { + throw new Error('Check your URL. No file extension provided after separator "' + extensionSeperator + '".'); + } + if (extensionSeperator !== '.') { + throw new Error('Check your URL. The "' + extensionSeperator + '" separator is not supported in the claim name.'); + } + } + return { + claimName: claimName, + extension: extension || null + }; + } +}; + +/***/ }), +/* 158 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var handlePageRender = __webpack_require__(29); + +module.exports = function (app) { + // a catch-all route if someone visits a page that does not exist + app.use('*', function (req, res) { + // send response + handlePageRender(req, res); + }); +}; + +/***/ }) +/******/ ]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZmRiYmJiMjcwMzQ0OThjZDIwNDciLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJyZWFjdC1yZWR1eFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbnN0b25cIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJyZWFjdC1yb3V0ZXItZG9tXCIiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2FjdGlvbnMvcHVibGlzaC5qcyIsIndlYnBhY2s6Ly8vLi9jb25maWcvc2l0ZUNvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvbW9kZWxzL2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL05hdkJhci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvYWN0aW9ucy9zaG93LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb21wb25lbnRzL1NFTy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJwcm9wLXR5cGVzXCIiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3V0aWxzL3JlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnN0YW50cy9zaG93X2FjdGlvbl90eXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc2VsZWN0b3JzL3Nob3cuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3QtaGVsbWV0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVkdXgtc2FnYS9lZmZlY3RzXCIiLCJ3ZWJwYWNrOi8vLy4vc2VydmVyL2hlbHBlcnMvbGJyeUFwaS5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvaGVscGVycy9nb29nbGVBbmFseXRpY3MuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVkdXhcIiIsIndlYnBhY2s6Ly8vLi9jbGllbnQvYWN0aW9ucy9jaGFubmVsLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb21wb25lbnRzL1Byb2dyZXNzQmFyL2luZGV4LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvcGFnZXMvRXJyb3JQYWdlL2luZGV4LmpzeCIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJwYXNzcG9ydFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInBhc3Nwb3J0LWxvY2FsXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwic2VxdWVsaXplXCIiLCJ3ZWJwYWNrOi8vLy4vc2VydmVyL2hlbHBlcnMvc2VxdWVsaXplSGVscGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvaGVscGVycy9wdWJsaXNoSGVscGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvaGVscGVycy9lcnJvckhhbmRsZXJzLmpzIiwid2VicGFjazovLy8uL3NlcnZlci9jb250cm9sbGVycy9zZXJ2ZUNvbnRyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc2VydmVyL2hlbHBlcnMvaGFuZGxlUGFnZVJlbmRlci5qc3giLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3QtZG9tL3NlcnZlclwiIiwid2VicGFjazovLy8uL2NsaWVudC9yZWR1Y2Vycy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29uc3RhbnRzL3B1Ymxpc2hfYWN0aW9uX3R5cGVzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb25zdGFudHMvcHVibGlzaF9jaGFubmVsX3NlbGVjdF9zdGF0ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnN0YW50cy9jaGFubmVsX2FjdGlvbl90eXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29uc3RhbnRzL2Fzc2V0X2Rpc3BsYXlfc3RhdGVzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb21wb25lbnRzL0dBTGlzdGVuZXIvaW5kZXguanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9hcHAuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0Ryb3B6b25lL2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxMb2dpbkZvcm0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvQ2hhbm5lbENyZWF0ZUZvcm0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnN0YW50cy9zaG93X3JlcXVlc3RfdHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvQXNzZXREaXNwbGF5L2luZGV4LmpzIiwid2VicGFjazovLy8uL3NlcnZlci9oZWxwZXJzL3JlbmRlckZ1bGxQYWdlLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9zZWxlY3RvcnMvc2l0ZS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJiYWJlbC1wb2x5ZmlsbFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndoYXR3Zy1mZXRjaFwiIiwid2VicGFjazovLy8uL3NlcnZlci9zZXJ2ZXIuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiZXhwcmVzc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcImJvZHktcGFyc2VyXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiZXhwcmVzcy1oYW5kbGViYXJzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiaGFuZGxlYmFyc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcImhlbG1ldFwiIiwid2VicGFjazovLy8uL3NlcnZlci9oZWxwZXJzL2F1dGhIZWxwZXJzLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcImNvb2tpZS1zZXNzaW9uXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiaHR0cFwiIiwid2VicGFjazovLy8uL3NlcnZlci9oZWxwZXJzL2NvbmZpZ3VyZUxvZ2dlci5qcyIsIndlYnBhY2s6Ly8vLi9jb25maWcvbG9nZ2VyQ29uZmlnLmpzIiwid2VicGFjazovLy8uL3NlcnZlci9oZWxwZXJzL2NvbmZpZ3VyZVNsYWNrLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbnN0b24tc2xhY2std2ViaG9va1wiIiwid2VicGFjazovLy8uL2NvbmZpZy9zbGFja0NvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvcGFzc3BvcnQvbG9jYWwtc2lnbnVwLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcImF4aW9zXCIiLCJ3ZWJwYWNrOi8vLy4vY29uZmlnL2xicnlDb25maWcuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwidW5pdmVyc2FsLWFuYWx5dGljc1wiIiwid2VicGFjazovLy8uL2NvbmZpZy9teXNxbENvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvbW9kZWxzL2NlcnRpZmljYXRlLmpzIiwid2VicGFjazovLy8uL3NlcnZlci9tb2RlbHMvY2hhbm5lbC5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvbW9kZWxzL2NsYWltLmpzIiwid2VicGFjazovLy8uL3NlcnZlci9tb2RlbHMvZmlsZS5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvbW9kZWxzL3JlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vc2VydmVyL21vZGVscy91c2VyLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcImJjcnlwdFwiIiwid2VicGFjazovLy8uL3NlcnZlci9wYXNzcG9ydC9sb2NhbC1sb2dpbi5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvcm91dGVzL2F1dGgtcm91dGVzLmpzIiwid2VicGFjazovLy8uL3NlcnZlci9yb3V0ZXMvYXBpLXJvdXRlcy5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJjb25uZWN0LW11bHRpcGFydHlcIiIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvY29udHJvbGxlcnMvcHVibGlzaENvbnRyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiZnNcIiIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvYXV0aC9hdXRoZW50aWNhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvaGVscGVycy9jaGFubmVsUGFnaW5hdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvcm91dGVzL3BhZ2Utcm91dGVzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9yZWR1Y2Vycy9wdWJsaXNoLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9yZWR1Y2Vycy9jaGFubmVsLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9yZWR1Y2Vycy9zaG93LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9yZWR1Y2Vycy9zaXRlLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlYWN0LWdhXCIiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3BhZ2VzL0hvbWVQYWdlL2luZGV4LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29tcG9uZW50cy9TRU8vdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3V0aWxzL3BhZ2VUaXRsZS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdXRpbHMvbWV0YVRhZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3V0aWxzL2Nhbm9uaWNhbExpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvTmF2QmFyL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb21wb25lbnRzL0xvZ28vaW5kZXguanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb21wb25lbnRzL05hdkJhckNoYW5uZWxPcHRpb25zRHJvcGRvd24vaW5kZXguanN4Iiwid2VicGFjazovLy9leHRlcm5hbCBcImNyb3NzLWZldGNoL3BvbHlmaWxsXCIiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvUHVibGlzaFRvb2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvUHVibGlzaFRvb2wvdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvRHJvcHpvbmUvdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3V0aWxzL2ZpbGUuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbXBvbmVudHMvUHVibGlzaFByZXZpZXcvaW5kZXguanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hEZXRhaWxzL2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hEZXRhaWxzL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hUaXRsZUlucHV0L2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hUaXRsZUlucHV0L3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hVcmxJbnB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoVXJsSW5wdXQvdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbXBvbmVudHMvUHVibGlzaFVybE1pZGRsZURpc3BsYXkvaW5kZXguanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hUaHVtYm5haWxJbnB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoVGh1bWJuYWlsSW5wdXQvdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvUHVibGlzaE1ldGFkYXRhSW5wdXRzL2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hNZXRhZGF0YUlucHV0cy92aWV3LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29tcG9uZW50cy9FeHBhbmRpbmdUZXh0QXJlYS9pbmRleC5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvQ2hhbm5lbFNlbGVjdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9DaGFubmVsU2VsZWN0L3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxMb2dpbkZvcm0vdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvQ2hhbm5lbENyZWF0ZUZvcm0vdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbXBvbmVudHMvQWN0aXZlU3RhdHVzQmFyL2luZGV4LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29tcG9uZW50cy9JbmFjdGl2ZVN0YXR1c0Jhci9pbmRleC5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvUHVibGlzaFN0YXR1cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoU3RhdHVzL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb25zdGFudHMvcHVibGlzaF9jbGFpbV9zdGF0ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvUHVibGlzaERpc2FibGVkTWVzc2FnZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoRGlzYWJsZWRNZXNzYWdlL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9wYWdlcy9BYm91dFBhZ2UvaW5kZXguanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9wYWdlcy9Mb2dpblBhZ2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3BhZ2VzL0xvZ2luUGFnZS92aWV3LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvcGFnZXMvU2hvd1BhZ2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3BhZ2VzL1Nob3dQYWdlL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1Nob3dBc3NldExpdGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvU2hvd0Fzc2V0TGl0ZS92aWV3LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9Bc3NldERpc3BsYXkvdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvU2hvd0Fzc2V0RGV0YWlscy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9TaG93QXNzZXREZXRhaWxzL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0Fzc2V0VGl0bGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvQXNzZXRUaXRsZS92aWV3LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9Bc3NldEluZm8vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvQXNzZXRJbmZvL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1Nob3dDaGFubmVsL2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1Nob3dDaGFubmVsL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxDbGFpbXNEaXNwbGF5L2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxDbGFpbXNEaXNwbGF5L3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb21wb25lbnRzL0Fzc2V0UHJldmlldy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29tcG9uZW50cy9Bc3NldFByZXZpZXcvdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvRm91ck9oRm91clBhZ2UvaW5kZXguanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0ZvdXJPaEZvdXJQYWdlL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL3NlcnZlci9yb3V0ZXMvYXNzZXQtcm91dGVzLmpzIiwid2VicGFjazovLy8uL3NlcnZlci9oZWxwZXJzL3NlcnZlSGVscGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvaGVscGVycy9sYnJ5VXJpLmpzIiwid2VicGFjazovLy8uL3NlcnZlci9oZWxwZXJzL2hhbmRsZVNob3dSZW5kZXIuanN4Iiwid2VicGFjazovLy9leHRlcm5hbCBcInJlZHV4LXNhZ2FcIiIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc2FnYXMvc2hvd191cmkuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3NhZ2FzL3Nob3dfYXNzZXQuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2FwaS9hc3NldEFwaS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc2FnYXMvc2hvd19jaGFubmVsLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9hcGkvY2hhbm5lbEFwaS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdXRpbHMvbGJyeVVyaS5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvcm91dGVzL2ZhbGxiYWNrLXJvdXRlcy5qcyJdLCJuYW1lcyI6WyJzZWxlY3RGaWxlIiwiY2xlYXJGaWxlIiwidXBkYXRlTWV0YWRhdGEiLCJ1cGRhdGVDbGFpbSIsInNldFB1Ymxpc2hJbkNoYW5uZWwiLCJ1cGRhdGVQdWJsaXNoU3RhdHVzIiwidXBkYXRlRXJyb3IiLCJ1cGRhdGVTZWxlY3RlZENoYW5uZWwiLCJ0b2dnbGVNZXRhZGF0YUlucHV0cyIsIm9uTmV3VGh1bWJuYWlsIiwic3RhcnRQdWJsaXNoIiwiYWN0aW9ucyIsImZpbGUiLCJ0eXBlIiwiRklMRV9TRUxFQ1RFRCIsImRhdGEiLCJGSUxFX0NMRUFSIiwibmFtZSIsInZhbHVlIiwiTUVUQURBVEFfVVBEQVRFIiwiQ0xBSU1fVVBEQVRFIiwiY2hhbm5lbCIsIlNFVF9QVUJMSVNIX0lOX0NIQU5ORUwiLCJzdGF0dXMiLCJtZXNzYWdlIiwiUFVCTElTSF9TVEFUVVNfVVBEQVRFIiwiRVJST1JfVVBEQVRFIiwiY2hhbm5lbE5hbWUiLCJTRUxFQ1RFRF9DSEFOTkVMX1VQREFURSIsInNob3dNZXRhZGF0YUlucHV0cyIsIlRPR0dMRV9NRVRBREFUQV9JTlBVVFMiLCJUSFVNQk5BSUxfTkVXIiwiaGlzdG9yeSIsIlBVQkxJU0hfU1RBUlQiLCJTaXRlQ29uZmlnIiwiYW5hbHl0aWNzIiwiZ29vZ2xlSWQiLCJhc3NldERlZmF1bHRzIiwiZGVzY3JpcHRpb24iLCJ0aHVtYm5haWwiLCJ0aXRsZSIsImF1dGgiLCJzZXNzaW9uS2V5IiwiZGV0YWlscyIsImhvc3QiLCJwb3J0IiwidHdpdHRlciIsInB1Ymxpc2hpbmciLCJhZGRpdGlvbmFsQ2xhaW1BZGRyZXNzZXMiLCJkaXNhYmxlZCIsImRpc2FibGVkTWVzc2FnZSIsInByaW1hcnlDbGFpbUFkZHJlc3MiLCJ0aHVtYm5haWxDaGFubmVsIiwidGh1bWJuYWlsQ2hhbm5lbElkIiwidXBsb2FkRGlyZWN0b3J5IiwibW9kdWxlIiwiZXhwb3J0cyIsIlNlcXVlbGl6ZSIsInJlcXVpcmUiLCJsb2dnZXIiLCJjb25zb2xlIiwibG9nIiwiZGF0YWJhc2UiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiZGIiLCJzZXF1ZWxpemUiLCJkaWFsZWN0IiwiZGlhbGVjdE9wdGlvbnMiLCJkZWNpbWFsTnVtYmVycyIsImxvZ2dpbmciLCJwb29sIiwibWF4IiwibWluIiwiaWRsZSIsImFjcXVpcmUiLCJhdXRoZW50aWNhdGUiLCJ0aGVuIiwiaW5mbyIsImNhdGNoIiwiZXJyb3IiLCJlcnIiLCJDZXJ0aWZpY2F0ZSIsIkNoYW5uZWwiLCJDbGFpbSIsIkZpbGUiLCJSZXF1ZXN0IiwiVXNlciIsImltcG9ydCIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwibW9kZWxOYW1lIiwiYXNzb2NpYXRlIiwidXBzZXJ0IiwiTW9kZWwiLCJ2YWx1ZXMiLCJjb25kaXRpb24iLCJ0YWJsZU5hbWUiLCJmaW5kT25lIiwid2hlcmUiLCJvYmoiLCJkZWJ1ZyIsInVwZGF0ZSIsImNyZWF0ZSIsIm1hcFN0YXRlVG9Qcm9wcyIsInNpdGUiLCJsb2dnZWRJbkNoYW5uZWwiLCJjaGFubmVsU2hvcnRJZCIsInNob3J0SWQiLCJjaGFubmVsTG9uZ0lkIiwibG9uZ0lkIiwic2l0ZURlc2NyaXB0aW9uIiwibWFwRGlzcGF0Y2hUb1Byb3BzIiwib25DaGFubmVsTG9naW4iLCJkaXNwYXRjaCIsIm9uQ2hhbm5lbExvZ291dCIsIm9uSGFuZGxlU2hvd1BhZ2VVcmkiLCJvblJlcXVlc3RFcnJvciIsIm9uTmV3Q2hhbm5lbFJlcXVlc3QiLCJvbk5ld0Fzc2V0UmVxdWVzdCIsIm9uUmVxdWVzdFVwZGF0ZSIsImFkZFJlcXVlc3RUb1JlcXVlc3RMaXN0IiwiYWRkQXNzZXRUb0Fzc2V0TGlzdCIsImFkZE5ld0NoYW5uZWxUb0NoYW5uZWxMaXN0Iiwib25VcGRhdGVDaGFubmVsQ2xhaW1zIiwidXBkYXRlQ2hhbm5lbENsYWltcyIsImZpbGVSZXF1ZXN0ZWQiLCJ1cGRhdGVGaWxlQXZhaWxhYmlsaXR5IiwidXBkYXRlRGlzcGxheUFzc2V0RXJyb3IiLCJwYXJhbXMiLCJIQU5ETEVfU0hPV19VUkkiLCJSRVFVRVNUX0VSUk9SIiwiY2hhbm5lbElkIiwicmVxdWVzdFR5cGUiLCJyZXF1ZXN0SWQiLCJDSEFOTkVMX1JFUVVFU1RfTkVXIiwiaWQiLCJleHRlbnNpb24iLCJBU1NFVF9SRVFVRVNUX05FVyIsIm1vZGlmaWVyIiwiUkVRVUVTVF9VUERBVEUiLCJrZXkiLCJSRVFVRVNUX0xJU1RfQUREIiwiY2xhaW1JZCIsImNsYWltRGF0YSIsIkFTU0VUX0FERCIsImNsYWltc0RhdGEiLCJDSEFOTkVMX0FERCIsImNoYW5uZWxLZXkiLCJwYWdlIiwiQ0hBTk5FTF9DTEFJTVNfVVBEQVRFX0FTWU5DIiwiY2hhbm5lbExpc3RJZCIsIkNIQU5ORUxfQ0xBSU1TX1VQREFURV9TVUNDRVNTIiwiRklMRV9SRVFVRVNURUQiLCJGSUxFX0FWQUlMQUJJTElUWV9VUERBVEUiLCJESVNQTEFZX0FTU0VUX0VSUk9SIiwiZGVmYXVsdERlc2NyaXB0aW9uIiwiZGVmYXVsdFRodW1ibmFpbCIsInNpdGVIb3N0Iiwic2l0ZVRpdGxlIiwic2l0ZVR3aXR0ZXIiLCJyZXF1ZXN0IiwicGFyc2VKU09OIiwicmVzcG9uc2UiLCJqc29uIiwiY2hlY2tTdGF0dXMiLCJqc29uUmVzcG9uc2UiLCJFcnJvciIsInVybCIsIm9wdGlvbnMiLCJmZXRjaCIsIlByb21pc2UiLCJhbGwiLCJzZWxlY3RBc3NldCIsInNob3ciLCJyZXF1ZXN0TGlzdCIsImFzc2V0S2V5IiwiYXNzZXRMaXN0Iiwic2VsZWN0U2hvd1N0YXRlIiwic3RhdGUiLCJheGlvcyIsImFwaSIsImFwaUhvc3QiLCJhcGlQb3J0IiwibGJyeUFwaVVyaSIsImNob29zZUdhTGJyeW5ldFB1Ymxpc2hMYWJlbCIsInNlbmRHQVRpbWluZ0V2ZW50IiwiaGFuZGxlTGJyeW5ldFJlc3BvbnNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlc3VsdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJwdWJsaXNoQ2xhaW0iLCJwdWJsaXNoUGFyYW1zIiwiZ2FTdGFydFRpbWUiLCJEYXRlIiwibm93IiwicG9zdCIsIm1ldGhvZCIsImdldENsYWltIiwidXJpIiwidGltZW91dCIsImdldENsYWltTGlzdCIsImNsYWltTmFtZSIsInJlc29sdmVVcmkiLCJnZXREb3dubG9hZERpcmVjdG9yeSIsImRvd25sb2FkX2RpcmVjdG9yeSIsImNyZWF0ZUNoYW5uZWwiLCJjaGFubmVsX25hbWUiLCJhbW91bnQiLCJ1YSIsImNyZWF0ZVNlcnZlRXZlbnRQYXJhbXMiLCJoZWFkZXJzIiwiaXAiLCJvcmlnaW5hbFVybCIsImV2ZW50Q2F0ZWdvcnkiLCJldmVudEFjdGlvbiIsImV2ZW50TGFiZWwiLCJpcE92ZXJyaWRlIiwidXNlckFnZW50T3ZlcnJpZGUiLCJjcmVhdGVQdWJsaXNoVGltaW5nRXZlbnRQYXJhbXMiLCJjYXRlZ29yeSIsInZhcmlhYmxlIiwibGFiZWwiLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwiZHVyYXRpb24iLCJ1c2VyVGltaW5nQ2F0ZWdvcnkiLCJ1c2VyVGltaW5nVmFyaWFibGVOYW1lIiwidXNlclRpbWluZ1RpbWUiLCJ1c2VyVGltaW5nTGFiZWwiLCJzZW5kR29vZ2xlQW5hbHl0aWNzRXZlbnQiLCJ2aXNpdG9ySWQiLCJyZXBsYWNlIiwidmlzaXRvciIsInN0cmljdENpZEZvcm1hdCIsImh0dHBzIiwiZXZlbnQiLCJzZW5kR29vZ2xlQW5hbHl0aWNzVGltaW5nIiwidGltaW5nIiwic2VuZEdBU2VydmVFdmVudCIsImNoYW5uZWxfaWQiLCJ1cGRhdGVMb2dnZWRJbkNoYW5uZWwiLCJDSEFOTkVMX1VQREFURSIsIlByb2dyZXNzQmFyIiwicHJvcHMiLCJiYXJzIiwiaW5kZXgiLCJpbmNyZW1lbnRlciIsImNyZWF0ZUJhcnMiLCJiaW5kIiwic3RhcnRQcm9ncmVzc0JhciIsInVwZGF0ZVByb2dyZXNzQmFyIiwic3RvcFByb2dyZXNzQmFyIiwiaSIsInNpemUiLCJwdXNoIiwiaXNBY3RpdmUiLCJzZXRTdGF0ZSIsInVwZGF0ZUludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwibWFwIiwiYmFyIiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIiwibnVtYmVyIiwiaXNSZXF1aXJlZCIsIkVycm9yUGFnZSIsInN0cmluZyIsInJldHVyblNob3J0SWQiLCJjbGFpbXNBcnJheSIsImNsYWltSW5kZXgiLCJzdWJzdHJpbmciLCJzaG9ydElkTGVuZ3RoIiwiZmluZEluZGV4IiwiZWxlbWVudCIsInBvc3NpYmxlTWF0Y2hlcyIsInNsaWNlIiwibGVuZ3RoIiwiZmlsdGVyIiwiZnMiLCJwYXJzZVB1Ymxpc2hBcGlSZXF1ZXN0Qm9keSIsIm5zZnciLCJsaWNlbnNlIiwiaW52YWxpZE5hbWVDaGFyYWN0ZXJzIiwiZXhlYyIsInBhcnNlUHVibGlzaEFwaVJlcXVlc3RGaWxlcyIsInBhdGgiLCJ0ZXN0IiwidmFsaWRhdGVGaWxlVHlwZUFuZFNpemUiLCJmaWxlTmFtZSIsImZpbGVQYXRoIiwiZmlsZVR5cGUiLCJ0aHVtYm5haWxGaWxlTmFtZSIsInRodW1ibmFpbEZpbGVQYXRoIiwidGh1bWJuYWlsRmlsZVR5cGUiLCJjcmVhdGVCYXNpY1B1Ymxpc2hQYXJhbXMiLCJ0cmltIiwiZmlsZV9wYXRoIiwiYmlkIiwibWV0YWRhdGEiLCJhdXRob3IiLCJsYW5ndWFnZSIsImNsYWltX2FkZHJlc3MiLCJjcmVhdGVUaHVtYm5haWxQdWJsaXNoUGFyYW1zIiwiZGVsZXRlVGVtcG9yYXJ5RmlsZSIsInVubGluayIsImFkZEdldFJlc3VsdHNUb0ZpbGVEYXRhIiwiZmlsZUluZm8iLCJnZXRSZXN1bHQiLCJmaWxlX25hbWUiLCJkb3dubG9hZF9wYXRoIiwiY3JlYXRlRmlsZURhdGEiLCJvdXRwb2ludCIsImhlaWdodCIsImFkZHJlc3MiLCJjb250ZW50VHlwZSIsImhhbmRsZUVycm9yUmVzcG9uc2UiLCJyZXMiLCJ1c2VPYmplY3RQcm9wZXJ0aWVzSWZOb0tleXMiLCJyZXR1cm5FcnJvck1lc3NhZ2VBbmRTdGF0dXMiLCJjcmVhdGVFcnJvclJlc3BvbnNlUGF5bG9hZCIsImNvZGUiLCJuZXdFcnJvck9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJzdWNjZXNzIiwicmV0dXJuUGFnaW5hdGVkQ2hhbm5lbENsYWltcyIsIk5PX0NIQU5ORUwiLCJOT19DTEFJTSIsIk5PX0ZJTEUiLCJnZXRDbGFpbUlkIiwiY2hhbm5lbENsYWltSWQiLCJnZXRDbGFpbUlkQnlDaGFubmVsIiwiZ2V0Q2xhaW1JZEJ5Q2xhaW0iLCJnZXRMb25nQ2xhaW1JZCIsImxvbmdDbGFpbUlkIiwiZ2V0TG9uZ0NoYW5uZWxJZCIsImxvbmdDaGFubmVsSWQiLCJnZXRDbGFpbUlkQnlMb25nQ2hhbm5lbElkIiwiZ2V0Q2hhbm5lbERhdGEiLCJsb25nQ2hhbm5lbENsYWltSWQiLCJnZXRTaG9ydENoYW5uZWxJZEZyb21Mb25nQ2hhbm5lbElkIiwic2hvcnRDaGFubmVsQ2xhaW1JZCIsImdldENoYW5uZWxDbGFpbXMiLCJnZXRBbGxDaGFubmVsQ2xhaW1zIiwiY2hhbm5lbENsYWltc0FycmF5IiwicGFnaW5hdGVkQ2hhbm5lbFZpZXdEYXRhIiwiZ2V0TG9jYWxGaWxlUmVjb3JkIiwiZGF0YVZhbHVlcyIsInJlcSIsImNvbnRleHQiLCJzdG9yZSIsImh0bWwiLCJoZWxtZXQiLCJyZW5kZXJTdGF0aWMiLCJyZWRpcmVjdCIsInByZWxvYWRlZFN0YXRlIiwiZ2V0U3RhdGUiLCJzZW5kIiwicHVibGlzaCIsIkxPR0lOIiwiQ1JFQVRFIiwiTE9DQUxfQ0hFQ0siLCJVTkFWQUlMQUJMRSIsIkVSUk9SIiwiQVZBSUxBQkxFIiwiaW5pdGlhbGl6ZSIsIkdBTGlzdGVuZXIiLCJzZW5kUGFnZVZpZXciLCJsb2NhdGlvbiIsImxpc3RlbiIsInNldCIsInBhdGhuYW1lIiwicGFnZXZpZXciLCJjaGlsZHJlbiIsIkFwcCIsImZpbGVFcnJvciIsInNldEZpbGVFcnJvciIsIkNIQU5ORUwiLCJBU1NFVF9MSVRFIiwiQVNTRVRfREVUQUlMUyIsImRpc3BsYXlBc3NldCIsImFzc2V0Iiwib25GaWxlUmVxdWVzdCIsInRvU3RyaW5nIiwibWV0YSIsImxpbmsiLCJzZWxlY3RTaXRlU3RhdGUiLCJzZWxlY3RTaXRlSG9zdCIsImV4cHJlc3MiLCJib2R5UGFyc2VyIiwiZXhwcmVzc0hhbmRsZWJhcnMiLCJIYW5kbGViYXJzIiwicGFzc3BvcnQiLCJzZXJpYWxpemVTcGVlY2hVc2VyIiwiZGVzZXJpYWxpemVTcGVlY2hVc2VyIiwiY29va2llU2Vzc2lvbiIsImh0dHAiLCJQT1JUIiwiYXBwIiwiZW5hYmxlIiwidXNlIiwic3RhdGljIiwiX19kaXJuYW1lIiwidXJsZW5jb2RlZCIsImV4dGVuZGVkIiwibmV4dCIsInZlcmJvc2UiLCJzZXJpYWxpemVVc2VyIiwiZGVzZXJpYWxpemVVc2VyIiwibG9jYWxTaWdudXBTdHJhdGVneSIsImxvY2FsTG9naW5TdHJhdGVneSIsIm1heEFnZSIsInNlc3Npb24iLCJoYnMiLCJkZWZhdWx0TGF5b3V0IiwiaGFuZGxlYmFycyIsImVuZ2luZSIsInNlcnZlciIsIlNlcnZlciIsInN5bmMiLCJ1c2VyIiwiZG9uZSIsImxvZ0xldmVsIiwid2luc3RvbiIsImNvbmZpZ3VyZSIsInRyYW5zcG9ydHMiLCJDb25zb2xlIiwibGV2ZWwiLCJ0aW1lc3RhbXAiLCJjb2xvcml6ZSIsInByZXR0eVByaW50IiwiaGFuZGxlRXhjZXB0aW9ucyIsImh1bWFuUmVhZGFibGVVbmhhbmRsZWRFeGNlcHRpb24iLCJ3YXJuIiwic2lsbHkiLCJsb2dnZXJDb25maWciLCJ3aW5zdG9uU2xhY2tXZWJIb29rIiwiU2xhY2tXZWJIb29rIiwic2xhY2tDb25maWciLCJzbGFja1dlYkhvb2siLCJzbGFja0Vycm9yQ2hhbm5lbCIsInNsYWNrSW5mb0NoYW5uZWwiLCJhZGQiLCJ3ZWJob29rVXJsIiwiaWNvbkVtb2ppIiwiU2xhY2tDb25maWciLCJQYXNzcG9ydExvY2FsU3RyYXRlZ3kiLCJTdHJhdGVneSIsImxicnlBcGkiLCJ1c2VybmFtZUZpZWxkIiwicGFzc3dvcmRGaWVsZCIsInVzZXJJbmZvIiwidXNlckRhdGEiLCJ1c2VyTmFtZSIsImNoYW5uZWxEYXRhIiwidHgiLCJjbGFpbV9pZCIsImNlcnRpZmljYXRlRGF0YSIsIm5ld1VzZXIiLCJuZXdDaGFubmVsIiwibmV3Q2VydGlmaWNhdGUiLCJzZXRDaGFubmVsIiwic2V0VXNlciIsInNob3J0Q2hhbm5lbElkIiwibGJyeUNvbmZpZyIsIk15c3FsQ29uZmlnIiwiU1RSSU5HIiwiQk9PTEVBTiIsIklOVEVHRVIiLCJURVhUIiwiREVDSU1BTCIsImRlZmluZSIsImRlZmF1bHQiLCJjbGFpbVNlcXVlbmNlIiwiZGVjb2RlZENsYWltIiwiZGVwdGgiLCJlZmZlY3RpdmVBbW91bnQiLCJoYXNTaWduYXR1cmUiLCJoZXgiLCJub3V0IiwidHhpZCIsInZhbGlkQXRIZWlnaHQiLCJ2YWx1ZVZlcnNpb24iLCJjbGFpbVR5cGUiLCJjZXJ0aWZpY2F0ZVZlcnNpb24iLCJrZXlUeXBlIiwicHVibGljS2V5IiwiZnJlZXplVGFibGVOYW1lIiwiYmVsb25nc1RvIiwiZm9yZWlnbktleSIsImFsbG93TnVsbCIsImZpbmRBbGwiLCJvcmRlciIsImdldExvbmdDaGFubmVsSWRGcm9tU2hvcnRDaGFubmVsSWQiLCIkbGlrZSIsImdldExvbmdDaGFubmVsSWRGcm9tQ2hhbm5lbE5hbWUiLCJ2YWxpZGF0ZUxvbmdDaGFubmVsSWQiLCJoYXNPbmUiLCJkZXRlcm1pbmVGaWxlRXh0ZW5zaW9uRnJvbUNvbnRlbnRUeXBlIiwiZGV0ZXJtaW5lVGh1bWJuYWlsIiwic3RvcmVkVGh1bWJuYWlsIiwicHJlcGFyZUNsYWltRGF0YSIsImNsYWltIiwiY2VydGlmaWNhdGVJZCIsImxpY2Vuc2VVcmwiLCJwcmV2aWV3IiwibWV0YWRhdGFWZXJzaW9uIiwic291cmNlIiwic291cmNlVHlwZSIsInNvdXJjZVZlcnNpb24iLCJzdHJlYW1WZXJzaW9uIiwiZ2V0U2hvcnRDbGFpbUlkRnJvbUxvbmdDbGFpbUlkIiwicmF3IiwiZ2V0TG9uZ0NsYWltSWRGcm9tU2hvcnRDbGFpbUlkIiwiZ2V0VG9wRnJlZUNsYWltSWRCeUNsYWltTmFtZSIsInZhbGlkYXRlTG9uZ0NsYWltSWQiLCJyZXNvbHZlQ2xhaW0iLCJjbGFpbUFycmF5IiwiZGVmYXVsdFZhbHVlIiwidHJlbmRpbmdFbGlnaWJsZSIsImhhc01hbnkiLCJnZXRSZWNlbnRDbGFpbXMiLCJsaW1pdCIsImFjdGlvbiIsImlwQWRkcmVzcyIsImJjcnlwdCIsInByb3RvdHlwZSIsImNvbXBhcmVQYXNzd29yZCIsImNvbXBhcmUiLCJjaGFuZ2VQYXNzd29yZCIsIm5ld1Bhc3N3b3JkIiwiZ2VuU2FsdCIsInNhbHRFcnJvciIsInNhbHQiLCJoYXNoIiwiaGFzaEVycm9yIiwiaG9vayIsInJldHVyblVzZXJBbmRDaGFubmVsSW5mbyIsInVzZXJJbnN0YW5jZSIsImdldENoYW5uZWwiLCJpc01hdGNoIiwibG9nSW4iLCJnZXQiLCJsb2dvdXQiLCJtdWx0aXBhcnQiLCJtdWx0aXBhcnRNaWRkbGV3YXJlIiwidXBsb2FkRGlyIiwiY2xhaW1OYW1lSXNBdmFpbGFibGUiLCJjaGVja0NoYW5uZWxBdmFpbGFiaWxpdHkiLCJlcnJvckhhbmRsZXJzIiwiYXV0aGVudGljYXRlVXNlciIsImF2YWlsYWJsZU5hbWUiLCJib2R5IiwiY2xhaW1zTGlzdCIsInJlc29sdmVSZXN1bHQiLCJmaWxlRGF0YSIsImZpbGVSZWNvcmQiLCJjb21wbGV0ZWQiLCJyZXNvbHZlZFVyaSIsImZpbGVzIiwiY2hhbm5lbFBhc3N3b3JkIiwidmFsaWRhdGVkQ2xhaW1OYW1lIiwidGh1bWJuYWlsUHVibGlzaFBhcmFtcyIsImxicnlUeCIsImNsYWltSW5mbyIsInB1Ymxpc2hIZWxwZXJzIiwiT3AiLCJwdWJsaXNoUmVzdWx0cyIsImNsYWltUmVjb3JkIiwidXBzZXJ0Q3JpdGVyaWEiLCJzZXRDbGFpbSIsInNldEZpbGUiLCJjbGFpbUFkZHJlc3NlcyIsImF0dHJpYnV0ZXMiLCJvciIsImF1dGhlbnRpY2F0ZUNoYW5uZWxDcmVkZW50aWFscyIsInVzZXJQYXNzd29yZCIsImNoYW5uZWxGaW5kUGFyYW1zIiwiQ0xBSU1TX1BFUl9QQUdFIiwiY2xhaW1zIiwidG90YWxQYWdlcyIsImRldGVybWluZVRvdGFsUGFnZXMiLCJwYWdpbmF0aW9uUGFnZSIsImdldFBhZ2VGcm9tUXVlcnkiLCJ2aWV3RGF0YSIsImV4dHJhY3RQYWdlRnJvbUNsYWltcyIsInByZXZpb3VzUGFnZSIsImRldGVybWluZVByZXZpb3VzUGFnZSIsImN1cnJlbnRQYWdlIiwibmV4dFBhZ2UiLCJkZXRlcm1pbmVOZXh0UGFnZSIsInRvdGFsUmVzdWx0cyIsImRldGVybWluZVRvdGFsQ2xhaW1zIiwicGFyc2VJbnQiLCJwYWdlTnVtYmVyIiwiY2xhaW1TdGFydEluZGV4IiwiY2xhaW1FbmRJbmRleCIsInBhZ2VPZkNsYWltcyIsInRvdGFsQ2xhaW1zIiwiZnVsbFBhZ2VzIiwiTWF0aCIsImZsb29yIiwicmVtYWluZGVyIiwiaGFuZGxlUGFnZVJlbmRlciIsInJlbmRlciIsImxheW91dCIsImluaXRpYWxTdGF0ZSIsImFzc2lnbiIsInB1Ymxpc2hJbkNoYW5uZWwiLCJzZWxlY3RlZENoYW5uZWwiLCJwdWJsaXNoU3VibWl0IiwiY2hhbm5lbExpc3QiLCJzaXRlQ29uZmlnIiwiZ29vZ2xlQW5hbHl0aWNzSWQiLCJIb21lUGFnZSIsIlNFTyIsInBhZ2VVcmkiLCJwYWdlVGl0bGUiLCJtZXRhVGFncyIsImNhbm9uaWNhbExpbmsiLCJyZWwiLCJocmVmIiwib2JqZWN0IiwiY3JlYXRlUGFnZVRpdGxlIiwiZGV0ZXJtaW5lT2dUaHVtYm5haWxDb250ZW50VHlwZSIsImZpbGVFeHQiLCJsYXN0SW5kZXhPZiIsImNyZWF0ZUJhc2ljTWV0YVRhZ3MiLCJwcm9wZXJ0eSIsImNvbnRlbnQiLCJjcmVhdGVDaGFubmVsTWV0YVRhZ3MiLCJjcmVhdGVBc3NldE1ldGFUYWdzIiwiZW1iZWRVcmwiLCJzaG93VXJsIiwib2dUaXRsZSIsIm9nRGVzY3JpcHRpb24iLCJvZ1RodW1ibmFpbENvbnRlbnRUeXBlIiwib2dUaHVtYm5haWwiLCJjcmVhdGVNZXRhVGFncyIsImNyZWF0ZUJhc2ljQ2Fub25pY2FsTGluayIsImNyZWF0ZUFzc2V0Q2Fub25pY2FsTGluayIsImNyZWF0ZUNoYW5uZWxDYW5vbmljYWxMaW5rIiwiY3JlYXRlQ2Fub25pY2FsTGluayIsIlZJRVciLCJMT0dPVVQiLCJOYXZCYXIiLCJjaGVja0ZvckxvZ2dlZEluVXNlciIsImxvZ291dFVzZXIiLCJoYW5kbGVTZWxlY3Rpb24iLCJjcmVkZW50aWFscyIsInRhcmdldCIsInNlbGVjdGVkT3B0aW9ucyIsIkxvZ28iLCJOYXZCYXJDaGFubmVsRHJvcGRvd24iLCJkZWZhdWx0U2VsZWN0aW9uIiwiUHVibGlzaFRvb2wiLCJEcm9wem9uZSIsImRyYWdPdmVyIiwibW91c2VPdmVyIiwiZGltUHJldmlldyIsImhhbmRsZURyb3AiLCJoYW5kbGVEcmFnT3ZlciIsImhhbmRsZURyYWdFbmQiLCJoYW5kbGVEcmFnRW50ZXIiLCJoYW5kbGVEcmFnTGVhdmUiLCJoYW5kbGVNb3VzZUVudGVyIiwiaGFuZGxlTW91c2VMZWF2ZSIsImhhbmRsZUNsaWNrIiwiaGFuZGxlRmlsZUlucHV0IiwiY2hvb3NlRmlsZSIsInByZXZlbnREZWZhdWx0IiwiZHQiLCJkYXRhVHJhbnNmZXIiLCJpdGVtcyIsImtpbmQiLCJkcm9wcGVkRmlsZSIsImdldEFzRmlsZSIsInJlbW92ZSIsImNsZWFyRGF0YSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJjbGljayIsImZpbGVMaXN0IiwidmFsaWRhdGVGaWxlIiwiUHVibGlzaFByZXZpZXciLCJpbWdTb3VyY2UiLCJzZXRQcmV2aWV3SW1hZ2VTb3VyY2UiLCJuZXdQcm9wcyIsInNldFByZXZpZXdJbWFnZVNvdXJjZUZyb21GaWxlIiwicHJldmlld1JlYWRlciIsIkZpbGVSZWFkZXIiLCJyZWFkQXNEYXRhVVJMIiwib25sb2FkZW5kIiwiYm9vbCIsIlB1Ymxpc2hEZXRhaWxzIiwib25QdWJsaXNoU3VibWl0Iiwib25NZXRhZGF0YUNoYW5nZSIsIlB1Ymxpc2hUaXRsZUlucHV0IiwiaGFuZGxlSW5wdXQiLCJlIiwibG9nZ2VkSW5DaGFubmVsTmFtZSIsImxvZ2dlZEluQ2hhbm5lbFNob3J0SWQiLCJ1cmxFcnJvciIsIm9uQ2xhaW1DaGFuZ2UiLCJvblVybEVycm9yIiwiUHVibGlzaFVybElucHV0Iiwic2V0Q2xhaW1OYW1lIiwidmFsaWRhdGVDbGFpbSIsImNsZWFuc2VJbnB1dCIsImlucHV0IiwiZmlsZU5hbWVXaXRob3V0RW5kaW5nIiwiY2xlYW5DbGFpbU5hbWUiLCJVcmxNaWRkbGUiLCJkYXRhVVJJdG9CbG9iIiwiZGF0YVVSSSIsImJ5dGVTdHJpbmciLCJhdG9iIiwic3BsaXQiLCJtaW1lU3RyaW5nIiwiaWEiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIkJsb2IiLCJQdWJsaXNoVGh1bWJuYWlsSW5wdXQiLCJ2aWRlb1NvdXJjZSIsInNsaWRlck1pblJhbmdlIiwic2xpZGVyTWF4UmFuZ2UiLCJzbGlkZXJWYWx1ZSIsImhhbmRsZVZpZGVvTG9hZGVkRGF0YSIsImhhbmRsZVNsaWRlckNoYW5nZSIsImNyZWF0ZVRodW1ibmFpbCIsInNldFZpZGVvU291cmNlIiwibmV4dFByb3BzIiwiZGF0YVVyaSIsImJsb2IiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJ0b3RhbE1pbnV0ZXMiLCJ0b3RhbFNlY29uZHMiLCJ2aWRlbyIsImN1cnJlbnRUaW1lIiwiY2FudmFzIiwiY3JlYXRlRWxlbWVudCIsIndpZHRoIiwidmlkZW9XaWR0aCIsInZpZGVvSGVpZ2h0IiwiZ2V0Q29udGV4dCIsImRyYXdJbWFnZSIsImRhdGFVcmwiLCJ0b0RhdGFVUkwiLCJzbmFwc2hvdCIsImRpc3BsYXkiLCJvblRvZ2dsZU1ldGFkYXRhSW5wdXRzIiwiUHVibGlzaE1ldGFkYXRhSW5wdXRzIiwidG9nZ2xlU2hvd0lucHV0cyIsImhhbmRsZVNlbGVjdCIsImNoZWNrZWQiLCJzZWxlY3RlZE9wdGlvbiIsIm1heEhlaWdodCIsIkV4cGFuZGluZ1RleHRhcmVhIiwiX2hhbmRsZUNoYW5nZSIsImFkanVzdFRleHRhcmVhIiwib25DaGFuZ2UiLCJlbCIsInN0eWxlIiwic2Nyb2xsSGVpZ2h0IiwicmVzdCIsIngiLCJmdW5jIiwiY2hhbm5lbEVycm9yIiwib25QdWJsaXNoSW5DaGFubmVsQ2hhbmdlIiwib25DaGFubmVsU2VsZWN0Iiwic3RhdGVzIiwiQ2hhbm5lbFNlbGVjdCIsInRvZ2dsZUFub255bW91c1B1Ymxpc2giLCJDaGFubmVsTG9naW5Gb3JtIiwibG9naW5Ub0NoYW5uZWwiLCJIZWFkZXJzIiwiQ2hhbm5lbENyZWF0ZUZvcm0iLCJoYW5kbGVDaGFubmVsSW5wdXQiLCJjbGVhbnNlQ2hhbm5lbElucHV0IiwidXBkYXRlSXNDaGFubmVsQXZhaWxhYmxlIiwiY2hhbm5lbFdpdGhBdFN5bWJvbCIsImNoZWNrSXNQYXNzd29yZFByb3ZpZGVkIiwiY2hlY2tJc0NoYW5uZWxBdmFpbGFibGUiLCJtYWtlUHVibGlzaENoYW5uZWxSZXF1ZXN0IiwiQWN0aXZlU3RhdHVzQmFyIiwiSW5hY3RpdmVTdGF0dXNCYXIiLCJwdWJsaXNoU3RhdGVzIiwiUHVibGlzaFN0YXR1cyIsIkxPQURfU1RBUlQiLCJMT0FESU5HIiwiUFVCTElTSElORyIsIlNVQ0NFU1MiLCJGQUlMRUQiLCJQdWJsaXNoRGlzYWJsZWRNZXNzYWdlIiwiQWJvdXRQYWdlIiwiTG9naW5QYWdlIiwiU2hvd1BhZ2UiLCJtYXRjaCIsIlNob3dMaXRlIiwiQXNzZXREaXNwbGF5IiwiU2hvd0Fzc2V0RGV0YWlscyIsIkFzc2V0VGl0bGUiLCJBc3NldEluZm8iLCJjb3B5VG9DbGlwYm9hcmQiLCJlbGVtZW50VG9Db3B5IiwiZGF0YXNldCIsImVsZW1lbnR0b2NvcHkiLCJzZWxlY3QiLCJleGVjQ29tbWFuZCIsInByZXZpb3VzUmVxdWVzdCIsIlNob3dDaGFubmVsIiwiQ2hhbm5lbENsYWltc0Rpc3BsYXkiLCJzaG93TmV4dFJlc3VsdHNQYWdlIiwic2hvd1ByZXZpb3VzUmVzdWx0c1BhZ2UiLCJzaG93TmV3UGFnZSIsImRlZmF1bHRzIiwiQXNzZXRQcmV2aWV3IiwiZGlyZWN0U291cmNlTGluayIsInNob3dVcmxMaW5rIiwiRm91ck9oRm9yUGFnZSIsImRldGVybWluZVJlc3BvbnNlVHlwZSIsImZsaXBDbGFpbU5hbWVBbmRJZEZvckJhY2t3YXJkc0NvbXBhdGliaWxpdHkiLCJsb2dSZXF1ZXN0RGF0YSIsImdldENsYWltSWRBbmRTZXJ2ZUFzc2V0IiwibGJyeVVyaSIsImhhbmRsZVNob3dSZW5kZXIiLCJTRVJWRSIsImhhc0ZpbGVFeHRlbnNpb24iLCJwYXJzZU1vZGlmaWVyIiwicmVzcG9uc2VUeXBlIiwicGFyc2VDbGFpbSIsImlzQ2hhbm5lbCIsInBhcnNlSWRlbnRpZmllciIsImlkZW50aWZpZXIiLCJTSE9XIiwiY2xpZW50QWNjZXB0c0h0bWwiLCJhY2NlcHQiLCJyZXF1ZXN0SXNGcm9tQnJvd3NlciIsImNsaWVudFdhbnRzQXNzZXQiLCJyYW5nZSIsImltYWdlSXNXYW50ZWQiLCJ2aWRlb0lzV2FudGVkIiwiaXNWYWxpZENsYWltSWQiLCJpc1ZhbGlkU2hvcnRJZCIsImlzVmFsaWRTaG9ydElkT3JDbGFpbUlkIiwic2VydmVBc3NldFRvQ2xpZW50Iiwic2VuZEZpbGVPcHRpb25zIiwic2VuZEZpbGUiLCJmdWxsQ2xhaW1JZCIsInRlbXBOYW1lIiwiUkVHRVhQX0lOVkFMSURfQ0xBSU0iLCJSRUdFWFBfSU5WQUxJRF9DSEFOTkVMIiwiUkVHRVhQX0FERFJFU1MiLCJDSEFOTkVMX0NIQVIiLCJjb21wb25lbnRzUmVnZXgiLCJSZWdFeHAiLCJwcm90byIsIm1vZGlmaWVyU2VwZXJhdG9yIiwic3RhcnRzV2l0aCIsIm5hbWVCYWRDaGFycyIsImpvaW4iLCJyZXR1cm5TYWdhV2l0aFBhcmFtcyIsInNhZ2EiLCJzYWdhTWlkZGxld2FyZSIsIm1pZGRsZXdhcmUiLCJydW4iLCJoYW5kbGVTaG93UGFnZVVyaSIsIndhdGNoSGFuZGxlU2hvd1BhZ2VVcmkiLCJwYXJzZUFuZFVwZGF0ZUlkZW50aWZpZXJBbmRDbGFpbSIsInBhcnNlQW5kVXBkYXRlQ2xhaW1Pbmx5IiwibmV3QXNzZXRSZXF1ZXN0Iiwid2F0Y2hOZXdBc3NldFJlcXVlc3QiLCJnZXRTaG9ydElkIiwiZ2V0Q2xhaW1EYXRhIiwibmV3Q2hhbm5lbFJlcXVlc3QiLCJ3YXRjaE5ld0NoYW5uZWxSZXF1ZXN0Iiwid2F0Y2hVcGRhdGVDaGFubmVsQ2xhaW1zIiwiZ2V0TmV3Q2xhaW1zQW5kVXBkYXRlQ2hhbm5lbCIsImV4dGVuc2lvblNlcGVyYXRvciJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7OztBQzdEQSxrQzs7Ozs7O0FDQUEsd0M7Ozs7OztBQ0FBLG9DOzs7Ozs7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QUQsRUFBTS9CLEdBQU4sRUFBYztBQUN6QjtBQUNBOFIscUJBQWlCL1AsR0FBakIsRUFBc0IvQixHQUF0QjtBQUNELEdBSEQ7QUFJRCxDQU5ELEMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNDUpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGZkYmJiYjI3MDM0NDk4Y2QyMDQ3IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJyZWFjdFwiXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXJlZHV4XCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwicmVhY3QtcmVkdXhcIlxuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ3aW5zdG9uXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwid2luc3RvblwiXG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXJvdXRlci1kb21cIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJyZWFjdC1yb3V0ZXItZG9tXCJcbi8vIG1vZHVsZSBpZCA9IDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICogYXMgYWN0aW9ucyBmcm9tICdjb25zdGFudHMvcHVibGlzaF9hY3Rpb25fdHlwZXMnO1xuXG4vLyBleHBvcnQgYWN0aW9uIGNyZWF0b3JzXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0RmlsZSAoZmlsZSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuRklMRV9TRUxFQ1RFRCxcbiAgICBkYXRhOiBmaWxlLFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRmlsZSAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYWN0aW9ucy5GSUxFX0NMRUFSLFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZU1ldGFkYXRhIChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuTUVUQURBVEFfVVBEQVRFLFxuICAgIGRhdGE6IHtcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICB9LFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUNsYWltICh2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuQ0xBSU1fVVBEQVRFLFxuICAgIGRhdGE6IHZhbHVlLFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldFB1Ymxpc2hJbkNoYW5uZWwgKGNoYW5uZWwpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLlNFVF9QVUJMSVNIX0lOX0NIQU5ORUwsXG4gICAgY2hhbm5lbCxcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVQdWJsaXNoU3RhdHVzIChzdGF0dXMsIG1lc3NhZ2UpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLlBVQkxJU0hfU1RBVFVTX1VQREFURSxcbiAgICBkYXRhOiB7XG4gICAgICBzdGF0dXMsXG4gICAgICBtZXNzYWdlLFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRXJyb3IgKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYWN0aW9ucy5FUlJPUl9VUERBVEUsXG4gICAgZGF0YToge1xuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU2VsZWN0ZWRDaGFubmVsIChjaGFubmVsTmFtZSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuU0VMRUNURURfQ0hBTk5FTF9VUERBVEUsXG4gICAgZGF0YTogY2hhbm5lbE5hbWUsXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlTWV0YWRhdGFJbnB1dHMgKHNob3dNZXRhZGF0YUlucHV0cykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuVE9HR0xFX01FVEFEQVRBX0lOUFVUUyxcbiAgICBkYXRhOiBzaG93TWV0YWRhdGFJbnB1dHMsXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb25OZXdUaHVtYm5haWwgKGZpbGUpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLlRIVU1CTkFJTF9ORVcsXG4gICAgZGF0YTogZmlsZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFB1Ymxpc2ggKGhpc3RvcnkpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLlBVQkxJU0hfU1RBUlQsXG4gICAgZGF0YTogeyBoaXN0b3J5IH0sXG4gIH07XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvYWN0aW9ucy9wdWJsaXNoLmpzIiwiZnVuY3Rpb24gU2l0ZUNvbmZpZyAoKSB7XG4gIHRoaXMuYW5hbHl0aWNzID0ge1xuICAgIGdvb2dsZUlkOiAnZGVmYXVsdCcsXG4gIH07XG4gIHRoaXMuYXNzZXREZWZhdWx0cyA9IHtcbiAgICBkZXNjcmlwdGlvbjogJ0FuIGFzc2V0IHB1Ymxpc2hlZCBvbiBTcGVlLmNoJyxcbiAgICB0aHVtYm5haWwgIDogJ2h0dHBzOi8vc3BlZS5jaC9hc3NldHMvaW1nL3ZpZGVvX3RodW1iX2RlZmF1bHQucG5nJyxcbiAgICB0aXRsZSAgICAgIDogJ1NwZWUuY2gnLFxuICB9O1xuICB0aGlzLmF1dGggPSB7XG4gICAgc2Vzc2lvbktleTogJ2RlZmF1bHQnLFxuICB9O1xuICB0aGlzLmRldGFpbHMgPSB7XG4gICAgZGVzY3JpcHRpb246ICdPcGVuLXNvdXJjZSwgZGVjZW50cmFsaXplZCBpbWFnZSBhbmQgdmlkZW8gc2hhcmluZy4nLFxuICAgIGhvc3QgICAgICAgOiAnZGVmYXVsdCcsXG4gICAgcG9ydCAgICAgICA6IDMwMDAsXG4gICAgdGl0bGUgICAgICA6ICdTcGVlLmNoJyxcbiAgICB0d2l0dGVyICAgIDogJ0BzcGVlX2NoJyxcbiAgfTtcbiAgdGhpcy5wdWJsaXNoaW5nID0ge1xuICAgIGFkZGl0aW9uYWxDbGFpbUFkZHJlc3NlczogW10sXG4gICAgZGlzYWJsZWQgICAgICAgICAgICAgICAgOiBmYWxzZSxcbiAgICBkaXNhYmxlZE1lc3NhZ2UgICAgICAgICA6ICdQbGVhc2UgY2hlY2sgYmFjayBzb29uLicsXG4gICAgcHJpbWFyeUNsYWltQWRkcmVzcyAgICAgOiAnZGVmYXVsdCcsXG4gICAgdGh1bWJuYWlsQ2hhbm5lbCAgICAgICAgOiAnZGVmYXVsdCcsXG4gICAgdGh1bWJuYWlsQ2hhbm5lbElkICAgICAgOiAnZGVmYXVsdCcsXG4gICAgdXBsb2FkRGlyZWN0b3J5ICAgICAgICAgOiAnL2hvbWUvbGJyeS9VcGxvYWRzJyxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFNpdGVDb25maWcoKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NvbmZpZy9zaXRlQ29uZmlnLmpzIiwiY29uc3QgU2VxdWVsaXplID0gcmVxdWlyZSgnc2VxdWVsaXplJyk7XG5jb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5cbmNvbnNvbGUubG9nKCdleHBvcnRpbmcgc2VxdWVsaXplIG1vZGVscycpO1xuY29uc3QgeyBkYXRhYmFzZSwgdXNlcm5hbWUsIHBhc3N3b3JkIH0gPSByZXF1aXJlKCcuLi8uLi9jb25maWcvbXlzcWxDb25maWcnKTtcbmNvbnN0IGRiID0ge307XG4vLyBzZXQgc2VxdWVsaXplIG9wdGlvbnNcbmNvbnN0IHNlcXVlbGl6ZSA9IG5ldyBTZXF1ZWxpemUoZGF0YWJhc2UsIHVzZXJuYW1lLCBwYXNzd29yZCwge1xuICBob3N0ICAgICAgICAgIDogJ2xvY2FsaG9zdCcsXG4gIGRpYWxlY3QgICAgICAgOiAnbXlzcWwnLFxuICBkaWFsZWN0T3B0aW9uczoge2RlY2ltYWxOdW1iZXJzOiB0cnVlfSwgLy8gZml4IHRvIGVuc3VyZSBERUNJTUFMIHdpbGwgbm90IGJlIHN0b3JlZCBhcyBhIHN0cmluZ1xuICBsb2dnaW5nICAgICAgIDogZmFsc2UsXG4gIHBvb2wgICAgICAgICAgOiB7XG4gICAgbWF4ICAgIDogNSxcbiAgICBtaW4gICAgOiAwLFxuICAgIGlkbGUgICA6IDEwMDAwLFxuICAgIGFjcXVpcmU6IDEwMDAwLFxuICB9LFxufSk7XG5cbi8vIGVzdGFibGlzaCBteXNxbCBjb25uZWN0aW9uXG5zZXF1ZWxpemVcbiAgLmF1dGhlbnRpY2F0ZSgpXG4gIC50aGVuKCgpID0+IHtcbiAgICBsb2dnZXIuaW5mbygnU2VxdWVsaXplIGhhcyBlc3RhYmxpc2hlZCBteXNxbCBjb25uZWN0aW9uIHN1Y2Nlc3NmdWxseS4nKTtcbiAgfSlcbiAgLmNhdGNoKGVyciA9PiB7XG4gICAgbG9nZ2VyLmVycm9yKCdTZXF1ZWxpemUgd2FzIHVuYWJsZSB0byBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZTonLCBlcnIpO1xuICB9KTtcblxuLy8gbWFudWFsbHkgYWRkIGVhY2ggbW9kZWwgdG8gdGhlIGRiIG9iamVjdFxuY29uc3QgQ2VydGlmaWNhdGUgPSByZXF1aXJlKCcuL2NlcnRpZmljYXRlLmpzJyk7XG5jb25zdCBDaGFubmVsID0gcmVxdWlyZSgnLi9jaGFubmVsLmpzJyk7XG5jb25zdCBDbGFpbSA9IHJlcXVpcmUoJy4vY2xhaW0uanMnKTtcbmNvbnN0IEZpbGUgPSByZXF1aXJlKCcuL2ZpbGUuanMnKTtcbmNvbnN0IFJlcXVlc3QgPSByZXF1aXJlKCcuL3JlcXVlc3QuanMnKTtcbmNvbnN0IFVzZXIgPSByZXF1aXJlKCcuL3VzZXIuanMnKTtcbmRiWydDZXJ0aWZpY2F0ZSddID0gc2VxdWVsaXplLmltcG9ydCgnQ2VydGlmaWNhdGUnLCBDZXJ0aWZpY2F0ZSk7XG5kYlsnQ2hhbm5lbCddID0gc2VxdWVsaXplLmltcG9ydCgnQ2hhbm5lbCcsIENoYW5uZWwpO1xuZGJbJ0NsYWltJ10gPSBzZXF1ZWxpemUuaW1wb3J0KCdDbGFpbScsIENsYWltKTtcbmRiWydGaWxlJ10gPSBzZXF1ZWxpemUuaW1wb3J0KCdGaWxlJywgRmlsZSk7XG5kYlsnUmVxdWVzdCddID0gc2VxdWVsaXplLmltcG9ydCgnUmVxdWVzdCcsIFJlcXVlc3QpO1xuZGJbJ1VzZXInXSA9IHNlcXVlbGl6ZS5pbXBvcnQoJ1VzZXInLCBVc2VyKTtcblxuLy8gcnVuIG1vZGVsLmFzc29jaWF0aW9uIGZvciBlYWNoIG1vZGVsIGluIHRoZSBkYiBvYmplY3QgdGhhdCBoYXMgYW4gYXNzb2NpYXRpb25cbk9iamVjdC5rZXlzKGRiKS5mb3JFYWNoKG1vZGVsTmFtZSA9PiB7XG4gIGlmIChkYlttb2RlbE5hbWVdLmFzc29jaWF0ZSkge1xuICAgIGxvZ2dlci5pbmZvKCdBc3NvY2lhdGluZyBtb2RlbDonLCBtb2RlbE5hbWUpO1xuICAgIGRiW21vZGVsTmFtZV0uYXNzb2NpYXRlKGRiKTtcbiAgfVxufSk7XG5cbmRiLnNlcXVlbGl6ZSA9IHNlcXVlbGl6ZTtcbmRiLlNlcXVlbGl6ZSA9IFNlcXVlbGl6ZTtcblxuLy8gYWRkIGFuICd1cHNlcnQnIG1ldGhvZCB0byB0aGUgZGIgb2JqZWN0XG5kYi51cHNlcnQgPSAoTW9kZWwsIHZhbHVlcywgY29uZGl0aW9uLCB0YWJsZU5hbWUpID0+IHtcbiAgcmV0dXJuIE1vZGVsXG4gICAgLmZpbmRPbmUoe1xuICAgICAgd2hlcmU6IGNvbmRpdGlvbixcbiAgICB9KVxuICAgIC50aGVuKG9iaiA9PiB7XG4gICAgICBpZiAob2JqKSB7ICAvLyB1cGRhdGVcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGB1cGRhdGluZyByZWNvcmQgaW4gZGIuJHt0YWJsZU5hbWV9YCk7XG4gICAgICAgIHJldHVybiBvYmoudXBkYXRlKHZhbHVlcyk7XG4gICAgICB9IGVsc2UgeyAgLy8gaW5zZXJ0XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgY3JlYXRpbmcgcmVjb3JkIGluIGRiLiR7dGFibGVOYW1lfWApO1xuICAgICAgICByZXR1cm4gTW9kZWwuY3JlYXRlKHZhbHVlcyk7XG4gICAgICB9XG4gICAgfSlcbiAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYCR7dGFibGVOYW1lfS51cHNlcnQgZXJyb3JgLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZGI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2ZXIvbW9kZWxzL2luZGV4LmpzIiwiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHVwZGF0ZUxvZ2dlZEluQ2hhbm5lbCB9IGZyb20gJ2FjdGlvbnMvY2hhbm5lbCc7XG5pbXBvcnQge3VwZGF0ZVNlbGVjdGVkQ2hhbm5lbH0gZnJvbSAnYWN0aW9ucy9wdWJsaXNoJztcbmltcG9ydCBWaWV3IGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9ICh7IGNoYW5uZWwsIHNpdGUgfSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGNoYW5uZWxOYW1lICAgOiBjaGFubmVsLmxvZ2dlZEluQ2hhbm5lbC5uYW1lLFxuICAgIGNoYW5uZWxTaG9ydElkOiBjaGFubmVsLmxvZ2dlZEluQ2hhbm5lbC5zaG9ydElkLFxuICAgIGNoYW5uZWxMb25nSWQgOiBjaGFubmVsLmxvZ2dlZEluQ2hhbm5lbC5sb25nSWQsXG4gICAgc2l0ZURlc2NyaXB0aW9uOiBzaXRlLmRlc2NyaXB0aW9uLFxuICB9O1xufTtcblxuY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gZGlzcGF0Y2ggPT4ge1xuICByZXR1cm4ge1xuICAgIG9uQ2hhbm5lbExvZ2luOiAobmFtZSwgc2hvcnRJZCwgbG9uZ0lkKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVMb2dnZWRJbkNoYW5uZWwobmFtZSwgc2hvcnRJZCwgbG9uZ0lkKSk7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVTZWxlY3RlZENoYW5uZWwobmFtZSkpO1xuICAgIH0sXG4gICAgb25DaGFubmVsTG9nb3V0OiAoKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVMb2dnZWRJbkNoYW5uZWwobnVsbCwgbnVsbCwgbnVsbCkpO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL05hdkJhci9pbmRleC5qcyIsImltcG9ydCAqIGFzIGFjdGlvbnMgZnJvbSAnY29uc3RhbnRzL3Nob3dfYWN0aW9uX3R5cGVzJztcblxuaW1wb3J0IHsgQ0hBTk5FTCwgQVNTRVRfTElURSwgQVNTRVRfREVUQUlMUyB9IGZyb20gJ2NvbnN0YW50cy9zaG93X3JlcXVlc3RfdHlwZXMnO1xuXG4vLyBiYXNpYyByZXF1ZXN0IHBhcnNpbmdcbmV4cG9ydCBmdW5jdGlvbiBvbkhhbmRsZVNob3dQYWdlVXJpIChwYXJhbXMpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLkhBTkRMRV9TSE9XX1VSSSxcbiAgICBkYXRhOiBwYXJhbXMsXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb25SZXF1ZXN0RXJyb3IgKGVycm9yKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYWN0aW9ucy5SRVFVRVNUX0VSUk9SLFxuICAgIGRhdGE6IGVycm9yLFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG9uTmV3Q2hhbm5lbFJlcXVlc3QgKGNoYW5uZWxOYW1lLCBjaGFubmVsSWQpIHtcbiAgY29uc3QgcmVxdWVzdFR5cGUgPSBDSEFOTkVMO1xuICBjb25zdCByZXF1ZXN0SWQgPSBgY3IjJHtjaGFubmVsTmFtZX0jJHtjaGFubmVsSWR9YDtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLkNIQU5ORUxfUkVRVUVTVF9ORVcsXG4gICAgZGF0YTogeyByZXF1ZXN0VHlwZSwgcmVxdWVzdElkLCBjaGFubmVsTmFtZSwgY2hhbm5lbElkIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb25OZXdBc3NldFJlcXVlc3QgKG5hbWUsIGlkLCBjaGFubmVsTmFtZSwgY2hhbm5lbElkLCBleHRlbnNpb24pIHtcbiAgY29uc3QgcmVxdWVzdFR5cGUgPSBleHRlbnNpb24gPyBBU1NFVF9MSVRFIDogQVNTRVRfREVUQUlMUztcbiAgY29uc3QgcmVxdWVzdElkID0gYGFyIyR7bmFtZX0jJHtpZH0jJHtjaGFubmVsTmFtZX0jJHtjaGFubmVsSWR9YDtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLkFTU0VUX1JFUVVFU1RfTkVXLFxuICAgIGRhdGE6IHtcbiAgICAgIHJlcXVlc3RUeXBlLFxuICAgICAgcmVxdWVzdElkLFxuICAgICAgbmFtZSxcbiAgICAgIG1vZGlmaWVyOiB7XG4gICAgICAgIGlkLFxuICAgICAgICBjaGFubmVsOiB7XG4gICAgICAgICAgbmFtZTogY2hhbm5lbE5hbWUsXG4gICAgICAgICAgaWQgIDogY2hhbm5lbElkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG9uUmVxdWVzdFVwZGF0ZSAocmVxdWVzdFR5cGUsIHJlcXVlc3RJZCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuUkVRVUVTVF9VUERBVEUsXG4gICAgZGF0YToge1xuICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICByZXF1ZXN0SWQsXG4gICAgfSxcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRSZXF1ZXN0VG9SZXF1ZXN0TGlzdCAoaWQsIGVycm9yLCBrZXkpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLlJFUVVFU1RfTElTVF9BREQsXG4gICAgZGF0YTogeyBpZCwgZXJyb3IsIGtleSB9LFxuICB9O1xufTtcblxuLy8gYXNzZXQgYWN0aW9uc1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkQXNzZXRUb0Fzc2V0TGlzdCAoaWQsIGVycm9yLCBuYW1lLCBjbGFpbUlkLCBzaG9ydElkLCBjbGFpbURhdGEpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLkFTU0VUX0FERCxcbiAgICBkYXRhOiB7IGlkLCBlcnJvciwgbmFtZSwgY2xhaW1JZCwgc2hvcnRJZCwgY2xhaW1EYXRhIH0sXG4gIH07XG59XG5cbi8vIGNoYW5uZWwgYWN0aW9uc1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkTmV3Q2hhbm5lbFRvQ2hhbm5lbExpc3QgKGlkLCBuYW1lLCBzaG9ydElkLCBsb25nSWQsIGNsYWltc0RhdGEpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLkNIQU5ORUxfQURELFxuICAgIGRhdGE6IHsgaWQsIG5hbWUsIHNob3J0SWQsIGxvbmdJZCwgY2xhaW1zRGF0YSB9LFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG9uVXBkYXRlQ2hhbm5lbENsYWltcyAoY2hhbm5lbEtleSwgbmFtZSwgbG9uZ0lkLCBwYWdlKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYWN0aW9ucy5DSEFOTkVMX0NMQUlNU19VUERBVEVfQVNZTkMsXG4gICAgZGF0YToge2NoYW5uZWxLZXksIG5hbWUsIGxvbmdJZCwgcGFnZX0sXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQ2hhbm5lbENsYWltcyAoY2hhbm5lbExpc3RJZCwgY2xhaW1zRGF0YSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuQ0hBTk5FTF9DTEFJTVNfVVBEQVRFX1NVQ0NFU1MsXG4gICAgZGF0YToge2NoYW5uZWxMaXN0SWQsIGNsYWltc0RhdGF9LFxuICB9O1xufTtcblxuLy8gZGlzcGxheSBhIGZpbGVcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVSZXF1ZXN0ZWQgKG5hbWUsIGNsYWltSWQpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLkZJTEVfUkVRVUVTVEVELFxuICAgIGRhdGE6IHsgbmFtZSwgY2xhaW1JZCB9LFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVBdmFpbGFiaWxpdHkgKHN0YXR1cykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuRklMRV9BVkFJTEFCSUxJVFlfVVBEQVRFLFxuICAgIGRhdGE6IHN0YXR1cyxcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5QXNzZXRFcnJvciAoZXJyb3IpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLkRJU1BMQVlfQVNTRVRfRVJST1IsXG4gICAgZGF0YTogZXJyb3IsXG4gIH07XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2FjdGlvbnMvc2hvdy5qcyIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBzaXRlIH0pID0+IHtcbiAgY29uc3QgeyBkZWZhdWx0RGVzY3JpcHRpb24sIGRlZmF1bHRUaHVtYm5haWwsIGRlc2NyaXB0aW9uOiBzaXRlRGVzY3JpcHRpb24sIGhvc3Q6IHNpdGVIb3N0LCB0aXRsZTogc2l0ZVRpdGxlLCB0d2l0dGVyOiBzaXRlVHdpdHRlciB9ID0gc2l0ZTtcbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0RGVzY3JpcHRpb24sXG4gICAgZGVmYXVsdFRodW1ibmFpbCxcbiAgICBzaXRlRGVzY3JpcHRpb24sXG4gICAgc2l0ZUhvc3QsXG4gICAgc2l0ZVRpdGxlLFxuICAgIHNpdGVUd2l0dGVyLFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG51bGwpKFZpZXcpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbXBvbmVudHMvU0VPL2luZGV4LmpzIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInByb3AtdHlwZXNcIlxuLy8gbW9kdWxlIGlkID0gMTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICdjcm9zcy1mZXRjaC9wb2x5ZmlsbCc7XG5cbi8qKlxuICogUGFyc2VzIHRoZSBKU09OIHJldHVybmVkIGJ5IGEgbmV0d29yayByZXF1ZXN0XG4gKlxuICogQHBhcmFtICB7b2JqZWN0fSByZXNwb25zZSBBIHJlc3BvbnNlIGZyb20gYSBuZXR3b3JrIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJuIHtvYmplY3R9ICAgICAgICAgIFRoZSBwYXJzZWQgSlNPTiBmcm9tIHRoZSByZXF1ZXN0XG4gKi9cbmZ1bmN0aW9uIHBhcnNlSlNPTiAocmVzcG9uc2UpIHtcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0IHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA1KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIHN0YXR1cyByZXR1cm5lZCBieSBhIG5ldHdvcmsgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSAge29iamVjdH0gcmVzcG9uc2UgICBBIHJlc3BvbnNlIGZyb20gYSBuZXR3b3JrIHJlcXVlc3RcbiAqIEBwYXJhbSAge29iamVjdH0gcmVzcG9uc2UgICBUaGUgcGFyc2VkIEpTT04gZnJvbSB0aGUgbmV0d29yayByZXF1ZXN0XG4gKlxuICogQHJldHVybiB7b2JqZWN0IHwgdW5kZWZpbmVkfSBSZXR1cm5zIG9iamVjdCB3aXRoIHN0YXR1cyBhbmQgc3RhdHVzVGV4dCwgb3IgdW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGNoZWNrU3RhdHVzIChyZXNwb25zZSwganNvblJlc3BvbnNlKSB7XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMCkge1xuICAgIHJldHVybiBqc29uUmVzcG9uc2U7XG4gIH1cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoanNvblJlc3BvbnNlLm1lc3NhZ2UpO1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICB0aHJvdyBlcnJvcjtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0cyBhIFVSTCwgcmV0dXJuaW5nIGEgcHJvbWlzZVxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gdXJsICAgICAgIFRoZSBVUkwgd2Ugd2FudCB0byByZXF1ZXN0XG4gKiBAcGFyYW0gIHtvYmplY3R9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyB3ZSB3YW50IHRvIHBhc3MgdG8gXCJmZXRjaFwiXG4gKlxuICogQHJldHVybiB7b2JqZWN0fSAgICAgICAgICAgVGhlIHJlc3BvbnNlIGRhdGFcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXF1ZXN0ICh1cmwsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZldGNoKHVybCwgb3B0aW9ucylcbiAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3Jlc3BvbnNlLCBwYXJzZUpTT04ocmVzcG9uc2UpXSk7XG4gICAgfSlcbiAgICAudGhlbigoW3Jlc3BvbnNlLCBqc29uUmVzcG9uc2VdKSA9PiB7XG4gICAgICByZXR1cm4gY2hlY2tTdGF0dXMocmVzcG9uc2UsIGpzb25SZXNwb25zZSk7XG4gICAgfSk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvdXRpbHMvcmVxdWVzdC5qcyIsIi8vIHJlcXVlc3QgYWN0aW9uc1xuZXhwb3J0IGNvbnN0IEhBTkRMRV9TSE9XX1VSSSA9ICdIQU5ETEVfU0hPV19VUkknO1xuZXhwb3J0IGNvbnN0IFJFUVVFU1RfRVJST1IgPSAnUkVRVUVTVF9FUlJPUic7XG5leHBvcnQgY29uc3QgUkVRVUVTVF9VUERBVEUgPSAnUkVRVUVTVF9VUERBVEUnO1xuZXhwb3J0IGNvbnN0IEFTU0VUX1JFUVVFU1RfTkVXID0gJ0FTU0VUX1JFUVVFU1RfTkVXJztcbmV4cG9ydCBjb25zdCBDSEFOTkVMX1JFUVVFU1RfTkVXID0gJ0NIQU5ORUxfUkVRVUVTVF9ORVcnO1xuZXhwb3J0IGNvbnN0IFJFUVVFU1RfTElTVF9BREQgPSAnUkVRVUVTVF9MSVNUX0FERCc7XG5cbi8vIGFzc2V0IGFjdGlvbnNcbmV4cG9ydCBjb25zdCBBU1NFVF9BREQgPSBgQVNTRVRfQUREYDtcblxuLy8gY2hhbm5lbCBhY3Rpb25zXG5leHBvcnQgY29uc3QgQ0hBTk5FTF9BREQgPSAnQ0hBTk5FTF9BREQnO1xuXG5leHBvcnQgY29uc3QgQ0hBTk5FTF9DTEFJTVNfVVBEQVRFX0FTWU5DID0gJ0NIQU5ORUxfQ0xBSU1TX1VQREFURV9BU1lOQyc7XG5leHBvcnQgY29uc3QgQ0hBTk5FTF9DTEFJTVNfVVBEQVRFX1NVQ0NFU1MgPSAnQ0hBTk5FTF9DTEFJTVNfVVBEQVRFX1NVQ0NFU1MnO1xuXG4vLyBhc3NldC9maWxlIGRpc3BsYXkgYWN0aW9uc1xuZXhwb3J0IGNvbnN0IEZJTEVfUkVRVUVTVEVEID0gJ0ZJTEVfUkVRVUVTVEVEJztcbmV4cG9ydCBjb25zdCBGSUxFX0FWQUlMQUJJTElUWV9VUERBVEUgPSAnRklMRV9BVkFJTEFCSUxJVFlfVVBEQVRFJztcbmV4cG9ydCBjb25zdCBESVNQTEFZX0FTU0VUX0VSUk9SID0gJ0RJU1BMQVlfQVNTRVRfRVJST1InO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnN0YW50cy9zaG93X2FjdGlvbl90eXBlcy5qcyIsImV4cG9ydCBjb25zdCBzZWxlY3RBc3NldCA9IChzaG93KSA9PiB7XG4gIGNvbnN0IHJlcXVlc3QgPSBzaG93LnJlcXVlc3RMaXN0W3Nob3cucmVxdWVzdC5pZF07XG4gIGNvbnN0IGFzc2V0S2V5ID0gcmVxdWVzdC5rZXk7XG4gIHJldHVybiBzaG93LmFzc2V0TGlzdFthc3NldEtleV07XG59O1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0U2hvd1N0YXRlID0gKHN0YXRlKSA9PiB7XG4gIHJldHVybiBzdGF0ZS5zaG93O1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9zZWxlY3RvcnMvc2hvdy5qcyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWhlbG1ldFwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInJlYWN0LWhlbG1ldFwiXG4vLyBtb2R1bGUgaWQgPSAxNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWR1eC1zYWdhL2VmZmVjdHNcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJyZWR1eC1zYWdhL2VmZmVjdHNcIlxuLy8gbW9kdWxlIGlkID0gMTVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiY29uc3QgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpO1xuY29uc3QgbG9nZ2VyID0gcmVxdWlyZSgnd2luc3RvbicpO1xuY29uc3QgeyBhcGk6IHsgYXBpSG9zdCwgYXBpUG9ydCB9IH0gPSByZXF1aXJlKCcuLi8uLi9jb25maWcvbGJyeUNvbmZpZy5qcycpO1xuY29uc3QgbGJyeUFwaVVyaSA9ICdodHRwOi8vJyArIGFwaUhvc3QgKyAnOicgKyBhcGlQb3J0O1xuY29uc3QgeyBjaG9vc2VHYUxicnluZXRQdWJsaXNoTGFiZWwsIHNlbmRHQVRpbWluZ0V2ZW50IH0gPSByZXF1aXJlKCcuL2dvb2dsZUFuYWx5dGljcy5qcycpO1xuXG5jb25zdCBoYW5kbGVMYnJ5bmV0UmVzcG9uc2UgPSAoeyBkYXRhIH0sIHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICBsb2dnZXIuZGVidWcoJ2xicnkgYXBpIGRhdGE6JywgZGF0YSk7XG4gIGlmIChkYXRhLnJlc3VsdCkge1xuICAgIC8vIGNoZWNrIGZvciBhbiBlcnJvclxuICAgIGlmIChkYXRhLnJlc3VsdC5lcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdMYnJ5bmV0IGFwaSBlcnJvcjonLCBkYXRhLnJlc3VsdC5lcnJvcik7XG4gICAgICByZWplY3QobmV3IEVycm9yKGRhdGEucmVzdWx0LmVycm9yKSk7XG4gICAgICByZXR1cm47XG4gICAgfTtcbiAgICByZXNvbHZlKGRhdGEucmVzdWx0KTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gZmFsbGJhY2sgaW4gY2FzZSBpdCBqdXN0IHRpbWVkIG91dFxuICByZWplY3QoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHB1Ymxpc2hDbGFpbSAocHVibGlzaFBhcmFtcykge1xuICAgIGxvZ2dlci5kZWJ1ZyhgbGJyeUFwaSA+PiBQdWJsaXNoaW5nIGNsYWltIHRvIFwiJHtwdWJsaXNoUGFyYW1zLm5hbWV9XCJgKTtcbiAgICBjb25zdCBnYVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGF4aW9zXG4gICAgICAgIC5wb3N0KGxicnlBcGlVcmksIHtcbiAgICAgICAgICBtZXRob2Q6ICdwdWJsaXNoJyxcbiAgICAgICAgICBwYXJhbXM6IHB1Ymxpc2hQYXJhbXMsXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBzZW5kR0FUaW1pbmdFdmVudCgnbGJyeW5ldCcsICdwdWJsaXNoJywgY2hvb3NlR2FMYnJ5bmV0UHVibGlzaExhYmVsKHB1Ymxpc2hQYXJhbXMpLCBnYVN0YXJ0VGltZSwgRGF0ZS5ub3coKSk7XG4gICAgICAgICAgaGFuZGxlTGJyeW5ldFJlc3BvbnNlKHJlc3BvbnNlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxuICBnZXRDbGFpbSAodXJpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBsYnJ5QXBpID4+IEdldHRpbmcgQ2xhaW0gZm9yIFwiJHt1cml9XCJgKTtcbiAgICBjb25zdCBnYVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGF4aW9zXG4gICAgICAgIC5wb3N0KGxicnlBcGlVcmksIHtcbiAgICAgICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgICAgIHBhcmFtczogeyB1cmksIHRpbWVvdXQ6IDIwIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBzZW5kR0FUaW1pbmdFdmVudCgnbGJyeW5ldCcsICdnZXRDbGFpbScsICdHRVQnLCBnYVN0YXJ0VGltZSwgRGF0ZS5ub3coKSk7XG4gICAgICAgICAgaGFuZGxlTGJyeW5ldFJlc3BvbnNlKHJlc3BvbnNlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxuICBnZXRDbGFpbUxpc3QgKGNsYWltTmFtZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgbGJyeUFwaSA+PiBHZXR0aW5nIGNsYWltX2xpc3QgZm9yIFwiJHtjbGFpbU5hbWV9XCJgKTtcbiAgICBjb25zdCBnYVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGF4aW9zXG4gICAgICAgIC5wb3N0KGxicnlBcGlVcmksIHtcbiAgICAgICAgICBtZXRob2Q6ICdjbGFpbV9saXN0JyxcbiAgICAgICAgICBwYXJhbXM6IHsgbmFtZTogY2xhaW1OYW1lIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBzZW5kR0FUaW1pbmdFdmVudCgnbGJyeW5ldCcsICdnZXRDbGFpbUxpc3QnLCAnQ0xBSU1fTElTVCcsIGdhU3RhcnRUaW1lLCBEYXRlLm5vdygpKTtcbiAgICAgICAgICBoYW5kbGVMYnJ5bmV0UmVzcG9uc2UocmVzcG9uc2UsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG4gIHJlc29sdmVVcmkgKHVyaSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgbGJyeUFwaSA+PiBSZXNvbHZpbmcgVVJJIGZvciBcIiR7dXJpfVwiYCk7XG4gICAgY29uc3QgZ2FTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBheGlvc1xuICAgICAgICAucG9zdChsYnJ5QXBpVXJpLCB7XG4gICAgICAgICAgbWV0aG9kOiAncmVzb2x2ZScsXG4gICAgICAgICAgcGFyYW1zOiB7IHVyaSB9LFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgICBzZW5kR0FUaW1pbmdFdmVudCgnbGJyeW5ldCcsICdyZXNvbHZlVXJpJywgJ1JFU09MVkUnLCBnYVN0YXJ0VGltZSwgRGF0ZS5ub3coKSk7XG4gICAgICAgICAgaWYgKGRhdGEucmVzdWx0W3VyaV0uZXJyb3IpIHsgIC8vIGNoZWNrIGZvciBlcnJvcnNcbiAgICAgICAgICAgIHJlamVjdChkYXRhLnJlc3VsdFt1cmldLmVycm9yKTtcbiAgICAgICAgICB9IGVsc2UgeyAgLy8gaWYgbm8gZXJyb3JzLCByZXNvbHZlXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEucmVzdWx0W3VyaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSxcbiAgZ2V0RG93bmxvYWREaXJlY3RvcnkgKCkge1xuICAgIGxvZ2dlci5kZWJ1ZygnbGJyeUFwaSA+PiBSZXRyaWV2aW5nIHRoZSBkb3dubG9hZCBkaXJlY3RvcnkgcGF0aCBmcm9tIGxicnkgZGFlbW9uLi4uJyk7XG4gICAgY29uc3QgZ2FTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBheGlvc1xuICAgICAgICAucG9zdChsYnJ5QXBpVXJpLCB7XG4gICAgICAgICAgbWV0aG9kOiAnc2V0dGluZ3NfZ2V0JyxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHsgZGF0YSB9KSA9PiB7XG4gICAgICAgICAgc2VuZEdBVGltaW5nRXZlbnQoJ2xicnluZXQnLCAnZ2V0RG93bmxvYWREaXJlY3RvcnknLCAnU0VUVElOR1NfR0VUJywgZ2FTdGFydFRpbWUsIERhdGUubm93KCkpO1xuICAgICAgICAgIGlmIChkYXRhLnJlc3VsdCkge1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnJlc3VsdC5kb3dubG9hZF9kaXJlY3RvcnkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdTdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvIGxicnkgZGFlbW9uLCBidXQgdW5hYmxlIHRvIHJldHJpZXZlIHRoZSBkb3dubG9hZCBkaXJlY3RvcnkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignTGJyeW5ldCBFcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgcmVzb2x2ZSgnL2hvbWUvbGJyeS9Eb3dubG9hZHMvJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxuICBjcmVhdGVDaGFubmVsIChuYW1lKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBsYnJ5QXBpID4+IENyZWF0aW5nIGNoYW5uZWwgZm9yICR7bmFtZX0uLi5gKTtcbiAgICBjb25zdCBnYVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGF4aW9zXG4gICAgICAgIC5wb3N0KGxicnlBcGlVcmksIHtcbiAgICAgICAgICBtZXRob2Q6ICdjaGFubmVsX25ldycsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBjaGFubmVsX25hbWU6IG5hbWUsXG4gICAgICAgICAgICBhbW91bnQgICAgICA6IDAuMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgc2VuZEdBVGltaW5nRXZlbnQoJ2xicnluZXQnLCAnY3JlYXRlQ2hhbm5lbCcsICdDSEFOTkVMX05FVycsIGdhU3RhcnRUaW1lLCBEYXRlLm5vdygpKTtcbiAgICAgICAgICBoYW5kbGVMYnJ5bmV0UmVzcG9uc2UocmVzcG9uc2UsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvbGJyeUFwaS5qcyIsImNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJ3dpbnN0b24nKTtcbmNvbnN0IHVhID0gcmVxdWlyZSgndW5pdmVyc2FsLWFuYWx5dGljcycpO1xuY29uc3QgeyBhbmFseXRpY3MgOiB7IGdvb2dsZUlkIH0sIGRldGFpbHM6IHsgdGl0bGUgfSB9ID0gcmVxdWlyZSgnLi4vLi4vY29uZmlnL3NpdGVDb25maWcuanMnKTtcblxuZnVuY3Rpb24gY3JlYXRlU2VydmVFdmVudFBhcmFtcyAoaGVhZGVycywgaXAsIG9yaWdpbmFsVXJsKSB7XG4gIHJldHVybiB7XG4gICAgZXZlbnRDYXRlZ29yeSAgICA6ICdjbGllbnQgcmVxdWVzdHMnLFxuICAgIGV2ZW50QWN0aW9uICAgICAgOiAnc2VydmUgcmVxdWVzdCcsXG4gICAgZXZlbnRMYWJlbCAgICAgICA6IG9yaWdpbmFsVXJsLFxuICAgIGlwT3ZlcnJpZGUgICAgICAgOiBpcCxcbiAgICB1c2VyQWdlbnRPdmVycmlkZTogaGVhZGVyc1sndXNlci1hZ2VudCddLFxuICB9O1xufTtcblxuZnVuY3Rpb24gY3JlYXRlUHVibGlzaFRpbWluZ0V2ZW50UGFyYW1zIChjYXRlZ29yeSwgdmFyaWFibGUsIGxhYmVsLCBzdGFydFRpbWUsIGVuZFRpbWUpIHtcbiAgY29uc3QgZHVyYXRpb24gPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xuICByZXR1cm4ge1xuICAgIHVzZXJUaW1pbmdDYXRlZ29yeSAgICA6IGNhdGVnb3J5LFxuICAgIHVzZXJUaW1pbmdWYXJpYWJsZU5hbWU6IHZhcmlhYmxlLFxuICAgIHVzZXJUaW1pbmdUaW1lICAgICAgICA6IGR1cmF0aW9uLFxuICAgIHVzZXJUaW1pbmdMYWJlbCAgICAgICA6IGxhYmVsLFxuICB9O1xufTtcblxuZnVuY3Rpb24gc2VuZEdvb2dsZUFuYWx5dGljc0V2ZW50IChpcCwgcGFyYW1zKSB7XG4gIGNvbnN0IHZpc2l0b3JJZCA9IGlwLnJlcGxhY2UoL1xcLi9nLCAnLScpO1xuICBjb25zdCB2aXNpdG9yID0gdWEoZ29vZ2xlSWQsIHZpc2l0b3JJZCwgeyBzdHJpY3RDaWRGb3JtYXQ6IGZhbHNlLCBodHRwczogdHJ1ZSB9KTtcbiAgdmlzaXRvci5ldmVudChwYXJhbXMsIChlcnIpID0+IHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0dvb2dsZSBBbmFseXRpY3MgRXZlbnQgRXJyb3IgPj4nLCBlcnIpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBzZW5kR29vZ2xlQW5hbHl0aWNzVGltaW5nICh2aXNpdG9ySWQsIHBhcmFtcykge1xuICBjb25zdCB2aXNpdG9yID0gdWEoZ29vZ2xlSWQsIHZpc2l0b3JJZCwgeyBzdHJpY3RDaWRGb3JtYXQ6IGZhbHNlLCBodHRwczogdHJ1ZSB9KTtcbiAgdmlzaXRvci50aW1pbmcocGFyYW1zLCAoZXJyKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdHb29nbGUgQW5hbHl0aWNzIEV2ZW50IEVycm9yID4+JywgZXJyKTtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKGBUaW1pbmcgZXZlbnQgc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gZ29vZ2xlIGFuYWx5dGljc2ApO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZW5kR0FTZXJ2ZUV2ZW50IChoZWFkZXJzLCBpcCwgb3JpZ2luYWxVcmwpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBjcmVhdGVTZXJ2ZUV2ZW50UGFyYW1zKGhlYWRlcnMsIGlwLCBvcmlnaW5hbFVybCk7XG4gICAgc2VuZEdvb2dsZUFuYWx5dGljc0V2ZW50KGlwLCBwYXJhbXMpO1xuICB9LFxuICBzZW5kR0FUaW1pbmdFdmVudCAoY2F0ZWdvcnksIHZhcmlhYmxlLCBsYWJlbCwgc3RhcnRUaW1lLCBlbmRUaW1lKSB7XG4gICAgY29uc3QgcGFyYW1zID0gY3JlYXRlUHVibGlzaFRpbWluZ0V2ZW50UGFyYW1zKGNhdGVnb3J5LCB2YXJpYWJsZSwgbGFiZWwsIHN0YXJ0VGltZSwgZW5kVGltZSk7XG4gICAgc2VuZEdvb2dsZUFuYWx5dGljc1RpbWluZyh0aXRsZSwgcGFyYW1zKTtcbiAgfSxcbiAgY2hvb3NlR2FMYnJ5bmV0UHVibGlzaExhYmVsICh7IGNoYW5uZWxfbmFtZTogY2hhbm5lbE5hbWUsIGNoYW5uZWxfaWQ6IGNoYW5uZWxJZCB9KSB7XG4gICAgcmV0dXJuIChjaGFubmVsTmFtZSB8fCBjaGFubmVsSWQgPyAnUFVCTElTSF9JTl9DSEFOTkVMX0NMQUlNJyA6ICdQVUJMSVNIX0FOT05ZTU9VU19DTEFJTScpO1xuICB9LFxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9oZWxwZXJzL2dvb2dsZUFuYWx5dGljcy5qcyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZHV4XCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwicmVkdXhcIlxuLy8gbW9kdWxlIGlkID0gMThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICogYXMgYWN0aW9ucyBmcm9tICdjb25zdGFudHMvY2hhbm5lbF9hY3Rpb25fdHlwZXMnO1xuXG4vLyBleHBvcnQgYWN0aW9uIGNyZWF0b3JzXG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMb2dnZWRJbkNoYW5uZWwgKG5hbWUsIHNob3J0SWQsIGxvbmdJZCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuQ0hBTk5FTF9VUERBVEUsXG4gICAgZGF0YToge1xuICAgICAgbmFtZSxcbiAgICAgIHNob3J0SWQsXG4gICAgICBsb25nSWQsXG4gICAgfSxcbiAgfTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvYWN0aW9ucy9jaGFubmVsLmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgQWN0aXZlU3RhdHVzQmFyIGZyb20gJ2NvbXBvbmVudHMvQWN0aXZlU3RhdHVzQmFyJztcbmltcG9ydCBJbmFjdGl2ZVN0YXR1c0JhciBmcm9tICdjb21wb25lbnRzL0luYWN0aXZlU3RhdHVzQmFyJztcblxuY2xhc3MgUHJvZ3Jlc3NCYXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGJhcnMgICAgICAgOiBbXSxcbiAgICAgIGluZGV4ICAgICAgOiAwLFxuICAgICAgaW5jcmVtZW50ZXI6IDEsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZUJhcnMgPSB0aGlzLmNyZWF0ZUJhcnMuYmluZCh0aGlzKTtcbiAgICB0aGlzLnN0YXJ0UHJvZ3Jlc3NCYXIgPSB0aGlzLnN0YXJ0UHJvZ3Jlc3NCYXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzQmFyID0gdGhpcy51cGRhdGVQcm9ncmVzc0Jhci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc3RvcFByb2dyZXNzQmFyID0gdGhpcy5zdG9wUHJvZ3Jlc3NCYXIuYmluZCh0aGlzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgdGhpcy5jcmVhdGVCYXJzKCk7XG4gICAgdGhpcy5zdGFydFByb2dyZXNzQmFyKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQgKCkge1xuICAgIHRoaXMuc3RvcFByb2dyZXNzQmFyKCk7XG4gIH1cbiAgY3JlYXRlQmFycyAoKSB7XG4gICAgY29uc3QgYmFycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHRoaXMucHJvcHMuc2l6ZTsgaSsrKSB7XG4gICAgICBiYXJzLnB1c2goe2lzQWN0aXZlOiBmYWxzZX0pO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHsgYmFycyB9KTtcbiAgfVxuICBzdGFydFByb2dyZXNzQmFyICgpIHtcbiAgICB0aGlzLnVwZGF0ZUludGVydmFsID0gc2V0SW50ZXJ2YWwodGhpcy51cGRhdGVQcm9ncmVzc0Jhci5iaW5kKHRoaXMpLCAzMDApO1xuICB9O1xuICB1cGRhdGVQcm9ncmVzc0JhciAoKSB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5zdGF0ZS5pbmRleDtcbiAgICBsZXQgaW5jcmVtZW50ZXIgPSB0aGlzLnN0YXRlLmluY3JlbWVudGVyO1xuICAgIGxldCBiYXJzID0gdGhpcy5zdGF0ZS5iYXJzO1xuICAgIC8vIGZsaXAgaW5jcmVtZW50ZXIgaWYgbmVjZXNzYXJ5LCB0byBzdGF5IGluIGJvdW5kc1xuICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPiB0aGlzLnByb3BzLnNpemUpKSB7XG4gICAgICBpbmNyZW1lbnRlciA9IGluY3JlbWVudGVyICogLTE7XG4gICAgICBpbmRleCArPSBpbmNyZW1lbnRlcjtcbiAgICB9XG4gICAgLy8gdXBkYXRlIHRoZSBpbmRleGVkIGJhclxuICAgIGlmIChpbmNyZW1lbnRlciA+IDApIHtcbiAgICAgIGJhcnNbaW5kZXhdLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFyc1tpbmRleF0uaXNBY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuICAgIC8vIGluY3JlbWVudCBpbmRleFxuICAgIGluZGV4ICs9IGluY3JlbWVudGVyO1xuICAgIC8vIHVwZGF0ZSBzdGF0ZVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgYmFycyxcbiAgICAgIGluY3JlbWVudGVyLFxuICAgICAgaW5kZXgsXG4gICAgfSk7XG4gIH07XG4gIHN0b3BQcm9ncmVzc0JhciAoKSB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZUludGVydmFsKTtcbiAgfTtcbiAgcmVuZGVyICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAge3RoaXMuc3RhdGUuYmFycy5tYXAoKGJhciwgaW5kZXgpID0+IGJhci5pc0FjdGl2ZSA/IDxBY3RpdmVTdGF0dXNCYXIga2V5PXtpbmRleH0gLz4gOiA8SW5hY3RpdmVTdGF0dXNCYXIga2V5PXtpbmRleH0vPil9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59O1xuXG5Qcm9ncmVzc0Jhci5wcm9wVHlwZXMgPSB7XG4gIHNpemU6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb2dyZXNzQmFyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbXBvbmVudHMvUHJvZ3Jlc3NCYXIvaW5kZXguanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgTmF2QmFyIGZyb20gJ2NvbnRhaW5lcnMvTmF2QmFyJztcblxuY2xhc3MgRXJyb3JQYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7IGVycm9yIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2PlxuICAgICAgICA8TmF2QmFyIC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS1wYWRkZWQnPlxuICAgICAgICAgIDxwPntlcnJvcn08L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufTtcblxuRXJyb3JQYWdlLnByb3BUeXBlcyA9IHtcbiAgZXJyb3I6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVycm9yUGFnZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9wYWdlcy9FcnJvclBhZ2UvaW5kZXguanN4IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicGFzc3BvcnRcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJwYXNzcG9ydFwiXG4vLyBtb2R1bGUgaWQgPSAyMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwYXNzcG9ydC1sb2NhbFwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInBhc3Nwb3J0LWxvY2FsXCJcbi8vIG1vZHVsZSBpZCA9IDIzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInNlcXVlbGl6ZVwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInNlcXVlbGl6ZVwiXG4vLyBtb2R1bGUgaWQgPSAyNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmV0dXJuU2hvcnRJZDogZnVuY3Rpb24gKGNsYWltc0FycmF5LCBsb25nSWQpIHtcbiAgICBsZXQgY2xhaW1JbmRleDtcbiAgICBsZXQgc2hvcnRJZCA9IGxvbmdJZC5zdWJzdHJpbmcoMCwgMSk7IC8vIGRlZmF1bHQgc2hvcnQgaWQgaXMgdGhlIGZpcnN0IGxldHRlclxuICAgIGxldCBzaG9ydElkTGVuZ3RoID0gMDtcbiAgICAvLyBmaW5kIHRoZSBpbmRleCBvZiB0aGlzIGNsYWltIGlkXG4gICAgY2xhaW1JbmRleCA9IGNsYWltc0FycmF5LmZpbmRJbmRleChlbGVtZW50ID0+IHtcbiAgICAgIHJldHVybiBlbGVtZW50LmNsYWltSWQgPT09IGxvbmdJZDtcbiAgICB9KTtcbiAgICBpZiAoY2xhaW1JbmRleCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2xhaW0gaWQgbm90IGZvdW5kIGluIGNsYWltcyBsaXN0Jyk7XG4gICAgfVxuICAgIC8vIGdldCBhbiBhcnJheSBvZiBhbGwgY2xhaW1zIHdpdGggbG93ZXIgaGVpZ2h0XG4gICAgbGV0IHBvc3NpYmxlTWF0Y2hlcyA9IGNsYWltc0FycmF5LnNsaWNlKDAsIGNsYWltSW5kZXgpO1xuICAgIC8vIHJlbW92ZSBjZXJ0aWZpY2F0ZXMgd2l0aCB0aGUgc2FtZSBwcmVmaXhlcyB1bnRpbCBub25lIGFyZSBsZWZ0LlxuICAgIHdoaWxlIChwb3NzaWJsZU1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgc2hvcnRJZExlbmd0aCArPSAxO1xuICAgICAgc2hvcnRJZCA9IGxvbmdJZC5zdWJzdHJpbmcoMCwgc2hvcnRJZExlbmd0aCk7XG4gICAgICBwb3NzaWJsZU1hdGNoZXMgPSBwb3NzaWJsZU1hdGNoZXMuZmlsdGVyKGVsZW1lbnQgPT4ge1xuICAgICAgICByZXR1cm4gKGVsZW1lbnQuY2xhaW1JZCAmJiAoZWxlbWVudC5jbGFpbUlkLnN1YnN0cmluZygwLCBzaG9ydElkTGVuZ3RoKSA9PT0gc2hvcnRJZCkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzaG9ydElkO1xuICB9LFxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9oZWxwZXJzL3NlcXVlbGl6ZUhlbHBlcnMuanMiLCJjb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5cbmNvbnN0IHsgZGV0YWlscywgcHVibGlzaGluZyB9ID0gcmVxdWlyZSgnLi4vLi4vY29uZmlnL3NpdGVDb25maWcuanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBhcnNlUHVibGlzaEFwaVJlcXVlc3RCb2R5ICh7bmFtZSwgbnNmdywgbGljZW5zZSwgdGl0bGUsIGRlc2NyaXB0aW9uLCB0aHVtYm5haWx9KSB7XG4gICAgLy8gdmFsaWRhdGUgbmFtZVxuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBuYW1lIGZpZWxkIGZvdW5kIGluIHJlcXVlc3QnKTtcbiAgICB9XG4gICAgY29uc3QgaW52YWxpZE5hbWVDaGFyYWN0ZXJzID0gL1teQS1aYS16MC05LC1dLy5leGVjKG5hbWUpO1xuICAgIGlmIChpbnZhbGlkTmFtZUNoYXJhY3RlcnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGNsYWltIG5hbWUgeW91IHByb3ZpZGVkIGlzIG5vdCBhbGxvd2VkLiAgT25seSB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQ6IEEtWiwgYS16LCAwLTksIGFuZCBcIi1cIicpO1xuICAgIH1cbiAgICAvLyBvcHRpb25hbCBwYXJhbWV0ZXJzXG4gICAgbnNmdyA9IChuc2Z3ID09PSAndHJ1ZScpO1xuICAgIGxpY2Vuc2UgPSBsaWNlbnNlIHx8IG51bGw7XG4gICAgdGl0bGUgPSB0aXRsZSB8fCBudWxsO1xuICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gfHwgbnVsbDtcbiAgICB0aHVtYm5haWwgPSB0aHVtYm5haWwgfHwgbnVsbDtcbiAgICAvLyByZXR1cm4gcmVzdWx0c1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgbnNmdyxcbiAgICAgIGxpY2Vuc2UsXG4gICAgICB0aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgdGh1bWJuYWlsLFxuICAgIH07XG4gIH0sXG4gIHBhcnNlUHVibGlzaEFwaVJlcXVlc3RGaWxlcyAoe2ZpbGUsIHRodW1ibmFpbH0pIHtcbiAgICAvLyBtYWtlIHN1cmUgYSBmaWxlIHdhcyBwcm92aWRlZFxuICAgIGlmICghZmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBmaWxlIHdpdGgga2V5IG9mIFtmaWxlXSBmb3VuZCBpbiByZXF1ZXN0Jyk7XG4gICAgfVxuICAgIGlmICghZmlsZS5wYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGZpbGUgcGF0aCBmb3VuZCcpO1xuICAgIH1cbiAgICBpZiAoIWZpbGUudHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBmaWxlIHR5cGUgZm91bmQnKTtcbiAgICB9XG4gICAgaWYgKCFmaWxlLnNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbm8gZmlsZSB0eXBlIGZvdW5kJyk7XG4gICAgfVxuICAgIC8vIHZhbGlkYXRlIHRoZSBmaWxlIG5hbWVcbiAgICBpZiAoLycvLnRlc3QoZmlsZS5uYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhcG9zdHJvcGhlcyBhcmUgbm90IGFsbG93ZWQgaW4gdGhlIGZpbGUgbmFtZScpO1xuICAgIH1cbiAgICAvLyB2YWxpZGF0ZSB0aGUgZmlsZVxuICAgIG1vZHVsZS5leHBvcnRzLnZhbGlkYXRlRmlsZVR5cGVBbmRTaXplKGZpbGUpO1xuICAgIC8vIHJldHVybiByZXN1bHRzXG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGVOYW1lICAgICAgICAgOiBmaWxlLm5hbWUsXG4gICAgICBmaWxlUGF0aCAgICAgICAgIDogZmlsZS5wYXRoLFxuICAgICAgZmlsZVR5cGUgICAgICAgICA6IGZpbGUudHlwZSxcbiAgICAgIHRodW1ibmFpbEZpbGVOYW1lOiAodGh1bWJuYWlsID8gdGh1bWJuYWlsLm5hbWUgOiBudWxsKSxcbiAgICAgIHRodW1ibmFpbEZpbGVQYXRoOiAodGh1bWJuYWlsID8gdGh1bWJuYWlsLnBhdGggOiBudWxsKSxcbiAgICAgIHRodW1ibmFpbEZpbGVUeXBlOiAodGh1bWJuYWlsID8gdGh1bWJuYWlsLnR5cGUgOiBudWxsKSxcbiAgICB9O1xuICB9LFxuICB2YWxpZGF0ZUZpbGVUeXBlQW5kU2l6ZSAoZmlsZSkge1xuICAgIC8vIGNoZWNrIGZpbGUgdHlwZSBhbmQgc2l6ZVxuICAgIHN3aXRjaCAoZmlsZS50eXBlKSB7XG4gICAgICBjYXNlICdpbWFnZS9qcGVnJzpcbiAgICAgIGNhc2UgJ2ltYWdlL2pwZyc6XG4gICAgICBjYXNlICdpbWFnZS9wbmcnOlxuICAgICAgICBpZiAoZmlsZS5zaXplID4gMTAwMDAwMDApIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoJ3B1Ymxpc2ggPiBmaWxlIHZhbGlkYXRpb24gPiAuanBlZy8uanBnLy5wbmcgd2FzIHRvbyBiaWcnKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvcnJ5LCBpbWFnZXMgYXJlIGxpbWl0ZWQgdG8gMTAgbWVnYWJ5dGVzLicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW1hZ2UvZ2lmJzpcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IDUwMDAwMDAwKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKCdwdWJsaXNoID4gZmlsZSB2YWxpZGF0aW9uID4gLmdpZiB3YXMgdG9vIGJpZycpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU29ycnksIC5naWZzIGFyZSBsaW1pdGVkIHRvIDUwIG1lZ2FieXRlcy4nKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3ZpZGVvL21wNCc6XG4gICAgICAgIGlmIChmaWxlLnNpemUgPiA1MDAwMDAwMCkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygncHVibGlzaCA+IGZpbGUgdmFsaWRhdGlvbiA+IC5tcDQgd2FzIHRvbyBiaWcnKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvcnJ5LCB2aWRlb3MgYXJlIGxpbWl0ZWQgdG8gNTAgbWVnYWJ5dGVzLicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdwdWJsaXNoID4gZmlsZSB2YWxpZGF0aW9uID4gdW5yZWNvZ25pemVkIGZpbGUgdHlwZScpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSAnICsgZmlsZS50eXBlICsgJyBjb250ZW50IHR5cGUgaXMgbm90IHN1cHBvcnRlZC4gIE9ubHksIC5qcGVnLCAucG5nLCAuZ2lmLCBhbmQgLm1wNCBmaWxlcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbGU7XG4gIH0sXG4gIGNyZWF0ZUJhc2ljUHVibGlzaFBhcmFtcyAoZmlsZVBhdGgsIG5hbWUsIHRpdGxlLCBkZXNjcmlwdGlvbiwgbGljZW5zZSwgbnNmdywgdGh1bWJuYWlsKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBDcmVhdGluZyBQdWJsaXNoIFBhcmFtZXRlcnNgKTtcbiAgICAvLyBwcm92aWRlIGRlZmF1bHRzIGZvciB0aXRsZVxuICAgIGlmICh0aXRsZSA9PT0gbnVsbCB8fCB0aXRsZS50cmltKCkgPT09ICcnKSB7XG4gICAgICB0aXRsZSA9IG5hbWU7XG4gICAgfVxuICAgIC8vIHByb3ZpZGUgZGVmYXVsdCBmb3IgZGVzY3JpcHRpb25cbiAgICBpZiAoZGVzY3JpcHRpb24gPT09IG51bGwgfHwgZGVzY3JpcHRpb24udHJpbSgpID09PSAnJykge1xuICAgICAgZGVzY3JpcHRpb24gPSAnJztcbiAgICB9XG4gICAgLy8gcHJvdmlkZSBkZWZhdWx0IGZvciBsaWNlbnNlXG4gICAgaWYgKGxpY2Vuc2UgPT09IG51bGwgfHwgbGljZW5zZS50cmltKCkgPT09ICcnKSB7XG4gICAgICBsaWNlbnNlID0gJyAnOyAgLy8gZGVmYXVsdCB0byBlbXB0eSBzdHJpbmdcbiAgICB9XG4gICAgLy8gY3JlYXRlIHRoZSBwdWJsaXNoIHBhcmFtc1xuICAgIGNvbnN0IHB1Ymxpc2hQYXJhbXMgPSB7XG4gICAgICBuYW1lLFxuICAgICAgZmlsZV9wYXRoOiBmaWxlUGF0aCxcbiAgICAgIGJpZCAgICAgIDogMC4wMSxcbiAgICAgIG1ldGFkYXRhIDoge1xuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGF1dGhvciAgOiBkZXRhaWxzLnRpdGxlLFxuICAgICAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgbnNmdyxcbiAgICAgIH0sXG4gICAgICBjbGFpbV9hZGRyZXNzOiBwdWJsaXNoaW5nLnByaW1hcnlDbGFpbUFkZHJlc3MsXG4gICAgfTtcbiAgICAvLyBhZGQgdGh1bWJuYWlsIHRvIGNoYW5uZWwgaWYgdmlkZW9cbiAgICBpZiAodGh1bWJuYWlsKSB7XG4gICAgICBwdWJsaXNoUGFyYW1zWydtZXRhZGF0YSddWyd0aHVtYm5haWwnXSA9IHRodW1ibmFpbDtcbiAgICB9XG4gICAgcmV0dXJuIHB1Ymxpc2hQYXJhbXM7XG4gIH0sXG4gIGNyZWF0ZVRodW1ibmFpbFB1Ymxpc2hQYXJhbXMgKHRodW1ibmFpbEZpbGVQYXRoLCBjbGFpbU5hbWUsIGxpY2Vuc2UsIG5zZncpIHtcbiAgICBpZiAoIXRodW1ibmFpbEZpbGVQYXRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxvZ2dlci5kZWJ1ZyhgQ3JlYXRpbmcgVGh1bWJuYWlsIFB1Ymxpc2ggUGFyYW1ldGVyc2ApO1xuICAgIC8vIGNyZWF0ZSB0aGUgcHVibGlzaCBwYXJhbXNcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSAgICAgOiBgJHtjbGFpbU5hbWV9LXRodW1iYCxcbiAgICAgIGZpbGVfcGF0aDogdGh1bWJuYWlsRmlsZVBhdGgsXG4gICAgICBiaWQgICAgICA6IDAuMDEsXG4gICAgICBtZXRhZGF0YSA6IHtcbiAgICAgICAgdGl0bGUgICAgICA6IGAke2NsYWltTmFtZX0gdGh1bWJuYWlsYCxcbiAgICAgICAgZGVzY3JpcHRpb246IGBhIHRodW1ibmFpbCBmb3IgJHtjbGFpbU5hbWV9YCxcbiAgICAgICAgYXV0aG9yICAgICA6IGRldGFpbHMudGl0bGUsXG4gICAgICAgIGxhbmd1YWdlICAgOiAnZW4nLFxuICAgICAgICBsaWNlbnNlLFxuICAgICAgICBuc2Z3LFxuICAgICAgfSxcbiAgICAgIGNsYWltX2FkZHJlc3M6IHB1Ymxpc2hpbmcucHJpbWFyeUNsYWltQWRkcmVzcyxcbiAgICAgIGNoYW5uZWxfbmFtZSA6IHB1Ymxpc2hpbmcudGh1bWJuYWlsQ2hhbm5lbCxcbiAgICAgIGNoYW5uZWxfaWQgICA6IHB1Ymxpc2hpbmcudGh1bWJuYWlsQ2hhbm5lbElkLFxuICAgIH07XG4gIH0sXG4gIGRlbGV0ZVRlbXBvcmFyeUZpbGUgKGZpbGVQYXRoKSB7XG4gICAgZnMudW5saW5rKGZpbGVQYXRoLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYGVycm9yIGRlbGV0aW5nIHRlbXBvcmFyeSBmaWxlICR7ZmlsZVBhdGh9YCk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5kZWJ1Zyhgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQgJHtmaWxlUGF0aH1gKTtcbiAgICB9KTtcbiAgfSxcbiAgYWRkR2V0UmVzdWx0c1RvRmlsZURhdGEgKGZpbGVJbmZvLCBnZXRSZXN1bHQpIHtcbiAgICBmaWxlSW5mby5maWxlTmFtZSA9IGdldFJlc3VsdC5maWxlX25hbWU7XG4gICAgZmlsZUluZm8uZmlsZVBhdGggPSBnZXRSZXN1bHQuZG93bmxvYWRfcGF0aDtcbiAgICByZXR1cm4gZmlsZUluZm87XG4gIH0sXG4gIGNyZWF0ZUZpbGVEYXRhICh7IG5hbWUsIGNsYWltSWQsIG91dHBvaW50LCBoZWlnaHQsIGFkZHJlc3MsIG5zZncsIGNvbnRlbnRUeXBlIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIGNsYWltSWQsXG4gICAgICBvdXRwb2ludCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGFkZHJlc3MsXG4gICAgICBmaWxlTmFtZTogJycsXG4gICAgICBmaWxlUGF0aDogJycsXG4gICAgICBmaWxlVHlwZTogY29udGVudFR5cGUsXG4gICAgICBuc2Z3LFxuICAgIH07XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvcHVibGlzaEhlbHBlcnMuanMiLCJjb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBoYW5kbGVFcnJvclJlc3BvbnNlOiBmdW5jdGlvbiAob3JpZ2luYWxVcmwsIGlwLCBlcnJvciwgcmVzKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBFcnJvciBvbiAke29yaWdpbmFsVXJsfWAsIG1vZHVsZS5leHBvcnRzLnVzZU9iamVjdFByb3BlcnRpZXNJZk5vS2V5cyhlcnJvcikpO1xuICAgIGNvbnN0IFtzdGF0dXMsIG1lc3NhZ2VdID0gbW9kdWxlLmV4cG9ydHMucmV0dXJuRXJyb3JNZXNzYWdlQW5kU3RhdHVzKGVycm9yKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoc3RhdHVzKVxuICAgICAgLmpzb24obW9kdWxlLmV4cG9ydHMuY3JlYXRlRXJyb3JSZXNwb25zZVBheWxvYWQoc3RhdHVzLCBtZXNzYWdlKSk7XG4gIH0sXG4gIHJldHVybkVycm9yTWVzc2FnZUFuZFN0YXR1czogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgbGV0IHN0YXR1cywgbWVzc2FnZTtcbiAgICAvLyBjaGVjayBmb3IgZGFlbW9uIGJlaW5nIHR1cm5lZCBvZmZcbiAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VDT05OUkVGVVNFRCcpIHtcbiAgICAgIHN0YXR1cyA9IDUwMztcbiAgICAgIG1lc3NhZ2UgPSAnQ29ubmVjdGlvbiByZWZ1c2VkLiAgVGhlIGRhZW1vbiBtYXkgbm90IGJlIHJ1bm5pbmcuJztcbiAgICAgIC8vIGZhbGxiYWNrIGZvciBldmVyeXRoaW5nIGVsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdHVzID0gNDAwO1xuICAgICAgaWYgKGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlID0gZXJyb3I7XG4gICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFtzdGF0dXMsIG1lc3NhZ2VdO1xuICB9LFxuICB1c2VPYmplY3RQcm9wZXJ0aWVzSWZOb0tleXM6IGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZXJyKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGxldCBuZXdFcnJvck9iamVjdCA9IHt9O1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgbmV3RXJyb3JPYmplY3Rba2V5XSA9IGVycltrZXldO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3RXJyb3JPYmplY3Q7XG4gICAgfVxuICAgIHJldHVybiBlcnI7XG4gIH0sXG4gIGNyZWF0ZUVycm9yUmVzcG9uc2VQYXlsb2FkIChzdGF0dXMsIG1lc3NhZ2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzLFxuICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICBtZXNzYWdlLFxuICAgIH07XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvZXJyb3JIYW5kbGVycy5qcyIsImNvbnN0IGRiID0gcmVxdWlyZSgnLi4vbW9kZWxzL2luZGV4Jyk7XG5jb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5jb25zdCB7IHJldHVyblBhZ2luYXRlZENoYW5uZWxDbGFpbXMgfSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvY2hhbm5lbFBhZ2luYXRpb24uanMnKTtcblxuY29uc3QgTk9fQ0hBTk5FTCA9ICdOT19DSEFOTkVMJztcbmNvbnN0IE5PX0NMQUlNID0gJ05PX0NMQUlNJztcbmNvbnN0IE5PX0ZJTEUgPSAnTk9fRklMRSc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDbGFpbUlkIChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIG5hbWUsIGNsYWltSWQpIHtcbiAgICBpZiAoY2hhbm5lbE5hbWUpIHtcbiAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cy5nZXRDbGFpbUlkQnlDaGFubmVsKGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCwgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cy5nZXRDbGFpbUlkQnlDbGFpbShuYW1lLCBjbGFpbUlkKTtcbiAgICB9XG4gIH0sXG4gIGdldENsYWltSWRCeUNsYWltIChjbGFpbU5hbWUsIGNsYWltSWQpIHtcbiAgICBsb2dnZXIuZGVidWcoYGdldENsYWltSWRCeUNsYWltKCR7Y2xhaW1OYW1lfSwgJHtjbGFpbUlkfSlgKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZGIuQ2xhaW0uZ2V0TG9uZ0NsYWltSWQoY2xhaW1OYW1lLCBjbGFpbUlkKVxuICAgICAgICAudGhlbihsb25nQ2xhaW1JZCA9PiB7XG4gICAgICAgICAgaWYgKCFsb25nQ2xhaW1JZCkge1xuICAgICAgICAgICAgcmVzb2x2ZShOT19DTEFJTSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmUobG9uZ0NsYWltSWQpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxuICBnZXRDbGFpbUlkQnlDaGFubmVsIChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIGNsYWltTmFtZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgZ2V0Q2xhaW1JZEJ5Q2hhbm5lbCgke2NoYW5uZWxOYW1lfSwgJHtjaGFubmVsQ2xhaW1JZH0sICR7Y2xhaW1OYW1lfSlgKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZGIuQ2VydGlmaWNhdGUuZ2V0TG9uZ0NoYW5uZWxJZChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQpIC8vIDEuIGdldCB0aGUgbG9uZyBjaGFubmVsIGlkXG4gICAgICAgIC50aGVuKGxvbmdDaGFubmVsSWQgPT4ge1xuICAgICAgICAgIGlmICghbG9uZ0NoYW5uZWxJZCkge1xuICAgICAgICAgICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtsb25nQ2hhbm5lbElkLCBkYi5DbGFpbS5nZXRDbGFpbUlkQnlMb25nQ2hhbm5lbElkKGxvbmdDaGFubmVsSWQsIGNsYWltTmFtZSldKTsgIC8vIDIuIGdldCB0aGUgbG9uZyBjbGFpbSBpZFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigoW2xvbmdDaGFubmVsSWQsIGxvbmdDbGFpbUlkXSkgPT4ge1xuICAgICAgICAgIGlmICghbG9uZ0NoYW5uZWxJZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoTk9fQ0hBTk5FTCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghbG9uZ0NsYWltSWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKE5PX0NMQUlNKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZShsb25nQ2xhaW1JZCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG4gIGdldENoYW5uZWxEYXRhIChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIHBhZ2UpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gMS4gZ2V0IHRoZSBsb25nIGNoYW5uZWwgSWQgKG1ha2Ugc3VyZSBjaGFubmVsIGV4aXN0cylcbiAgICAgIGRiLkNlcnRpZmljYXRlLmdldExvbmdDaGFubmVsSWQoY2hhbm5lbE5hbWUsIGNoYW5uZWxDbGFpbUlkKVxuICAgICAgICAudGhlbihsb25nQ2hhbm5lbENsYWltSWQgPT4ge1xuICAgICAgICAgIGlmICghbG9uZ0NoYW5uZWxDbGFpbUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gW251bGwsIG51bGwsIG51bGxdO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyAyLiBnZXQgdGhlIHNob3J0IElEIGFuZCBhbGwgY2xhaW1zIGZvciB0aGF0IGNoYW5uZWxcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW2xvbmdDaGFubmVsQ2xhaW1JZCwgZGIuQ2VydGlmaWNhdGUuZ2V0U2hvcnRDaGFubmVsSWRGcm9tTG9uZ0NoYW5uZWxJZChsb25nQ2hhbm5lbENsYWltSWQsIGNoYW5uZWxOYW1lKV0pO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoW2xvbmdDaGFubmVsQ2xhaW1JZCwgc2hvcnRDaGFubmVsQ2xhaW1JZF0pID0+IHtcbiAgICAgICAgICBpZiAoIWxvbmdDaGFubmVsQ2xhaW1JZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoTk9fQ0hBTk5FTCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIDMuIHJldHVybiBhbGwgdGhlIGNoYW5uZWwgaW5mb3JtYXRpb25cbiAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lLFxuICAgICAgICAgICAgbG9uZ0NoYW5uZWxDbGFpbUlkLFxuICAgICAgICAgICAgc2hvcnRDaGFubmVsQ2xhaW1JZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSxcbiAgZ2V0Q2hhbm5lbENsYWltcyAoY2hhbm5lbE5hbWUsIGNoYW5uZWxDbGFpbUlkLCBwYWdlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIDEuIGdldCB0aGUgbG9uZyBjaGFubmVsIElkIChtYWtlIHN1cmUgY2hhbm5lbCBleGlzdHMpXG4gICAgICBkYi5DZXJ0aWZpY2F0ZS5nZXRMb25nQ2hhbm5lbElkKGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZClcbiAgICAgICAgLnRoZW4obG9uZ0NoYW5uZWxDbGFpbUlkID0+IHtcbiAgICAgICAgICBpZiAoIWxvbmdDaGFubmVsQ2xhaW1JZCkge1xuICAgICAgICAgICAgcmV0dXJuIFtudWxsLCBudWxsLCBudWxsXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gMi4gZ2V0IHRoZSBzaG9ydCBJRCBhbmQgYWxsIGNsYWltcyBmb3IgdGhhdCBjaGFubmVsXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtsb25nQ2hhbm5lbENsYWltSWQsIGRiLkNsYWltLmdldEFsbENoYW5uZWxDbGFpbXMobG9uZ0NoYW5uZWxDbGFpbUlkKV0pO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoW2xvbmdDaGFubmVsQ2xhaW1JZCwgY2hhbm5lbENsYWltc0FycmF5XSkgPT4ge1xuICAgICAgICAgIGlmICghbG9uZ0NoYW5uZWxDbGFpbUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShOT19DSEFOTkVMKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gMy4gZm9ybWF0IHRoZSBkYXRhIGZvciB0aGUgdmlldywgaW5jbHVkaW5nIHBhZ2luYXRpb25cbiAgICAgICAgICBsZXQgcGFnaW5hdGVkQ2hhbm5lbFZpZXdEYXRhID0gcmV0dXJuUGFnaW5hdGVkQ2hhbm5lbENsYWltcyhjaGFubmVsTmFtZSwgbG9uZ0NoYW5uZWxDbGFpbUlkLCBjaGFubmVsQ2xhaW1zQXJyYXksIHBhZ2UpO1xuICAgICAgICAgIC8vIDQuIHJldHVybiBhbGwgdGhlIGNoYW5uZWwgaW5mb3JtYXRpb24gYW5kIGNvbnRlbnRzXG4gICAgICAgICAgcmVzb2x2ZShwYWdpbmF0ZWRDaGFubmVsVmlld0RhdGEpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxuICBnZXRMb2NhbEZpbGVSZWNvcmQgKGNsYWltSWQsIG5hbWUpIHtcbiAgICByZXR1cm4gZGIuRmlsZS5maW5kT25lKHt3aGVyZToge2NsYWltSWQsIG5hbWV9fSlcbiAgICAgIC50aGVuKGZpbGUgPT4ge1xuICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICByZXR1cm4gTk9fRklMRTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsZS5kYXRhVmFsdWVzO1xuICAgICAgfSk7XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2NvbnRyb2xsZXJzL3NlcnZlQ29udHJvbGxlci5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXJUb1N0cmluZyB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuaW1wb3J0IHsgY3JlYXRlU3RvcmUgfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgUmVkdWNlciBmcm9tICcuLi8uLi9jbGllbnQvcmVkdWNlcnMvaW5kZXgnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBTdGF0aWNSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCBHQUxpc3RlbmVyIGZyb20gJy4uLy4uL2NsaWVudC9jb21wb25lbnRzL0dBTGlzdGVuZXIvaW5kZXgnO1xuaW1wb3J0IEFwcCBmcm9tICcuLi8uLi9jbGllbnQvYXBwJztcbmltcG9ydCByZW5kZXJGdWxsUGFnZSBmcm9tICcuL3JlbmRlckZ1bGxQYWdlLmpzJztcbmltcG9ydCBIZWxtZXQgZnJvbSAncmVhY3QtaGVsbWV0JztcblxubW9kdWxlLmV4cG9ydHMgPSAocmVxLCByZXMpID0+IHtcbiAgbGV0IGNvbnRleHQgPSB7fTtcblxuICAvLyBjcmVhdGUgYSBuZXcgUmVkdXggc3RvcmUgaW5zdGFuY2VcbiAgY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZShSZWR1Y2VyKTtcblxuICAvLyByZW5kZXIgY29tcG9uZW50IHRvIGEgc3RyaW5nXG4gIGNvbnN0IGh0bWwgPSByZW5kZXJUb1N0cmluZyhcbiAgICA8UHJvdmlkZXIgc3RvcmU9e3N0b3JlfT5cbiAgICAgIDxTdGF0aWNSb3V0ZXIgbG9jYXRpb249e3JlcS51cmx9IGNvbnRleHQ9e2NvbnRleHR9PlxuICAgICAgICA8R0FMaXN0ZW5lcj5cbiAgICAgICAgICA8QXBwIC8+XG4gICAgICAgIDwvR0FMaXN0ZW5lcj5cbiAgICAgIDwvU3RhdGljUm91dGVyPlxuICAgIDwvUHJvdmlkZXI+XG4gICk7XG5cbiAgLy8gZ2V0IGhlYWQgdGFncyBmcm9tIGhlbG1ldFxuICBjb25zdCBoZWxtZXQgPSBIZWxtZXQucmVuZGVyU3RhdGljKCk7XG5cbiAgLy8gY2hlY2sgZm9yIGEgcmVkaXJlY3RcbiAgaWYgKGNvbnRleHQudXJsKSB7XG4gICAgLy8gU29tZXdoZXJlIGEgYDxSZWRpcmVjdD5gIHdhcyByZW5kZXJlZFxuICAgIHJldHVybiByZXMucmVkaXJlY3QoMzAxLCBjb250ZXh0LnVybCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gd2UncmUgZ29vZCwgc2VuZCB0aGUgcmVzcG9uc2VcbiAgfVxuXG4gIC8vIGdldCB0aGUgaW5pdGlhbCBzdGF0ZSBmcm9tIG91ciBSZWR1eCBzdG9yZVxuICBjb25zdCBwcmVsb2FkZWRTdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG5cbiAgLy8gc2VuZCB0aGUgcmVuZGVyZWQgcGFnZSBiYWNrIHRvIHRoZSBjbGllbnRcbiAgcmVzLnNlbmQocmVuZGVyRnVsbFBhZ2UoaGVsbWV0LCBodG1sLCBwcmVsb2FkZWRTdGF0ZSkpO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9oZWxwZXJzL2hhbmRsZVBhZ2VSZW5kZXIuanN4IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG9tL3NlcnZlclwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInJlYWN0LWRvbS9zZXJ2ZXJcIlxuLy8gbW9kdWxlIGlkID0gMzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IHsgY29tYmluZVJlZHVjZXJzIH0gZnJvbSAncmVkdXgnO1xuaW1wb3J0IFB1Ymxpc2hSZWR1Y2VyIGZyb20gJ3JlZHVjZXJzL3B1Ymxpc2gnO1xuaW1wb3J0IENoYW5uZWxSZWR1Y2VyIGZyb20gJ3JlZHVjZXJzL2NoYW5uZWwnO1xuaW1wb3J0IFNob3dSZWR1Y2VyIGZyb20gJ3JlZHVjZXJzL3Nob3cnO1xuaW1wb3J0IFNpdGVSZWR1Y2VyIGZyb20gJ3JlZHVjZXJzL3NpdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjb21iaW5lUmVkdWNlcnMoe1xuICBjaGFubmVsOiBDaGFubmVsUmVkdWNlcixcbiAgcHVibGlzaDogUHVibGlzaFJlZHVjZXIsXG4gIHNob3cgICA6IFNob3dSZWR1Y2VyLFxuICBzaXRlICAgOiBTaXRlUmVkdWNlcixcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3JlZHVjZXJzL2luZGV4LmpzIiwiZXhwb3J0IGNvbnN0IEZJTEVfU0VMRUNURUQgPSAnRklMRV9TRUxFQ1RFRCc7XG5leHBvcnQgY29uc3QgRklMRV9DTEVBUiA9ICdGSUxFX0NMRUFSJztcbmV4cG9ydCBjb25zdCBNRVRBREFUQV9VUERBVEUgPSAnTUVUQURBVEFfVVBEQVRFJztcbmV4cG9ydCBjb25zdCBDTEFJTV9VUERBVEUgPSAnQ0xBSU1fVVBEQVRFJztcbmV4cG9ydCBjb25zdCBTRVRfUFVCTElTSF9JTl9DSEFOTkVMID0gJ1NFVF9QVUJMSVNIX0lOX0NIQU5ORUwnO1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hfU1RBVFVTX1VQREFURSA9ICdQVUJMSVNIX1NUQVRVU19VUERBVEUnO1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VQREFURSA9ICdFUlJPUl9VUERBVEUnO1xuZXhwb3J0IGNvbnN0IFNFTEVDVEVEX0NIQU5ORUxfVVBEQVRFID0gJ1NFTEVDVEVEX0NIQU5ORUxfVVBEQVRFJztcbmV4cG9ydCBjb25zdCBUT0dHTEVfTUVUQURBVEFfSU5QVVRTID0gJ1RPR0dMRV9NRVRBREFUQV9JTlBVVFMnO1xuZXhwb3J0IGNvbnN0IFRIVU1CTkFJTF9ORVcgPSAnVEhVTUJOQUlMX05FVyc7XG5leHBvcnQgY29uc3QgUFVCTElTSF9TVEFSVCA9ICdQVUJMSVNIX1NUQVJUJztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb25zdGFudHMvcHVibGlzaF9hY3Rpb25fdHlwZXMuanMiLCJleHBvcnQgY29uc3QgTE9HSU4gPSAnRXhpc3RpbmcnO1xuZXhwb3J0IGNvbnN0IENSRUFURSA9ICdOZXcnO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnN0YW50cy9wdWJsaXNoX2NoYW5uZWxfc2VsZWN0X3N0YXRlcy5qcyIsImV4cG9ydCBjb25zdCBDSEFOTkVMX1VQREFURSA9ICdDSEFOTkVMX1VQREFURSc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29uc3RhbnRzL2NoYW5uZWxfYWN0aW9uX3R5cGVzLmpzIiwiZXhwb3J0IGNvbnN0IExPQ0FMX0NIRUNLID0gJ0xPQ0FMX0NIRUNLJztcbmV4cG9ydCBjb25zdCBVTkFWQUlMQUJMRSA9ICdVTkFWQUlMQUJMRSc7XG5leHBvcnQgY29uc3QgRVJST1IgPSAnRVJST1InO1xuZXhwb3J0IGNvbnN0IEFWQUlMQUJMRSA9ICdBVkFJTEFCTEUnO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnN0YW50cy9hc3NldF9kaXNwbGF5X3N0YXRlcy5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgR29vZ2xlQW5hbHl0aWNzIGZyb20gJ3JlYWN0LWdhJztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmNvbnN0IHsgYW5hbHl0aWNzOiB7IGdvb2dsZUlkIH0gfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbmZpZy9zaXRlQ29uZmlnLmpzJyk7XG5cbkdvb2dsZUFuYWx5dGljcy5pbml0aWFsaXplKGdvb2dsZUlkKTtcblxuY2xhc3MgR0FMaXN0ZW5lciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICB0aGlzLnNlbmRQYWdlVmlldyh0aGlzLnByb3BzLmhpc3RvcnkubG9jYXRpb24pO1xuICAgIHRoaXMucHJvcHMuaGlzdG9yeS5saXN0ZW4odGhpcy5zZW5kUGFnZVZpZXcpO1xuICB9XG5cbiAgc2VuZFBhZ2VWaWV3IChsb2NhdGlvbikge1xuICAgIEdvb2dsZUFuYWx5dGljcy5zZXQoeyBwYWdlOiBsb2NhdGlvbi5wYXRobmFtZSB9KTtcbiAgICBHb29nbGVBbmFseXRpY3MucGFnZXZpZXcobG9jYXRpb24ucGF0aG5hbWUpO1xuICB9XG5cbiAgcmVuZGVyICgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKEdBTGlzdGVuZXIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbXBvbmVudHMvR0FMaXN0ZW5lci9pbmRleC5qc3giLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUm91dGUsIFN3aXRjaCB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IEhvbWVQYWdlIGZyb20gJ3BhZ2VzL0hvbWVQYWdlJzsgLy8gb3IgdXNlIHRoZSBwcm92aWRlZCBsb2NhbCBob21lcGFnZVxuaW1wb3J0IEFib3V0UGFnZSBmcm9tICdwYWdlcy9BYm91dFBhZ2UnO1xuaW1wb3J0IExvZ2luUGFnZSBmcm9tICdwYWdlcy9Mb2dpblBhZ2UnO1xuaW1wb3J0IFNob3dQYWdlIGZyb20gJ3BhZ2VzL1Nob3dQYWdlJztcbmltcG9ydCBGb3VyT2hGb3VyUGFnZSBmcm9tICdjb250YWluZXJzL0ZvdXJPaEZvdXJQYWdlJztcblxuY29uc3QgQXBwID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxTd2l0Y2g+XG4gICAgICA8Um91dGUgZXhhY3QgcGF0aD0nLycgY29tcG9uZW50PXtIb21lUGFnZX0gLz5cbiAgICAgIDxSb3V0ZSBleGFjdCBwYXRoPScvYWJvdXQnIGNvbXBvbmVudD17QWJvdXRQYWdlfSAvPlxuICAgICAgPFJvdXRlIGV4YWN0IHBhdGg9Jy9sb2dpbicgY29tcG9uZW50PXtMb2dpblBhZ2V9IC8+XG4gICAgICA8Um91dGUgZXhhY3QgcGF0aD0nLzppZGVudGlmaWVyLzpjbGFpbScgY29tcG9uZW50PXtTaG93UGFnZX0gLz5cbiAgICAgIDxSb3V0ZSBleGFjdCBwYXRoPScvOmNsYWltJyBjb21wb25lbnQ9e1Nob3dQYWdlfSAvPlxuICAgICAgPFJvdXRlIGNvbXBvbmVudD17Rm91ck9oRm91clBhZ2V9IC8+XG4gICAgPC9Td2l0Y2g+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBcHA7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvYXBwLmpzeCIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBzZWxlY3RGaWxlLCB1cGRhdGVFcnJvciwgY2xlYXJGaWxlIH0gZnJvbSAnYWN0aW9ucy9wdWJsaXNoJztcbmltcG9ydCBWaWV3IGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9ICh7IHB1Ymxpc2ggfSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZpbGUgICAgIDogcHVibGlzaC5maWxlLFxuICAgIHRodW1ibmFpbDogcHVibGlzaC50aHVtYm5haWwsXG4gICAgZmlsZUVycm9yOiBwdWJsaXNoLmVycm9yLmZpbGUsXG4gIH07XG59O1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSBkaXNwYXRjaCA9PiB7XG4gIHJldHVybiB7XG4gICAgc2VsZWN0RmlsZTogKGZpbGUpID0+IHtcbiAgICAgIGRpc3BhdGNoKHNlbGVjdEZpbGUoZmlsZSkpO1xuICAgIH0sXG4gICAgc2V0RmlsZUVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGRpc3BhdGNoKGNsZWFyRmlsZSgpKTtcbiAgICAgIGRpc3BhdGNoKHVwZGF0ZUVycm9yKCdmaWxlJywgdmFsdWUpKTtcbiAgICB9LFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcykoVmlldyk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9Ecm9wem9uZS9pbmRleC5qcyIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyB1cGRhdGVMb2dnZWRJbkNoYW5uZWwgfSBmcm9tICdhY3Rpb25zL2NoYW5uZWwnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcbmltcG9ydCB7dXBkYXRlU2VsZWN0ZWRDaGFubmVsfSBmcm9tICcuLi8uLi9hY3Rpb25zL3B1Ymxpc2gnO1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSBkaXNwYXRjaCA9PiB7XG4gIHJldHVybiB7XG4gICAgb25DaGFubmVsTG9naW46IChuYW1lLCBzaG9ydElkLCBsb25nSWQpID0+IHtcbiAgICAgIGRpc3BhdGNoKHVwZGF0ZUxvZ2dlZEluQ2hhbm5lbChuYW1lLCBzaG9ydElkLCBsb25nSWQpKTtcbiAgICAgIGRpc3BhdGNoKHVwZGF0ZVNlbGVjdGVkQ2hhbm5lbChuYW1lKSk7XG4gICAgfSxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobnVsbCwgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxMb2dpbkZvcm0vaW5kZXguanMiLCJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgdXBkYXRlTG9nZ2VkSW5DaGFubmVsIH0gZnJvbSAnYWN0aW9ucy9jaGFubmVsJztcbmltcG9ydCBWaWV3IGZyb20gJy4vdmlldyc7XG5pbXBvcnQge3VwZGF0ZVNlbGVjdGVkQ2hhbm5lbH0gZnJvbSAnYWN0aW9ucy9wdWJsaXNoJztcblxuY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gZGlzcGF0Y2ggPT4ge1xuICByZXR1cm4ge1xuICAgIG9uQ2hhbm5lbExvZ2luOiAobmFtZSwgc2hvcnRJZCwgbG9uZ0lkKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVMb2dnZWRJbkNoYW5uZWwobmFtZSwgc2hvcnRJZCwgbG9uZ0lkKSk7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVTZWxlY3RlZENoYW5uZWwobmFtZSkpO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG51bGwsIG1hcERpc3BhdGNoVG9Qcm9wcykoVmlldyk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9DaGFubmVsQ3JlYXRlRm9ybS9pbmRleC5qcyIsImV4cG9ydCBjb25zdCBDSEFOTkVMID0gJ0NIQU5ORUwnO1xuZXhwb3J0IGNvbnN0IEFTU0VUX0xJVEUgPSAnQVNTRVRfTElURSc7XG5leHBvcnQgY29uc3QgQVNTRVRfREVUQUlMUyA9ICdBU1NFVF9ERVRBSUxTJztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb25zdGFudHMvc2hvd19yZXF1ZXN0X3R5cGVzLmpzIiwiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBWaWV3IGZyb20gJy4vdmlldyc7XG5pbXBvcnQgeyBmaWxlUmVxdWVzdGVkIH0gZnJvbSAnYWN0aW9ucy9zaG93JztcbmltcG9ydCB7IHNlbGVjdEFzc2V0IH0gZnJvbSAnc2VsZWN0b3JzL3Nob3cnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBzaG93IH0pID0+IHtcbiAgLy8gc2VsZWN0IGVycm9yIGFuZCBzdGF0dXNcbiAgY29uc3QgZXJyb3IgID0gc2hvdy5kaXNwbGF5QXNzZXQuZXJyb3I7XG4gIGNvbnN0IHN0YXR1cyA9IHNob3cuZGlzcGxheUFzc2V0LnN0YXR1cztcbiAgLy8gc2VsZWN0IGFzc2V0XG4gIGNvbnN0IGFzc2V0ID0gc2VsZWN0QXNzZXQoc2hvdyk7XG4gIC8vICByZXR1cm4gcHJvcHNcbiAgcmV0dXJuIHtcbiAgICBlcnJvcixcbiAgICBzdGF0dXMsXG4gICAgYXNzZXQsXG4gIH07XG59O1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSBkaXNwYXRjaCA9PiB7XG4gIHJldHVybiB7XG4gICAgb25GaWxlUmVxdWVzdDogKG5hbWUsIGNsYWltSWQpID0+IHtcbiAgICAgIGRpc3BhdGNoKGZpbGVSZXF1ZXN0ZWQobmFtZSwgY2xhaW1JZCkpO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0Fzc2V0RGlzcGxheS9pbmRleC5qcyIsIm1vZHVsZS5leHBvcnRzID0gKGhlbG1ldCwgaHRtbCwgcHJlbG9hZGVkU3RhdGUpID0+IHtcbiAgLy8gdGFrZSB0aGUgaHRtbCBhbmQgcHJlbG9hZGVkU3RhdGUgYW5kIHJldHVybiB0aGUgZnVsbCBwYWdlXG4gIHJldHVybiBgXG4gICAgPCFET0NUWVBFIGh0bWw+XG4gICAgPGh0bWwgbGFuZz1cImVuXCIgcHJlZml4PVwib2c6IGh0dHA6Ly9vZ3AubWUvbnMjIGZiOiBodHRwOi8vb2dwLm1lL25zL2ZiI1wiPlxuICAgICAgICA8aGVhZD5cbiAgICAgICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICAgICAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MSwgdXNlci1zY2FsYWJsZT1ub1wiPlxuICAgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj1cIlgtVUEtQ29tcGF0aWJsZVwiIGNvbnRlbnQ9XCJpZT1lZGdlXCI+XG4gICAgICAgICAgICA8IS0taGVsbWV0LS0+XG4gICAgICAgICAgICAke2hlbG1ldC50aXRsZS50b1N0cmluZygpfVxuICAgICAgICAgICAgJHtoZWxtZXQubWV0YS50b1N0cmluZygpfVxuICAgICAgICAgICAgJHtoZWxtZXQubGluay50b1N0cmluZygpfVxuICAgICAgICAgICAgPCEtLXN0eWxlIHNoZWV0cy0tPlxuICAgICAgICAgICAgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIvYXNzZXRzL2Nzcy9yZXNldC5jc3NcIiB0eXBlPVwidGV4dC9jc3NcIj5cbiAgICAgICAgICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiL2Fzc2V0cy9jc3MvZ2VuZXJhbC5jc3NcIiB0eXBlPVwidGV4dC9jc3NcIj5cbiAgICAgICAgICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiL2Fzc2V0cy9jc3MvbWVkaWFRdWVyaWVzLmNzc1wiIHR5cGU9XCJ0ZXh0L2Nzc1wiPlxuICAgICAgICAgICAgPCEtLWdvb2dsZSBmb250LS0+XG4gICAgICAgICAgICA8bGluayBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PVJvYm90bzozMDBcIiByZWw9XCJzdHlsZXNoZWV0XCI+XG4gICAgICAgIDwvaGVhZD5cbiAgICAgICAgPGJvZHkgaWQ9XCJtYWluLWJvZHlcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcm93LS10YWxsIGZsZXgtY29udGFpbmVyLS1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicmVhY3QtYXBwXCIgY2xhc3M9XCJyb3cgcm93LS10YWxsIGZsZXgtY29udGFpbmVyLS1jb2x1bW5cIj4ke2h0bWx9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgd2luZG93Ll9fUFJFTE9BREVEX1NUQVRFX18gPSAke0pTT04uc3RyaW5naWZ5KHByZWxvYWRlZFN0YXRlKS5yZXBsYWNlKC88L2csICdcXFxcXFx1MDAzYycpfVxuICAgICAgICAgICAgPC9zY3JpcHQ+XG4gICAgICAgICAgICA8c2NyaXB0IHNyYz1cIi9idW5kbGUvYnVuZGxlLmpzXCI+PC9zY3JpcHQ+XG4gICAgICAgIDwvYm9keT5cbiAgICA8L2h0bWw+XG4gIGA7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvcmVuZGVyRnVsbFBhZ2UuanMiLCJleHBvcnQgY29uc3Qgc2VsZWN0U2l0ZVN0YXRlID0gKHN0YXRlKSA9PiB7XG4gIHJldHVybiBzdGF0ZS5zaXRlO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFNpdGVIb3N0ID0gKHN0YXRlKSA9PiB7XG4gIHJldHVybiBzdGF0ZS5zaXRlLmhvc3Q7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3NlbGVjdG9ycy9zaXRlLmpzIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYmFiZWwtcG9seWZpbGxcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJiYWJlbC1wb2x5ZmlsbFwiXG4vLyBtb2R1bGUgaWQgPSA0NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ3aGF0d2ctZmV0Y2hcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJ3aGF0d2ctZmV0Y2hcIlxuLy8gbW9kdWxlIGlkID0gNDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gYXBwIGRlcGVuZGVuY2llc1xuY29uc3QgZXhwcmVzcyA9IHJlcXVpcmUoJ2V4cHJlc3MnKTtcbmNvbnN0IGJvZHlQYXJzZXIgPSByZXF1aXJlKCdib2R5LXBhcnNlcicpO1xuY29uc3QgZXhwcmVzc0hhbmRsZWJhcnMgPSByZXF1aXJlKCdleHByZXNzLWhhbmRsZWJhcnMnKTtcbmNvbnN0IEhhbmRsZWJhcnMgPSByZXF1aXJlKCdoYW5kbGViYXJzJyk7XG5jb25zdCBoZWxtZXQgPSByZXF1aXJlKCdoZWxtZXQnKTtcbmNvbnN0IHBhc3Nwb3J0ID0gcmVxdWlyZSgncGFzc3BvcnQnKTtcbmNvbnN0IHsgc2VyaWFsaXplU3BlZWNoVXNlciwgZGVzZXJpYWxpemVTcGVlY2hVc2VyIH0gPSByZXF1aXJlKCcuL2hlbHBlcnMvYXV0aEhlbHBlcnMuanMnKTtcbmNvbnN0IGNvb2tpZVNlc3Npb24gPSByZXF1aXJlKCdjb29raWUtc2Vzc2lvbicpO1xuY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbi8vIGxvZ2dpbmcgZGVwZW5kZW5jaWVzXG5jb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG4vLyBjb25maWd1cmUgbG9nZ2VyXG5yZXF1aXJlKCcuL2hlbHBlcnMvY29uZmlndXJlTG9nZ2VyLmpzJykobG9nZ2VyKTtcbnJlcXVpcmUoJy4vaGVscGVycy9jb25maWd1cmVTbGFjay5qcycpKGxvZ2dlcik7XG5cbmNvbnN0IHthdXRoOiB7IHNlc3Npb25LZXkgfSwgZGV0YWlsczogeyBwb3J0OiBQT1JUIH19ID0gcmVxdWlyZSgnLi4vY29uZmlnL3NpdGVDb25maWcuanMnKTtcblxuLy8gY3JlYXRlIGFuIEV4cHJlc3MgYXBwbGljYXRpb25cbmNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcblxuLy8gdHJ1c3QgdGhlIHByb3h5IHRvIGdldCBpcCBhZGRyZXNzIGZvciB1c1xuYXBwLmVuYWJsZSgndHJ1c3QgcHJveHknKTtcblxuLy8gYWRkIG1pZGRsZXdhcmVcbmFwcC51c2UoaGVsbWV0KCkpOyAvLyBzZXQgSFRUUCBoZWFkZXJzIHRvIHByb3RlY3QgYWdhaW5zdCB3ZWxsLWtub3duIHdlYiB2dWxuZXJhYmlsdGllc1xuYXBwLnVzZShleHByZXNzLnN0YXRpYyhgJHtfX2Rpcm5hbWV9L3B1YmxpY2ApKTsgLy8gJ2V4cHJlc3Muc3RhdGljJyB0byBzZXJ2ZSBzdGF0aWMgZmlsZXMgZnJvbSBwdWJsaWMgZGlyZWN0b3J5XG5hcHAudXNlKGJvZHlQYXJzZXIuanNvbigpKTsgLy8gJ2JvZHkgcGFyc2VyJyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi9qc29uXG5hcHAudXNlKGJvZHlQYXJzZXIudXJsZW5jb2RlZCh7IGV4dGVuZGVkOiB0cnVlIH0pKTsgLy8gJ2JvZHkgcGFyc2VyJyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcbmFwcC51c2UoKHJlcSwgcmVzLCBuZXh0KSA9PiB7ICAvLyBjdXN0b20gbG9nZ2luZyBtaWRkbGV3YXJlIHRvIGxvZyBhbGwgaW5jb21pbmcgaHR0cCByZXF1ZXN0c1xuICBsb2dnZXIudmVyYm9zZShgUmVxdWVzdCBvbiAke3JlcS5vcmlnaW5hbFVybH0gZnJvbSAke3JlcS5pcH1gKTtcbiAgbmV4dCgpO1xufSk7XG5cbi8vIGNvbmZpZ3VyZSBwYXNzcG9ydFxucGFzc3BvcnQuc2VyaWFsaXplVXNlcihzZXJpYWxpemVTcGVlY2hVc2VyKTtcbnBhc3Nwb3J0LmRlc2VyaWFsaXplVXNlcihkZXNlcmlhbGl6ZVNwZWVjaFVzZXIpO1xuY29uc3QgbG9jYWxTaWdudXBTdHJhdGVneSA9IHJlcXVpcmUoJy4vcGFzc3BvcnQvbG9jYWwtc2lnbnVwLmpzJyk7XG5jb25zdCBsb2NhbExvZ2luU3RyYXRlZ3kgPSByZXF1aXJlKCcuL3Bhc3Nwb3J0L2xvY2FsLWxvZ2luLmpzJyk7XG5wYXNzcG9ydC51c2UoJ2xvY2FsLXNpZ251cCcsIGxvY2FsU2lnbnVwU3RyYXRlZ3kpO1xucGFzc3BvcnQudXNlKCdsb2NhbC1sb2dpbicsIGxvY2FsTG9naW5TdHJhdGVneSk7XG4vLyBpbml0aWFsaXplIHBhc3Nwb3J0XG5hcHAudXNlKGNvb2tpZVNlc3Npb24oe1xuICBuYW1lICA6ICdzZXNzaW9uJyxcbiAga2V5cyAgOiBbc2Vzc2lvbktleV0sXG4gIG1heEFnZTogMjQgKiA2MCAqIDYwICogMTAwMCwgLy8gaS5lLiAyNCBob3Vyc1xufSkpO1xuYXBwLnVzZShwYXNzcG9ydC5pbml0aWFsaXplKCkpO1xuYXBwLnVzZShwYXNzcG9ydC5zZXNzaW9uKCkpO1xuXG4vLyBjb25maWd1cmUgaGFuZGxlYmFycyAmIHJlZ2lzdGVyIGl0IHdpdGggZXhwcmVzcyBhcHBcbmNvbnN0IGhicyA9IGV4cHJlc3NIYW5kbGViYXJzLmNyZWF0ZSh7XG4gIGRlZmF1bHRMYXlvdXQ6ICdlbWJlZCcsXG4gIGhhbmRsZWJhcnMgICA6IEhhbmRsZWJhcnMsXG59KTtcbmFwcC5lbmdpbmUoJ2hhbmRsZWJhcnMnLCBoYnMuZW5naW5lKTtcbmFwcC5zZXQoJ3ZpZXcgZW5naW5lJywgJ2hhbmRsZWJhcnMnKTtcblxuLy8gc2V0IHRoZSByb3V0ZXMgb24gdGhlIGFwcFxucmVxdWlyZSgnLi9yb3V0ZXMvYXV0aC1yb3V0ZXMuanMnKShhcHApO1xucmVxdWlyZSgnLi9yb3V0ZXMvYXBpLXJvdXRlcy5qcycpKGFwcCk7XG5yZXF1aXJlKCcuL3JvdXRlcy9wYWdlLXJvdXRlcy5qcycpKGFwcCk7XG5yZXF1aXJlKCcuL3JvdXRlcy9hc3NldC1yb3V0ZXMuanMnKShhcHApO1xucmVxdWlyZSgnLi9yb3V0ZXMvZmFsbGJhY2stcm91dGVzLmpzJykoYXBwKTtcblxuLy8gY3JlYXRlIHNlcnZlclxuY29uc3Qgc2VydmVyID0gaHR0cC5TZXJ2ZXIoYXBwKTtcblxuLy8gc3luYyBzZXF1ZWxpemVcbmNvbnN0IGRiID0gcmVxdWlyZSgnLi9tb2RlbHMvaW5kZXgnKTtcbmRiLnNlcXVlbGl6ZS5zeW5jKClcbiAgLy8gc3RhcnQgdGhlIHNlcnZlclxuICAudGhlbigoKSA9PiB7XG4gICAgc2VydmVyLmxpc3RlbihQT1JULCAoKSA9PiB7XG4gICAgICBsb2dnZXIuaW5mbyhgU2VydmVyIGlzIGxpc3RlbmluZyBvbiBQT1JUICR7UE9SVH1gKTtcbiAgICB9KTtcbiAgfSlcbiAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGxvZ2dlci5lcnJvcihgU3RhcnR1cCBFcnJvcjpgLCBlcnJvcik7XG4gIH0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL3NlcnZlci5qcyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV4cHJlc3NcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJleHByZXNzXCJcbi8vIG1vZHVsZSBpZCA9IDQ5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJvZHktcGFyc2VyXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwiYm9keS1wYXJzZXJcIlxuLy8gbW9kdWxlIGlkID0gNTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZXhwcmVzcy1oYW5kbGViYXJzXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwiZXhwcmVzcy1oYW5kbGViYXJzXCJcbi8vIG1vZHVsZSBpZCA9IDUxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImhhbmRsZWJhcnNcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJoYW5kbGViYXJzXCJcbi8vIG1vZHVsZSBpZCA9IDUyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImhlbG1ldFwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcImhlbG1ldFwiXG4vLyBtb2R1bGUgaWQgPSA1M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJjb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXJpYWxpemVTcGVlY2hVc2VyICh1c2VyLCBkb25lKSB7ICAvLyByZXR1cm5zIHVzZXIgZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gc2Vzc2lvblxuICAgIGxvZ2dlci5kZWJ1Zygnc2VyaWFsaXppbmcgdXNlcicpO1xuICAgIGRvbmUobnVsbCwgdXNlcik7XG4gIH0sXG4gIGRlc2VyaWFsaXplU3BlZWNoVXNlciAodXNlciwgZG9uZSkgeyAgLy8gZGVzZXJpYWxpemVzIHNlc3Npb24gYW5kIHBvcHVsYXRlcyBhZGRpdGlvbmFsIGluZm8gdG8gcmVxLnVzZXJcbiAgICBsb2dnZXIuZGVidWcoJ2Rlc2VyaWFsaXppbmcgdXNlcicpO1xuICAgIGRvbmUobnVsbCwgdXNlcik7XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvYXV0aEhlbHBlcnMuanMiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb29raWUtc2Vzc2lvblwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcImNvb2tpZS1zZXNzaW9uXCJcbi8vIG1vZHVsZSBpZCA9IDU1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0dHBcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJodHRwXCJcbi8vIG1vZHVsZSBpZCA9IDU2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImNvbnN0IHsgbG9nTGV2ZWwgfSA9IHJlcXVpcmUoJy4uLy4uL2NvbmZpZy9sb2dnZXJDb25maWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAod2luc3RvbikgPT4ge1xuICAvLyBjb25maWd1cmVcbiAgd2luc3Rvbi5jb25maWd1cmUoe1xuICAgIHRyYW5zcG9ydHM6IFtcbiAgICAgIG5ldyAod2luc3Rvbi50cmFuc3BvcnRzLkNvbnNvbGUpKHtcbiAgICAgICAgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgIDogbG9nTGV2ZWwsXG4gICAgICAgIHRpbWVzdGFtcCAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICBjb2xvcml6ZSAgICAgICAgICAgICAgICAgICAgICAgOiB0cnVlLFxuICAgICAgICBwcmV0dHlQcmludCAgICAgICAgICAgICAgICAgICAgOiB0cnVlLFxuICAgICAgICBoYW5kbGVFeGNlcHRpb25zICAgICAgICAgICAgICAgOiB0cnVlLFxuICAgICAgICBodW1hblJlYWRhYmxlVW5oYW5kbGVkRXhjZXB0aW9uOiB0cnVlLFxuICAgICAgfSksXG4gICAgXSxcbiAgfSk7XG4gIC8vIHRlc3QgYWxsIHRoZSBsb2cgbGV2ZWxzXG4gIHdpbnN0b24uZXJyb3IoJ0xldmVsIDAnKTtcbiAgd2luc3Rvbi53YXJuKCdMZXZlbCAxJyk7XG4gIHdpbnN0b24uaW5mbygnTGV2ZWwgMicpO1xuICB3aW5zdG9uLnZlcmJvc2UoJ0xldmVsIDMnKTtcbiAgd2luc3Rvbi5kZWJ1ZygnTGV2ZWwgNCcpO1xuICB3aW5zdG9uLnNpbGx5KCdMZXZlbCA1Jyk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvY29uZmlndXJlTG9nZ2VyLmpzIiwiY29uc3QgbG9nZ2VyQ29uZmlnID0ge1xuICBsb2dMZXZlbDogJ2RlYnVnJywgIC8vIG9wdGlvbnM6IHNpbGx5LCBkZWJ1ZywgdmVyYm9zZSwgaW5mb1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBsb2dnZXJDb25maWc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb25maWcvbG9nZ2VyQ29uZmlnLmpzIiwiY29uc3Qgd2luc3RvblNsYWNrV2ViSG9vayA9IHJlcXVpcmUoJ3dpbnN0b24tc2xhY2std2ViaG9vaycpLlNsYWNrV2ViSG9vaztcbmNvbnN0IHNsYWNrQ29uZmlnID0gcmVxdWlyZSgnLi4vLi4vY29uZmlnL3NsYWNrQ29uZmlnLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKHdpbnN0b24pID0+IHtcbiAgY29uc3Qge3NsYWNrV2ViSG9vaywgc2xhY2tFcnJvckNoYW5uZWwsIHNsYWNrSW5mb0NoYW5uZWx9ID0gc2xhY2tDb25maWc7XG4gIGlmIChzbGFja1dlYkhvb2spIHtcbiAgICAvLyBhZGQgYSB0cmFuc3BvcnQgZm9yIGVycm9ycyB0byBzbGFja1xuICAgIGlmIChzbGFja0Vycm9yQ2hhbm5lbCkge1xuICAgICAgd2luc3Rvbi5hZGQod2luc3RvblNsYWNrV2ViSG9vaywge1xuICAgICAgICBuYW1lICAgICAgOiAnc2xhY2stZXJyb3JzLXRyYW5zcG9ydCcsXG4gICAgICAgIGxldmVsICAgICA6ICd3YXJuJyxcbiAgICAgICAgd2ViaG9va1VybDogc2xhY2tXZWJIb29rLFxuICAgICAgICBjaGFubmVsICAgOiBzbGFja0Vycm9yQ2hhbm5lbCxcbiAgICAgICAgdXNlcm5hbWUgIDogJ3NwZWUuY2gnLFxuICAgICAgICBpY29uRW1vamkgOiAnOmZhY2Vfd2l0aF9oZWFkX2JhbmRhZ2U6JyxcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKHNsYWNrSW5mb0NoYW5uZWwpIHtcbiAgICAgIHdpbnN0b24uYWRkKHdpbnN0b25TbGFja1dlYkhvb2ssIHtcbiAgICAgICAgbmFtZSAgICAgIDogJ3NsYWNrLWluZm8tdHJhbnNwb3J0JyxcbiAgICAgICAgbGV2ZWwgICAgIDogJ2luZm8nLFxuICAgICAgICB3ZWJob29rVXJsOiBzbGFja1dlYkhvb2ssXG4gICAgICAgIGNoYW5uZWwgICA6IHNsYWNrSW5mb0NoYW5uZWwsXG4gICAgICAgIHVzZXJuYW1lICA6ICdzcGVlLmNoJyxcbiAgICAgICAgaWNvbkVtb2ppIDogJzpuZXJkX2ZhY2U6JyxcbiAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gc2VuZCB0ZXN0IG1lc3NhZ2VcbiAgICB3aW5zdG9uLmVycm9yKCdTbGFjayBcImVycm9yXCIgbG9nZ2luZyBpcyBvbmxpbmUuJyk7XG4gICAgd2luc3Rvbi5pbmZvKCdTbGFjayBcImluZm9cIiBsb2dnaW5nIGlzIG9ubGluZS4nKTtcbiAgfSBlbHNlIHtcbiAgICB3aW5zdG9uLndhcm4oJ1NsYWNrIGxvZ2dpbmcgaXMgbm90IGVuYWJsZWQgYmVjYXVzZSBubyBzbGFja1dlYkhvb2sgY29uZmlnIHZhciBwcm92aWRlZC4nKTtcbiAgfVxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9oZWxwZXJzL2NvbmZpZ3VyZVNsYWNrLmpzIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwid2luc3Rvbi1zbGFjay13ZWJob29rXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwid2luc3Rvbi1zbGFjay13ZWJob29rXCJcbi8vIG1vZHVsZSBpZCA9IDYwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImZ1bmN0aW9uIFNsYWNrQ29uZmlnICgpIHtcbiAgdGhpcy5zbGFja1dlYkhvb2sgICAgICA9ICdkZWZhdWx0JztcbiAgdGhpcy5zbGFja0Vycm9yQ2hhbm5lbCA9ICdkZWZhdWx0JztcbiAgdGhpcy5zbGFja0luZm9DaGFubmVsICA9ICdkZWZhdWx0Jztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFNsYWNrQ29uZmlnKCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb25maWcvc2xhY2tDb25maWcuanMiLCJjb25zdCBQYXNzcG9ydExvY2FsU3RyYXRlZ3kgPSByZXF1aXJlKCdwYXNzcG9ydC1sb2NhbCcpLlN0cmF0ZWd5O1xuY29uc3QgbGJyeUFwaSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbGJyeUFwaS5qcycpO1xuY29uc3QgbG9nZ2VyID0gcmVxdWlyZSgnd2luc3RvbicpO1xuY29uc3QgZGIgPSByZXF1aXJlKCcuLi9tb2RlbHMvaW5kZXgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgUGFzc3BvcnRMb2NhbFN0cmF0ZWd5KFxuICB7XG4gICAgdXNlcm5hbWVGaWVsZDogJ3VzZXJuYW1lJyxcbiAgICBwYXNzd29yZEZpZWxkOiAncGFzc3dvcmQnLFxuICB9LFxuICAodXNlcm5hbWUsIHBhc3N3b3JkLCBkb25lKSA9PiB7XG4gICAgbG9nZ2VyLnZlcmJvc2UoYG5ldyBjaGFubmVsIHNpZ251cCByZXF1ZXN0LiB1c2VyOiAke3VzZXJuYW1lfSBwYXNzOiAke3Bhc3N3b3JkfSAuYCk7XG4gICAgbGV0IHVzZXJJbmZvID0ge307XG4gICAgLy8gc2VydmVyLXNpZGUgdmFsaWRhdG9uIG9mIGlucHV0cyAodXNlcm5hbWUsIHBhc3N3b3JkKVxuXG4gICAgLy8gY3JlYXRlIHRoZSBjaGFubmVsIGFuZCByZXRyaWV2ZSB0aGUgbWV0YWRhdGFcbiAgICByZXR1cm4gbGJyeUFwaS5jcmVhdGVDaGFubmVsKGBAJHt1c2VybmFtZX1gKVxuICAgICAgLnRoZW4odHggPT4ge1xuICAgICAgICAvLyBjcmVhdGUgdXNlciByZWNvcmRcbiAgICAgICAgY29uc3QgdXNlckRhdGEgPSB7XG4gICAgICAgICAgdXNlck5hbWU6IHVzZXJuYW1lLFxuICAgICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCxcbiAgICAgICAgfTtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoJ3VzZXJEYXRhID4nLCB1c2VyRGF0YSk7XG4gICAgICAgIC8vIGNyZWF0ZSB1c2VyIHJlY29yZFxuICAgICAgICBjb25zdCBjaGFubmVsRGF0YSA9IHtcbiAgICAgICAgICBjaGFubmVsTmFtZSAgIDogYEAke3VzZXJuYW1lfWAsXG4gICAgICAgICAgY2hhbm5lbENsYWltSWQ6IHR4LmNsYWltX2lkLFxuICAgICAgICB9O1xuICAgICAgICBsb2dnZXIudmVyYm9zZSgnY2hhbm5lbERhdGEgPicsIGNoYW5uZWxEYXRhKTtcbiAgICAgICAgLy8gY3JlYXRlIGNlcnRpZmljYXRlIHJlY29yZFxuICAgICAgICBjb25zdCBjZXJ0aWZpY2F0ZURhdGEgPSB7XG4gICAgICAgICAgY2xhaW1JZDogdHguY2xhaW1faWQsXG4gICAgICAgICAgbmFtZSAgIDogYEAke3VzZXJuYW1lfWAsXG4gICAgICAgICAgLy8gYWRkcmVzcyxcbiAgICAgICAgfTtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoJ2NlcnRpZmljYXRlRGF0YSA+JywgY2VydGlmaWNhdGVEYXRhKTtcbiAgICAgICAgLy8gc2F2ZSB1c2VyIGFuZCBjZXJ0aWZpY2F0ZSB0byBkYlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW2RiLlVzZXIuY3JlYXRlKHVzZXJEYXRhKSwgZGIuQ2hhbm5lbC5jcmVhdGUoY2hhbm5lbERhdGEpLCBkYi5DZXJ0aWZpY2F0ZS5jcmVhdGUoY2VydGlmaWNhdGVEYXRhKV0pO1xuICAgICAgfSlcbiAgICAgIC50aGVuKChbbmV3VXNlciwgbmV3Q2hhbm5lbCwgbmV3Q2VydGlmaWNhdGVdKSA9PiB7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKCd1c2VyIGFuZCBjZXJ0aWZpY2F0ZSBzdWNjZXNzZnVsbHkgY3JlYXRlZCcpO1xuICAgICAgICAvLyBzdG9yZSB0aGUgcmVsZXZhbnQgbmV3VXNlciBpbmZvIHRvIGJlIHBhc3NlZCBiYWNrIGZvciByZXEuVXNlclxuICAgICAgICB1c2VySW5mb1snaWQnXSA9IG5ld1VzZXIuaWQ7XG4gICAgICAgIHVzZXJJbmZvWyd1c2VyTmFtZSddID0gbmV3VXNlci51c2VyTmFtZTtcbiAgICAgICAgdXNlckluZm9bJ2NoYW5uZWxOYW1lJ10gPSBuZXdDaGFubmVsLmNoYW5uZWxOYW1lO1xuICAgICAgICB1c2VySW5mb1snY2hhbm5lbENsYWltSWQnXSA9IG5ld0NoYW5uZWwuY2hhbm5lbENsYWltSWQ7XG4gICAgICAgIC8vIGFzc29jaWF0ZSB0aGUgaW5zdGFuY2VzXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbbmV3Q2VydGlmaWNhdGUuc2V0Q2hhbm5lbChuZXdDaGFubmVsKSwgbmV3Q2hhbm5lbC5zZXRVc2VyKG5ld1VzZXIpXSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBsb2dnZXIudmVyYm9zZSgndXNlciBhbmQgY2VydGlmaWNhdGUgc3VjY2Vzc2Z1bGx5IGFzc29jaWF0ZWQnKTtcbiAgICAgICAgcmV0dXJuIGRiLkNlcnRpZmljYXRlLmdldFNob3J0Q2hhbm5lbElkRnJvbUxvbmdDaGFubmVsSWQodXNlckluZm8uY2hhbm5lbENsYWltSWQsIHVzZXJJbmZvLmNoYW5uZWxOYW1lKTtcbiAgICAgIH0pXG4gICAgICAudGhlbihzaG9ydENoYW5uZWxJZCA9PiB7XG4gICAgICAgIHVzZXJJbmZvWydzaG9ydENoYW5uZWxJZCddID0gc2hvcnRDaGFubmVsSWQ7XG4gICAgICAgIHJldHVybiBkb25lKG51bGwsIHVzZXJJbmZvKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ3NpZ251cCBlcnJvcicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIGRvbmUoZXJyb3IpO1xuICAgICAgfSk7XG4gIH1cbik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2ZXIvcGFzc3BvcnQvbG9jYWwtc2lnbnVwLmpzIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYXhpb3NcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJheGlvc1wiXG4vLyBtb2R1bGUgaWQgPSA2M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJjb25zdCBsYnJ5Q29uZmlnID0ge1xuICBhcGk6IHtcbiAgICBhcGlIb3N0OiAnbG9jYWxob3N0JyxcbiAgICBhcGlQb3J0OiAnNTI3OScsXG4gIH0sXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxicnlDb25maWc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb25maWcvbGJyeUNvbmZpZy5qcyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInVuaXZlcnNhbC1hbmFseXRpY3NcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJ1bml2ZXJzYWwtYW5hbHl0aWNzXCJcbi8vIG1vZHVsZSBpZCA9IDY1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImZ1bmN0aW9uIE15c3FsQ29uZmlnICgpIHtcbiAgdGhpcy5kYXRhYmFzZSA9ICdkZWZhdWx0JztcbiAgdGhpcy51c2VybmFtZSA9ICdkZWZhdWx0JztcbiAgdGhpcy5wYXNzd29yZCA9ICdkZWZhdWx0Jztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IE15c3FsQ29uZmlnKCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb25maWcvbXlzcWxDb25maWcuanMiLCJjb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5jb25zdCB7IHJldHVyblNob3J0SWQgfSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvc2VxdWVsaXplSGVscGVycy5qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChzZXF1ZWxpemUsIHsgU1RSSU5HLCBCT09MRUFOLCBJTlRFR0VSLCBURVhULCBERUNJTUFMIH0pID0+IHtcbiAgY29uc3QgQ2VydGlmaWNhdGUgPSBzZXF1ZWxpemUuZGVmaW5lKFxuICAgICdDZXJ0aWZpY2F0ZScsXG4gICAge1xuICAgICAgYWRkcmVzczoge1xuICAgICAgICB0eXBlICAgOiBTVFJJTkcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgYW1vdW50OiB7XG4gICAgICAgIHR5cGUgICA6IERFQ0lNQUwoMTksIDgpLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGNsYWltSWQ6IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGNsYWltU2VxdWVuY2U6IHtcbiAgICAgICAgdHlwZSAgIDogSU5URUdFUixcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBkZWNvZGVkQ2xhaW06IHtcbiAgICAgICAgdHlwZSAgIDogQk9PTEVBTixcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBkZXB0aDoge1xuICAgICAgICB0eXBlICAgOiBJTlRFR0VSLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGVmZmVjdGl2ZUFtb3VudDoge1xuICAgICAgICB0eXBlICAgOiBERUNJTUFMKDE5LCA4KSxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBoYXNTaWduYXR1cmU6IHtcbiAgICAgICAgdHlwZSAgIDogQk9PTEVBTixcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBoZWlnaHQ6IHtcbiAgICAgICAgdHlwZSAgIDogSU5URUdFUixcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBoZXg6IHtcbiAgICAgICAgdHlwZSAgIDogVEVYVCgnbG9uZycpLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIG5hbWU6IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIG5vdXQ6IHtcbiAgICAgICAgdHlwZSAgIDogSU5URUdFUixcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICB0eGlkOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICB2YWxpZEF0SGVpZ2h0OiB7XG4gICAgICAgIHR5cGUgICA6IElOVEVHRVIsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgb3V0cG9pbnQ6IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIHZhbHVlVmVyc2lvbjoge1xuICAgICAgICB0eXBlICAgOiBTVFJJTkcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgY2xhaW1UeXBlOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBjZXJ0aWZpY2F0ZVZlcnNpb246IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGtleVR5cGU6IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIHB1YmxpY0tleToge1xuICAgICAgICB0eXBlICAgOiBURVhUKCdsb25nJyksXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgZnJlZXplVGFibGVOYW1lOiB0cnVlLFxuICAgIH1cbiAgKTtcblxuICBDZXJ0aWZpY2F0ZS5hc3NvY2lhdGUgPSBkYiA9PiB7XG4gICAgQ2VydGlmaWNhdGUuYmVsb25nc1RvKGRiLkNoYW5uZWwsIHtcbiAgICAgIGZvcmVpZ25LZXk6IHtcbiAgICAgICAgYWxsb3dOdWxsOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcblxuICBDZXJ0aWZpY2F0ZS5nZXRTaG9ydENoYW5uZWxJZEZyb21Mb25nQ2hhbm5lbElkID0gZnVuY3Rpb24gKGxvbmdDaGFubmVsSWQsIGNoYW5uZWxOYW1lKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBnZXRTaG9ydENoYW5uZWxJZEZyb21Mb25nQ2hhbm5lbElkICR7Y2hhbm5lbE5hbWV9OiR7bG9uZ0NoYW5uZWxJZH1gKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpc1xuICAgICAgICAuZmluZEFsbCh7XG4gICAgICAgICAgd2hlcmU6IHtuYW1lOiBjaGFubmVsTmFtZX0sXG4gICAgICAgICAgb3JkZXI6IFtbJ2hlaWdodCcsICdBU0MnXV0sXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgc3dpdGNoIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY2hhbm5lbChzKSBmb3VuZCB3aXRoIHRoYXQgY2hhbm5lbCBuYW1lJyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXR1cm5TaG9ydElkKHJlc3VsdCwgbG9uZ0NoYW5uZWxJZCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBDZXJ0aWZpY2F0ZS5nZXRMb25nQ2hhbm5lbElkRnJvbVNob3J0Q2hhbm5lbElkID0gZnVuY3Rpb24gKGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgZ2V0TG9uZ0NoYW5uZWxJZEZyb21TaG9ydENoYW5uZWxJZCgke2NoYW5uZWxOYW1lfSwgJHtjaGFubmVsQ2xhaW1JZH0pYCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXNcbiAgICAgICAgLmZpbmRBbGwoe1xuICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICBuYW1lICAgOiBjaGFubmVsTmFtZSxcbiAgICAgICAgICAgIGNsYWltSWQ6IHtcbiAgICAgICAgICAgICAgJGxpa2U6IGAke2NoYW5uZWxDbGFpbUlkfSVgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9yZGVyOiBbWydoZWlnaHQnLCAnQVNDJ11dLFxuICAgICAgICB9KVxuICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIHN3aXRjaCAocmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIG5vdGUgcmVzdWx0cyBtdXN0IGJlIHNvcnRlZFxuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXN1bHRbMF0uY2xhaW1JZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIENlcnRpZmljYXRlLmdldExvbmdDaGFubmVsSWRGcm9tQ2hhbm5lbE5hbWUgPSBmdW5jdGlvbiAoY2hhbm5lbE5hbWUpIHtcbiAgICBsb2dnZXIuZGVidWcoYGdldExvbmdDaGFubmVsSWRGcm9tQ2hhbm5lbE5hbWUoJHtjaGFubmVsTmFtZX0pYCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXNcbiAgICAgICAgLmZpbmRBbGwoe1xuICAgICAgICAgIHdoZXJlOiB7IG5hbWU6IGNoYW5uZWxOYW1lIH0sXG4gICAgICAgICAgb3JkZXI6IFtbJ2VmZmVjdGl2ZUFtb3VudCcsICdERVNDJ10sIFsnaGVpZ2h0JywgJ0FTQyddXSxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXN1bHRbMF0uY2xhaW1JZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIENlcnRpZmljYXRlLnZhbGlkYXRlTG9uZ0NoYW5uZWxJZCA9IGZ1bmN0aW9uIChuYW1lLCBjbGFpbUlkKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGB2YWxpZGF0ZUxvbmdDaGFubmVsSWQoJHtuYW1lfSwgJHtjbGFpbUlkfSlgKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5maW5kT25lKHtcbiAgICAgICAgd2hlcmU6IHtuYW1lLCBjbGFpbUlkfSxcbiAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKG51bGwpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmVzb2x2ZShjbGFpbUlkKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBDZXJ0aWZpY2F0ZS5nZXRMb25nQ2hhbm5lbElkID0gZnVuY3Rpb24gKGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgZ2V0TG9uZ0NoYW5uZWxJZCgke2NoYW5uZWxOYW1lfSwgJHtjaGFubmVsQ2xhaW1JZH0pYCk7XG4gICAgaWYgKGNoYW5uZWxDbGFpbUlkICYmIChjaGFubmVsQ2xhaW1JZC5sZW5ndGggPT09IDQwKSkgeyAgLy8gaWYgYSBmdWxsIGNoYW5uZWwgaWQgaXMgcHJvdmlkZWRcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlTG9uZ0NoYW5uZWxJZChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQpO1xuICAgIH0gZWxzZSBpZiAoY2hhbm5lbENsYWltSWQgJiYgY2hhbm5lbENsYWltSWQubGVuZ3RoIDwgNDApIHsgIC8vIGlmIGEgc2hvcnQgY2hhbm5lbCBpZCBpcyBwcm92aWRlZFxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9uZ0NoYW5uZWxJZEZyb21TaG9ydENoYW5uZWxJZChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMb25nQ2hhbm5lbElkRnJvbUNoYW5uZWxOYW1lKGNoYW5uZWxOYW1lKTsgIC8vIGlmIG5vIGNoYW5uZWwgaWQgcHJvdmlkZWRcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENlcnRpZmljYXRlO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9tb2RlbHMvY2VydGlmaWNhdGUuanMiLCJtb2R1bGUuZXhwb3J0cyA9IChzZXF1ZWxpemUsIHsgU1RSSU5HIH0pID0+IHtcbiAgY29uc3QgQ2hhbm5lbCA9IHNlcXVlbGl6ZS5kZWZpbmUoXG4gICAgJ0NoYW5uZWwnLFxuICAgIHtcbiAgICAgIGNoYW5uZWxOYW1lOiB7XG4gICAgICAgIHR5cGUgICAgIDogU1RSSU5HLFxuICAgICAgICBhbGxvd051bGw6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGNoYW5uZWxDbGFpbUlkOiB7XG4gICAgICAgIHR5cGUgICAgIDogU1RSSU5HLFxuICAgICAgICBhbGxvd051bGw6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGZyZWV6ZVRhYmxlTmFtZTogdHJ1ZSxcbiAgICB9XG4gICk7XG5cbiAgQ2hhbm5lbC5hc3NvY2lhdGUgPSBkYiA9PiB7XG4gICAgQ2hhbm5lbC5iZWxvbmdzVG8oZGIuVXNlcik7XG4gICAgQ2hhbm5lbC5oYXNPbmUoZGIuQ2VydGlmaWNhdGUpO1xuICB9O1xuXG4gIHJldHVybiBDaGFubmVsO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9tb2RlbHMvY2hhbm5lbC5qcyIsImNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJ3dpbnN0b24nKTtcbmNvbnN0IHsgcmV0dXJuU2hvcnRJZCB9ID0gcmVxdWlyZSgnLi4vaGVscGVycy9zZXF1ZWxpemVIZWxwZXJzLmpzJyk7XG5jb25zdCB7IGFzc2V0RGVmYXVsdHM6IHsgdGh1bWJuYWlsOiBkZWZhdWx0VGh1bWJuYWlsIH0sIGRldGFpbHM6IHsgaG9zdCB9IH0gPSByZXF1aXJlKCcuLi8uLi9jb25maWcvc2l0ZUNvbmZpZy5qcycpO1xuXG5mdW5jdGlvbiBkZXRlcm1pbmVGaWxlRXh0ZW5zaW9uRnJvbUNvbnRlbnRUeXBlIChjb250ZW50VHlwZSkge1xuICBzd2l0Y2ggKGNvbnRlbnRUeXBlKSB7XG4gICAgY2FzZSAnaW1hZ2UvanBlZyc6XG4gICAgY2FzZSAnaW1hZ2UvanBnJzpcbiAgICAgIHJldHVybiAnanBlZyc7XG4gICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgIHJldHVybiAncG5nJztcbiAgICBjYXNlICdpbWFnZS9naWYnOlxuICAgICAgcmV0dXJuICdnaWYnO1xuICAgIGNhc2UgJ3ZpZGVvL21wNCc6XG4gICAgICByZXR1cm4gJ21wNCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIGxvZ2dlci5kZWJ1Zygnc2V0dGluZyB1bmtub3duIGZpbGUgdHlwZSBhcyBmaWxlIGV4dGVuc2lvbiBqcGVnJyk7XG4gICAgICByZXR1cm4gJ2pwZWcnO1xuICB9XG59O1xuXG5mdW5jdGlvbiBkZXRlcm1pbmVUaHVtYm5haWwgKHN0b3JlZFRodW1ibmFpbCwgZGVmYXVsdFRodW1ibmFpbCkge1xuICBpZiAoc3RvcmVkVGh1bWJuYWlsID09PSAnJykge1xuICAgIHJldHVybiBkZWZhdWx0VGh1bWJuYWlsO1xuICB9XG4gIHJldHVybiBzdG9yZWRUaHVtYm5haWw7XG59O1xuXG5mdW5jdGlvbiBwcmVwYXJlQ2xhaW1EYXRhIChjbGFpbSkge1xuICAvLyBsb2dnZXIuZGVidWcoJ3ByZXBhcmluZyBjbGFpbSBkYXRhIGJhc2VkIG9uIHJlc29sdmVkIGRhdGE6JywgY2xhaW0pO1xuICBjbGFpbVsndGh1bWJuYWlsJ10gPSBkZXRlcm1pbmVUaHVtYm5haWwoY2xhaW0udGh1bWJuYWlsLCBkZWZhdWx0VGh1bWJuYWlsKTtcbiAgY2xhaW1bJ2ZpbGVFeHQnXSA9IGRldGVybWluZUZpbGVFeHRlbnNpb25Gcm9tQ29udGVudFR5cGUoY2xhaW0uY29udGVudFR5cGUpO1xuICBjbGFpbVsnaG9zdCddID0gaG9zdDtcbiAgcmV0dXJuIGNsYWltO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSAoc2VxdWVsaXplLCB7IFNUUklORywgQk9PTEVBTiwgSU5URUdFUiwgVEVYVCwgREVDSU1BTCB9KSA9PiB7XG4gIGNvbnN0IENsYWltID0gc2VxdWVsaXplLmRlZmluZShcbiAgICAnQ2xhaW0nLFxuICAgIHtcbiAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGFtb3VudDoge1xuICAgICAgICB0eXBlICAgOiBERUNJTUFMKDE5LCA4KSxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBjbGFpbUlkOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBjbGFpbVNlcXVlbmNlOiB7XG4gICAgICAgIHR5cGUgICA6IElOVEVHRVIsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgZGVjb2RlZENsYWltOiB7XG4gICAgICAgIHR5cGUgICA6IEJPT0xFQU4sXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgZGVwdGg6IHtcbiAgICAgICAgdHlwZSAgIDogSU5URUdFUixcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBlZmZlY3RpdmVBbW91bnQ6IHtcbiAgICAgICAgdHlwZSAgIDogREVDSU1BTCgxOSwgOCksXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgaGFzU2lnbmF0dXJlOiB7XG4gICAgICAgIHR5cGUgICA6IEJPT0xFQU4sXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgaGVpZ2h0OiB7XG4gICAgICAgIHR5cGUgICA6IElOVEVHRVIsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgaGV4OiB7XG4gICAgICAgIHR5cGUgICA6IFRFWFQoJ2xvbmcnKSxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBuYW1lOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBub3V0OiB7XG4gICAgICAgIHR5cGUgICA6IElOVEVHRVIsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgdHhpZDoge1xuICAgICAgICB0eXBlICAgOiBTVFJJTkcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgdmFsaWRBdEhlaWdodDoge1xuICAgICAgICB0eXBlICAgOiBJTlRFR0VSLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIG91dHBvaW50OiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBjbGFpbVR5cGU6IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGNlcnRpZmljYXRlSWQ6IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGF1dGhvcjoge1xuICAgICAgICB0eXBlICAgOiBTVFJJTkcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZSAgIDogVEVYVCgnbG9uZycpLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBsaWNlbnNlOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBsaWNlbnNlVXJsOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBuc2Z3OiB7XG4gICAgICAgIHR5cGUgICA6IEJPT0xFQU4sXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgcHJldmlldzoge1xuICAgICAgICB0eXBlICAgOiBTVFJJTkcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgdGh1bWJuYWlsOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICB0aXRsZToge1xuICAgICAgICB0eXBlICAgOiBTVFJJTkcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgbWV0YWRhdGFWZXJzaW9uOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBjb250ZW50VHlwZToge1xuICAgICAgICB0eXBlICAgOiBTVFJJTkcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgc291cmNlOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBzb3VyY2VUeXBlOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBzb3VyY2VWZXJzaW9uOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBzdHJlYW1WZXJzaW9uOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICB2YWx1ZVZlcnNpb246IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGNoYW5uZWxOYW1lOiB7XG4gICAgICAgIHR5cGUgICAgIDogU1RSSU5HLFxuICAgICAgICBhbGxvd051bGw6IHRydWUsXG4gICAgICAgIGRlZmF1bHQgIDogbnVsbCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBmcmVlemVUYWJsZU5hbWU6IHRydWUsXG4gICAgfVxuICApO1xuXG4gIENsYWltLmFzc29jaWF0ZSA9IGRiID0+IHtcbiAgICBDbGFpbS5iZWxvbmdzVG8oZGIuRmlsZSwge1xuICAgICAgZm9yZWlnbktleToge1xuICAgICAgICBhbGxvd051bGw6IHRydWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuXG4gIENsYWltLmdldFNob3J0Q2xhaW1JZEZyb21Mb25nQ2xhaW1JZCA9IGZ1bmN0aW9uIChjbGFpbUlkLCBjbGFpbU5hbWUpIHtcbiAgICBsb2dnZXIuZGVidWcoYENsYWltLmdldFNob3J0Q2xhaW1JZEZyb21Mb25nQ2xhaW1JZCBmb3IgJHtjbGFpbU5hbWV9IyR7Y2xhaW1JZH1gKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpc1xuICAgICAgICAuZmluZEFsbCh7XG4gICAgICAgICAgd2hlcmU6IHsgbmFtZTogY2xhaW1OYW1lIH0sXG4gICAgICAgICAgb3JkZXI6IFtbJ2hlaWdodCcsICdBU0MnXV0sXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgc3dpdGNoIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY2xhaW0ocykgZm91bmQgd2l0aCB0aGF0IGNsYWltIG5hbWUnKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJlc29sdmUocmV0dXJuU2hvcnRJZChyZXN1bHQsIGNsYWltSWQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgQ2xhaW0uZ2V0QWxsQ2hhbm5lbENsYWltcyA9IGZ1bmN0aW9uIChjaGFubmVsQ2xhaW1JZCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgQ2xhaW0uZ2V0QWxsQ2hhbm5lbENsYWltcyBmb3IgJHtjaGFubmVsQ2xhaW1JZH1gKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpc1xuICAgICAgICAuZmluZEFsbCh7XG4gICAgICAgICAgd2hlcmU6IHsgY2VydGlmaWNhdGVJZDogY2hhbm5lbENsYWltSWQgfSxcbiAgICAgICAgICBvcmRlcjogW1snaGVpZ2h0JywgJ0FTQyddXSxcbiAgICAgICAgICByYXcgIDogdHJ1ZSwgIC8vIHJldHVybnMgYW4gYXJyYXkgb2Ygb25seSBkYXRhLCBub3QgYW4gYXJyYXkgb2YgaW5zdGFuY2VzXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKGNoYW5uZWxDbGFpbXNBcnJheSA9PiB7XG4gICAgICAgICAgLy8gbG9nZ2VyLmRlYnVnKCdjaGFubmVsY2xhaW1zYXJyYXkgbGVuZ3RoOicsIGNoYW5uZWxDbGFpbXNBcnJheS5sZW5ndGgpO1xuICAgICAgICAgIHN3aXRjaCAoY2hhbm5lbENsYWltc0FycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNoYW5uZWxDbGFpbXNBcnJheS5mb3JFYWNoKGNsYWltID0+IHtcbiAgICAgICAgICAgICAgICBjbGFpbVsnZmlsZUV4dCddID0gZGV0ZXJtaW5lRmlsZUV4dGVuc2lvbkZyb21Db250ZW50VHlwZShjbGFpbS5jb250ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgY2xhaW1bJ3RodW1ibmFpbCddID0gZGV0ZXJtaW5lVGh1bWJuYWlsKGNsYWltLnRodW1ibmFpbCwgZGVmYXVsdFRodW1ibmFpbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoY2hhbm5lbENsYWltc0FycmF5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgQ2xhaW0uZ2V0Q2xhaW1JZEJ5TG9uZ0NoYW5uZWxJZCA9IGZ1bmN0aW9uIChjaGFubmVsQ2xhaW1JZCwgY2xhaW1OYW1lKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBmaW5kaW5nIGNsYWltIGlkIGZvciBjbGFpbSAke2NsYWltTmFtZX0gZnJvbSBjaGFubmVsICR7Y2hhbm5lbENsYWltSWR9YCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXNcbiAgICAgICAgLmZpbmRBbGwoe1xuICAgICAgICAgIHdoZXJlOiB7IG5hbWU6IGNsYWltTmFtZSwgY2VydGlmaWNhdGVJZDogY2hhbm5lbENsYWltSWQgfSxcbiAgICAgICAgICBvcmRlcjogW1snaWQnLCAnQVNDJ11dLFxuICAgICAgICB9KVxuICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIHN3aXRjaCAocmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0WzBdLmNsYWltSWQpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGAke3Jlc3VsdC5sZW5ndGh9IHJlY29yZHMgZm91bmQgZm9yIFwiJHtjbGFpbU5hbWV9XCIgaW4gY2hhbm5lbCBcIiR7Y2hhbm5lbENsYWltSWR9XCJgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0WzBdLmNsYWltSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBDbGFpbS5nZXRMb25nQ2xhaW1JZEZyb21TaG9ydENsYWltSWQgPSBmdW5jdGlvbiAobmFtZSwgc2hvcnRJZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzXG4gICAgICAgIC5maW5kQWxsKHtcbiAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNsYWltSWQ6IHtcbiAgICAgICAgICAgICAgJGxpa2U6IGAke3Nob3J0SWR9JWAsXG4gICAgICAgICAgICB9fSxcbiAgICAgICAgICBvcmRlcjogW1snaGVpZ2h0JywgJ0FTQyddXSxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICBkZWZhdWx0OiAvLyBub3RlIHJlc3VsdHMgbXVzdCBiZSBzb3J0ZWRcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0WzBdLmNsYWltSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBDbGFpbS5nZXRUb3BGcmVlQ2xhaW1JZEJ5Q2xhaW1OYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpc1xuICAgICAgICAuZmluZEFsbCh7XG4gICAgICAgICAgd2hlcmU6IHsgbmFtZSB9LFxuICAgICAgICAgIG9yZGVyOiBbWydlZmZlY3RpdmVBbW91bnQnLCAnREVTQyddLCBbJ2hlaWdodCcsICdBU0MnXV0sICAvLyBub3RlOiBtYXliZSBoZWlnaHQgYW5kIGVmZmVjdGl2ZSBhbW91bnQgbmVlZCB0byBzd2l0Y2g/XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKCdsZW5ndGggb2YgcmVzdWx0JywgcmVzdWx0Lmxlbmd0aCk7XG4gICAgICAgICAgc3dpdGNoIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0WzBdLmRhdGFWYWx1ZXMuY2xhaW1JZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIENsYWltLnZhbGlkYXRlTG9uZ0NsYWltSWQgPSBmdW5jdGlvbiAobmFtZSwgY2xhaW1JZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmZpbmRPbmUoe1xuICAgICAgICB3aGVyZToge25hbWUsIGNsYWltSWR9LFxuICAgICAgfSlcbiAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXNvbHZlKGNsYWltSWQpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIENsYWltLmdldExvbmdDbGFpbUlkID0gZnVuY3Rpb24gKGNsYWltTmFtZSwgY2xhaW1JZCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgZ2V0TG9uZ0NsYWltSWQoJHtjbGFpbU5hbWV9LCAke2NsYWltSWR9KWApO1xuICAgIGlmIChjbGFpbUlkICYmIChjbGFpbUlkLmxlbmd0aCA9PT0gNDApKSB7ICAvLyBpZiBhIGZ1bGwgY2xhaW0gaWQgaXMgcHJvdmlkZWRcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlTG9uZ0NsYWltSWQoY2xhaW1OYW1lLCBjbGFpbUlkKTtcbiAgICB9IGVsc2UgaWYgKGNsYWltSWQgJiYgY2xhaW1JZC5sZW5ndGggPCA0MCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9uZ0NsYWltSWRGcm9tU2hvcnRDbGFpbUlkKGNsYWltTmFtZSwgY2xhaW1JZCk7ICAvLyBpZiBhIHNob3J0IGNsYWltIGlkIGlzIHByb3ZpZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFRvcEZyZWVDbGFpbUlkQnlDbGFpbU5hbWUoY2xhaW1OYW1lKTsgIC8vIGlmIG5vIGNsYWltIGlkIGlzIHByb3ZpZGVkXG4gICAgfVxuICB9O1xuXG4gIENsYWltLnJlc29sdmVDbGFpbSA9IGZ1bmN0aW9uIChuYW1lLCBjbGFpbUlkKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBDbGFpbS5yZXNvbHZlQ2xhaW06ICR7bmFtZX0gJHtjbGFpbUlkfWApO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzXG4gICAgICAgIC5maW5kQWxsKHtcbiAgICAgICAgICB3aGVyZTogeyBuYW1lLCBjbGFpbUlkIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKGNsYWltQXJyYXkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoY2xhaW1BcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHByZXBhcmVDbGFpbURhdGEoY2xhaW1BcnJheVswXS5kYXRhVmFsdWVzKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYG1vcmUgdGhhbiBvbmUgcmVjb3JkIG1hdGNoZXMgJHtuYW1lfSMke2NsYWltSWR9IGluIGRiLkNsYWltYCk7XG4gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHByZXBhcmVDbGFpbURhdGEoY2xhaW1BcnJheVswXS5kYXRhVmFsdWVzKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBDbGFpbTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2ZXIvbW9kZWxzL2NsYWltLmpzIiwibW9kdWxlLmV4cG9ydHMgPSAoc2VxdWVsaXplLCB7IFNUUklORywgQk9PTEVBTiwgSU5URUdFUiB9KSA9PiB7XG4gIGNvbnN0IEZpbGUgPSBzZXF1ZWxpemUuZGVmaW5lKFxuICAgICdGaWxlJyxcbiAgICB7XG4gICAgICBuYW1lOiB7XG4gICAgICAgIHR5cGUgICAgIDogU1RSSU5HLFxuICAgICAgICBhbGxvd051bGw6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGNsYWltSWQ6IHtcbiAgICAgICAgdHlwZSAgICAgOiBTVFJJTkcsXG4gICAgICAgIGFsbG93TnVsbDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgYWRkcmVzczoge1xuICAgICAgICB0eXBlICAgICA6IFNUUklORyxcbiAgICAgICAgYWxsb3dOdWxsOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBvdXRwb2ludDoge1xuICAgICAgICB0eXBlICAgICA6IFNUUklORyxcbiAgICAgICAgYWxsb3dOdWxsOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBoZWlnaHQ6IHtcbiAgICAgICAgdHlwZSAgICAgOiBJTlRFR0VSLFxuICAgICAgICBhbGxvd051bGw6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0ICA6IDAsXG4gICAgICB9LFxuICAgICAgZmlsZU5hbWU6IHtcbiAgICAgICAgdHlwZSAgICAgOiBTVFJJTkcsXG4gICAgICAgIGFsbG93TnVsbDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZmlsZVBhdGg6IHtcbiAgICAgICAgdHlwZSAgICAgOiBTVFJJTkcsXG4gICAgICAgIGFsbG93TnVsbDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZmlsZVR5cGU6IHtcbiAgICAgICAgdHlwZTogU1RSSU5HLFxuICAgICAgfSxcbiAgICAgIG5zZnc6IHtcbiAgICAgICAgdHlwZSAgICAgICAgOiBCT09MRUFOLFxuICAgICAgICBhbGxvd051bGwgICA6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHRyZW5kaW5nRWxpZ2libGU6IHtcbiAgICAgICAgdHlwZSAgICAgICAgOiBCT09MRUFOLFxuICAgICAgICBhbGxvd051bGwgICA6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgZnJlZXplVGFibGVOYW1lOiB0cnVlLFxuICAgIH1cbiAgKTtcblxuICBGaWxlLmFzc29jaWF0ZSA9IGRiID0+IHtcbiAgICBGaWxlLmhhc01hbnkoZGIuUmVxdWVzdCk7XG4gICAgRmlsZS5oYXNPbmUoZGIuQ2xhaW0pO1xuICB9O1xuXG4gIEZpbGUuZ2V0UmVjZW50Q2xhaW1zID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmZpbmRBbGwoe1xuICAgICAgd2hlcmU6IHsgbnNmdzogZmFsc2UsIHRyZW5kaW5nRWxpZ2libGU6IHRydWUgfSxcbiAgICAgIG9yZGVyOiBbWydjcmVhdGVkQXQnLCAnREVTQyddXSxcbiAgICAgIGxpbWl0OiAyNSxcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gRmlsZTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2ZXIvbW9kZWxzL2ZpbGUuanMiLCJtb2R1bGUuZXhwb3J0cyA9IChzZXF1ZWxpemUsIHsgU1RSSU5HLCBCT09MRUFOLCBURVhUIH0pID0+IHtcbiAgY29uc3QgUmVxdWVzdCA9IHNlcXVlbGl6ZS5kZWZpbmUoXG4gICAgJ1JlcXVlc3QnLFxuICAgIHtcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICB0eXBlICAgICA6IFNUUklORyxcbiAgICAgICAgYWxsb3dOdWxsOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB1cmw6IHtcbiAgICAgICAgdHlwZSAgICAgOiBTVFJJTkcsXG4gICAgICAgIGFsbG93TnVsbDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgaXBBZGRyZXNzOiB7XG4gICAgICAgIHR5cGUgICAgIDogU1RSSU5HLFxuICAgICAgICBhbGxvd051bGw6IHRydWUsXG4gICAgICB9LFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHR5cGUgICAgIDogVEVYVCgnbG9uZycpLFxuICAgICAgICBhbGxvd051bGw6IHRydWUsXG4gICAgICAgIGRlZmF1bHQgIDogbnVsbCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBmcmVlemVUYWJsZU5hbWU6IHRydWUsXG4gICAgfVxuICApO1xuXG4gIFJlcXVlc3QuYXNzb2NpYXRlID0gZGIgPT4ge1xuICAgIFJlcXVlc3QuYmVsb25nc1RvKGRiLkZpbGUsIHtcbiAgICAgIGZvcmVpZ25LZXk6IHtcbiAgICAgICAgYWxsb3dOdWxsOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gUmVxdWVzdDtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2ZXIvbW9kZWxzL3JlcXVlc3QuanMiLCIndXNlIHN0cmljdCc7XG5jb25zdCBiY3J5cHQgPSByZXF1aXJlKCdiY3J5cHQnKTtcbmNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJ3dpbnN0b24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoc2VxdWVsaXplLCB7IFNUUklORyB9KSA9PiB7XG4gIGNvbnN0IFVzZXIgPSBzZXF1ZWxpemUuZGVmaW5lKFxuICAgICdVc2VyJyxcbiAgICB7XG4gICAgICB1c2VyTmFtZToge1xuICAgICAgICB0eXBlICAgICA6IFNUUklORyxcbiAgICAgICAgYWxsb3dOdWxsOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBwYXNzd29yZDoge1xuICAgICAgICB0eXBlICAgICA6IFNUUklORyxcbiAgICAgICAgYWxsb3dOdWxsOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBmcmVlemVUYWJsZU5hbWU6IHRydWUsXG4gICAgfVxuICApO1xuXG4gIFVzZXIuYXNzb2NpYXRlID0gZGIgPT4ge1xuICAgIFVzZXIuaGFzT25lKGRiLkNoYW5uZWwpO1xuICB9O1xuXG4gIFVzZXIucHJvdG90eXBlLmNvbXBhcmVQYXNzd29yZCA9IGZ1bmN0aW9uIChwYXNzd29yZCkge1xuICAgIHJldHVybiBiY3J5cHQuY29tcGFyZShwYXNzd29yZCwgdGhpcy5wYXNzd29yZCk7XG4gIH07XG5cbiAgVXNlci5wcm90b3R5cGUuY2hhbmdlUGFzc3dvcmQgPSBmdW5jdGlvbiAobmV3UGFzc3dvcmQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gZ2VuZXJhdGUgYSBzYWx0IHN0cmluZyB0byB1c2UgZm9yIGhhc2hpbmdcbiAgICAgIGJjcnlwdC5nZW5TYWx0KChzYWx0RXJyb3IsIHNhbHQpID0+IHtcbiAgICAgICAgaWYgKHNhbHRFcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignc2FsdCBlcnJvcicsIHNhbHRFcnJvcik7XG4gICAgICAgICAgcmVqZWN0KHNhbHRFcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdlbmVyYXRlIGEgaGFzaGVkIHZlcnNpb24gb2YgdGhlIHVzZXIncyBwYXNzd29yZFxuICAgICAgICBiY3J5cHQuaGFzaChuZXdQYXNzd29yZCwgc2FsdCwgKGhhc2hFcnJvciwgaGFzaCkgPT4ge1xuICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIGVycm9yIHdpdGggdGhlIGhhc2ggZ2VuZXJhdGlvbiByZXR1cm4gdGhlIGVycm9yXG4gICAgICAgICAgaWYgKGhhc2hFcnJvcikge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdoYXNoIGVycm9yJywgaGFzaEVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChoYXNoRXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyByZXBsYWNlIHRoZSBjdXJyZW50IHBhc3N3b3JkIHdpdGggdGhlIG5ldyBoYXNoXG4gICAgICAgICAgdGhpc1xuICAgICAgICAgICAgLnVwZGF0ZSh7cGFzc3dvcmQ6IGhhc2h9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIHByZS1zYXZlIGhvb2sgbWV0aG9kIHRvIGhhc2ggdGhlIHVzZXIncyBwYXNzd29yZCBiZWZvcmUgdGhlIHVzZXIncyBpbmZvIGlzIHNhdmVkIHRvIHRoZSBkYi5cbiAgVXNlci5ob29rKCdiZWZvcmVDcmVhdGUnLCAodXNlciwgb3B0aW9ucykgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZygnVXNlci5iZWZvcmVDcmVhdGUgaG9vay4uLicpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBnZW5lcmF0ZSBhIHNhbHQgc3RyaW5nIHRvIHVzZSBmb3IgaGFzaGluZ1xuICAgICAgYmNyeXB0LmdlblNhbHQoKHNhbHRFcnJvciwgc2FsdCkgPT4ge1xuICAgICAgICBpZiAoc2FsdEVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdzYWx0IGVycm9yJywgc2FsdEVycm9yKTtcbiAgICAgICAgICByZWplY3Qoc2FsdEVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2VuZXJhdGUgYSBoYXNoZWQgdmVyc2lvbiBvZiB0aGUgdXNlcidzIHBhc3N3b3JkXG4gICAgICAgIGJjcnlwdC5oYXNoKHVzZXIucGFzc3dvcmQsIHNhbHQsIChoYXNoRXJyb3IsIGhhc2gpID0+IHtcbiAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBlcnJvciB3aXRoIHRoZSBoYXNoIGdlbmVyYXRpb24gcmV0dXJuIHRoZSBlcnJvclxuICAgICAgICAgIGlmIChoYXNoRXJyb3IpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignaGFzaCBlcnJvcicsIGhhc2hFcnJvcik7XG4gICAgICAgICAgICByZWplY3QoaGFzaEVycm9yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVwbGFjZSB0aGUgcGFzc3dvcmQgc3RyaW5nIHdpdGggdGhlIGhhc2ggcGFzc3dvcmQgdmFsdWVcbiAgICAgICAgICB1c2VyLnBhc3N3b3JkID0gaGFzaDtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBVc2VyO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9tb2RlbHMvdXNlci5qcyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJjcnlwdFwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcImJjcnlwdFwiXG4vLyBtb2R1bGUgaWQgPSA3M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJjb25zdCBQYXNzcG9ydExvY2FsU3RyYXRlZ3kgPSByZXF1aXJlKCdwYXNzcG9ydC1sb2NhbCcpLlN0cmF0ZWd5O1xuY29uc3QgbG9nZ2VyID0gcmVxdWlyZSgnd2luc3RvbicpO1xuY29uc3QgZGIgPSByZXF1aXJlKCcuLi9tb2RlbHMvaW5kZXgnKTtcblxuY29uc3QgcmV0dXJuVXNlckFuZENoYW5uZWxJbmZvID0gKHVzZXJJbnN0YW5jZSkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCB1c2VySW5mbyA9IHt9O1xuICAgIHVzZXJJbmZvWydpZCddID0gdXNlckluc3RhbmNlLmlkO1xuICAgIHVzZXJJbmZvWyd1c2VyTmFtZSddID0gdXNlckluc3RhbmNlLnVzZXJOYW1lO1xuICAgIHVzZXJJbnN0YW5jZVxuICAgICAgLmdldENoYW5uZWwoKVxuICAgICAgLnRoZW4oKHtjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWR9KSA9PiB7XG4gICAgICAgIHVzZXJJbmZvWydjaGFubmVsTmFtZSddID0gY2hhbm5lbE5hbWU7XG4gICAgICAgIHVzZXJJbmZvWydjaGFubmVsQ2xhaW1JZCddID0gY2hhbm5lbENsYWltSWQ7XG4gICAgICAgIHJldHVybiBkYi5DZXJ0aWZpY2F0ZS5nZXRTaG9ydENoYW5uZWxJZEZyb21Mb25nQ2hhbm5lbElkKGNoYW5uZWxDbGFpbUlkLCBjaGFubmVsTmFtZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oc2hvcnRDaGFubmVsSWQgPT4ge1xuICAgICAgICB1c2VySW5mb1snc2hvcnRDaGFubmVsSWQnXSA9IHNob3J0Q2hhbm5lbElkO1xuICAgICAgICByZXNvbHZlKHVzZXJJbmZvKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgUGFzc3BvcnRMb2NhbFN0cmF0ZWd5KFxuICB7XG4gICAgdXNlcm5hbWVGaWVsZDogJ3VzZXJuYW1lJyxcbiAgICBwYXNzd29yZEZpZWxkOiAncGFzc3dvcmQnLFxuICB9LFxuICAodXNlcm5hbWUsIHBhc3N3b3JkLCBkb25lKSA9PiB7XG4gICAgcmV0dXJuIGRiLlVzZXJcbiAgICAgIC5maW5kT25lKHtcbiAgICAgICAgd2hlcmU6IHt1c2VyTmFtZTogdXNlcm5hbWV9LFxuICAgICAgfSlcbiAgICAgIC50aGVuKHVzZXIgPT4ge1xuICAgICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoJ25vIHVzZXIgZm91bmQnKTtcbiAgICAgICAgICByZXR1cm4gZG9uZShudWxsLCBmYWxzZSwge21lc3NhZ2U6ICdJbmNvcnJlY3QgdXNlcm5hbWUgb3IgcGFzc3dvcmQnfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVzZXIuY29tcGFyZVBhc3N3b3JkKHBhc3N3b3JkKVxuICAgICAgICAgIC50aGVuKGlzTWF0Y2ggPT4ge1xuICAgICAgICAgICAgaWYgKCFpc01hdGNoKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnaW5jb3JyZWN0IHBhc3N3b3JkJyk7XG4gICAgICAgICAgICAgIHJldHVybiBkb25lKG51bGwsIGZhbHNlLCB7bWVzc2FnZTogJ0luY29ycmVjdCB1c2VybmFtZSBvciBwYXNzd29yZCd9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnUGFzc3dvcmQgd2FzIGEgbWF0Y2gsIHJldHVybmluZyBVc2VyJyk7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVXNlckFuZENoYW5uZWxJbmZvKHVzZXIpXG4gICAgICAgICAgICAgIC50aGVuKHVzZXJJbmZvID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShudWxsLCB1c2VySW5mbyk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgcmV0dXJuIGRvbmUoZXJyb3IpO1xuICAgICAgfSk7XG4gIH0sXG4pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL3Bhc3Nwb3J0L2xvY2FsLWxvZ2luLmpzIiwiY29uc3QgbG9nZ2VyID0gcmVxdWlyZSgnd2luc3RvbicpO1xuY29uc3QgcGFzc3BvcnQgPSByZXF1aXJlKCdwYXNzcG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChhcHApID0+IHtcbiAgLy8gcm91dGUgZm9yIHNpZ24gdXBcbiAgYXBwLnBvc3QoJy9zaWdudXAnLCBwYXNzcG9ydC5hdXRoZW50aWNhdGUoJ2xvY2FsLXNpZ251cCcpLCAocmVxLCByZXMpID0+IHtcbiAgICBsb2dnZXIudmVyYm9zZShgc3VjY2Vzc2Z1bCBzaWdudXAgZm9yICR7cmVxLnVzZXIuY2hhbm5lbE5hbWV9YCk7XG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oe1xuICAgICAgc3VjY2VzcyAgICAgICA6IHRydWUsXG4gICAgICBjaGFubmVsTmFtZSAgIDogcmVxLnVzZXIuY2hhbm5lbE5hbWUsXG4gICAgICBjaGFubmVsQ2xhaW1JZDogcmVxLnVzZXIuY2hhbm5lbENsYWltSWQsXG4gICAgICBzaG9ydENoYW5uZWxJZDogcmVxLnVzZXIuc2hvcnRDaGFubmVsSWQsXG4gICAgfSk7XG4gIH0pO1xuICAvLyByb3V0ZSBmb3IgbG9nIGluXG4gIGFwcC5wb3N0KCcvbG9naW4nLCAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBwYXNzcG9ydC5hdXRoZW50aWNhdGUoJ2xvY2FsLWxvZ2luJywgKGVyciwgdXNlciwgaW5mbykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gbmV4dChlcnIpO1xuICAgICAgfVxuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbih7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgbWVzc2FnZTogaW5mby5tZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5kZWJ1Zygnc3VjY2Vzc2Z1bCBsb2dpbicpO1xuICAgICAgcmVxLmxvZ0luKHVzZXIsIChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBuZXh0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoMjAwKS5qc29uKHtcbiAgICAgICAgICBzdWNjZXNzICAgICAgIDogdHJ1ZSxcbiAgICAgICAgICBjaGFubmVsTmFtZSAgIDogcmVxLnVzZXIuY2hhbm5lbE5hbWUsXG4gICAgICAgICAgY2hhbm5lbENsYWltSWQ6IHJlcS51c2VyLmNoYW5uZWxDbGFpbUlkLFxuICAgICAgICAgIHNob3J0Q2hhbm5lbElkOiByZXEudXNlci5zaG9ydENoYW5uZWxJZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KShyZXEsIHJlcywgbmV4dCk7XG4gIH0pO1xuICAvLyByb3V0ZSB0byBsb2cgb3V0XG4gIGFwcC5nZXQoJy9sb2dvdXQnLCAocmVxLCByZXMpID0+IHtcbiAgICByZXEubG9nb3V0KCk7XG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oe3N1Y2Nlc3M6IHRydWUsIG1lc3NhZ2U6ICd5b3Ugc3VjY2Vzc2Z1bGx5IGxvZ2dlZCBvdXQnfSk7XG4gIH0pO1xuICAvLyBzZWUgaWYgdXNlciBpcyBhdXRoZW50aWNhdGVkLCBhbmQgcmV0dXJuIGNyZWRlbnRpYWxzIGlmIHNvXG4gIGFwcC5nZXQoJy91c2VyJywgKHJlcSwgcmVzKSA9PiB7XG4gICAgaWYgKHJlcS51c2VyKSB7XG4gICAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7c3VjY2VzczogdHJ1ZSwgZGF0YTogcmVxLnVzZXJ9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLnN0YXR1cyg0MDEpLmpzb24oe3N1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiAndXNlciBpcyBub3QgbG9nZ2VkIGluJ30pO1xuICAgIH1cbiAgfSk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL3JvdXRlcy9hdXRoLXJvdXRlcy5qcyIsImNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJ3dpbnN0b24nKTtcbmNvbnN0IG11bHRpcGFydCA9IHJlcXVpcmUoJ2Nvbm5lY3QtbXVsdGlwYXJ0eScpO1xuY29uc3QgeyBwdWJsaXNoaW5nOiB7IHVwbG9hZERpcmVjdG9yeSB9LCBkZXRhaWxzOiB7IGhvc3QgfSB9ID0gcmVxdWlyZSgnLi4vLi4vY29uZmlnL3NpdGVDb25maWcuanMnKTtcbmNvbnN0IG11bHRpcGFydE1pZGRsZXdhcmUgPSBtdWx0aXBhcnQoe3VwbG9hZERpcjogdXBsb2FkRGlyZWN0b3J5fSk7XG5jb25zdCBkYiA9IHJlcXVpcmUoJy4uL21vZGVscy9pbmRleCcpO1xuY29uc3QgeyBjbGFpbU5hbWVJc0F2YWlsYWJsZSwgY2hlY2tDaGFubmVsQXZhaWxhYmlsaXR5LCBwdWJsaXNoIH0gPSByZXF1aXJlKCcuLi9jb250cm9sbGVycy9wdWJsaXNoQ29udHJvbGxlci5qcycpO1xuY29uc3QgeyBnZXRDbGFpbUxpc3QsIHJlc29sdmVVcmksIGdldENsYWltIH0gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2xicnlBcGkuanMnKTtcbmNvbnN0IHsgYWRkR2V0UmVzdWx0c1RvRmlsZURhdGEsIGNyZWF0ZUJhc2ljUHVibGlzaFBhcmFtcywgY3JlYXRlVGh1bWJuYWlsUHVibGlzaFBhcmFtcywgcGFyc2VQdWJsaXNoQXBpUmVxdWVzdEJvZHksIHBhcnNlUHVibGlzaEFwaVJlcXVlc3RGaWxlcywgY3JlYXRlRmlsZURhdGEgfSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcHVibGlzaEhlbHBlcnMuanMnKTtcbmNvbnN0IGVycm9ySGFuZGxlcnMgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Vycm9ySGFuZGxlcnMuanMnKTtcbmNvbnN0IHsgc2VuZEdBVGltaW5nRXZlbnQgfSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvZ29vZ2xlQW5hbHl0aWNzLmpzJyk7XG5jb25zdCB7IGF1dGhlbnRpY2F0ZVVzZXIgfSA9IHJlcXVpcmUoJy4uL2F1dGgvYXV0aGVudGljYXRpb24uanMnKTtcbmNvbnN0IHsgZ2V0Q2hhbm5lbERhdGEsIGdldENoYW5uZWxDbGFpbXMsIGdldENsYWltSWQgfSA9IHJlcXVpcmUoJy4uL2NvbnRyb2xsZXJzL3NlcnZlQ29udHJvbGxlci5qcycpO1xuXG5jb25zdCBOT19DSEFOTkVMID0gJ05PX0NIQU5ORUwnO1xuY29uc3QgTk9fQ0xBSU0gPSAnTk9fQ0xBSU0nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChhcHApID0+IHtcbiAgLy8gcm91dGUgdG8gY2hlY2sgd2hldGhlciBzaXRlIGhhcyBwdWJsaXNoZWQgdG8gYSBjaGFubmVsXG4gIGFwcC5nZXQoJy9hcGkvY2hhbm5lbC9hdmFpbGFiaWxpdHkvOm5hbWUnLCAoeyBpcCwgb3JpZ2luYWxVcmwsIHBhcmFtczogeyBuYW1lIH0gfSwgcmVzKSA9PiB7XG4gICAgY29uc3QgZ2FTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNoZWNrQ2hhbm5lbEF2YWlsYWJpbGl0eShuYW1lKVxuICAgICAgLnRoZW4oYXZhaWxhYmxlTmFtZSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKGF2YWlsYWJsZU5hbWUpO1xuICAgICAgICBzZW5kR0FUaW1pbmdFdmVudCgnZW5kLXRvLWVuZCcsICdjbGFpbSBuYW1lIGF2YWlsYWJpbGl0eScsIG5hbWUsIGdhU3RhcnRUaW1lLCBEYXRlLm5vdygpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBlcnJvckhhbmRsZXJzLmhhbmRsZUVycm9yUmVzcG9uc2Uob3JpZ2luYWxVcmwsIGlwLCBlcnJvciwgcmVzKTtcbiAgICAgIH0pO1xuICB9KTtcbiAgLy8gcm91dGUgdG8gZ2V0IGEgc2hvcnQgY2hhbm5lbCBpZCBmcm9tIGxvbmcgY2hhbm5lbCBJZFxuICBhcHAuZ2V0KCcvYXBpL2NoYW5uZWwvc2hvcnQtaWQvOmxvbmdJZC86bmFtZScsICh7IGlwLCBvcmlnaW5hbFVybCwgcGFyYW1zIH0sIHJlcykgPT4ge1xuICAgIGRiLkNlcnRpZmljYXRlLmdldFNob3J0Q2hhbm5lbElkRnJvbUxvbmdDaGFubmVsSWQocGFyYW1zLmxvbmdJZCwgcGFyYW1zLm5hbWUpXG4gICAgICAudGhlbihzaG9ydElkID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cygyMDApLmpzb24oc2hvcnRJZCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgZXJyb3JIYW5kbGVycy5oYW5kbGVFcnJvclJlc3BvbnNlKG9yaWdpbmFsVXJsLCBpcCwgZXJyb3IsIHJlcyk7XG4gICAgICB9KTtcbiAgfSk7XG4gIGFwcC5nZXQoJy9hcGkvY2hhbm5lbC9kYXRhLzpjaGFubmVsTmFtZS86Y2hhbm5lbENsYWltSWQnLCAoeyBpcCwgb3JpZ2luYWxVcmwsIGJvZHksIHBhcmFtcyB9LCByZXMpID0+IHtcbiAgICBjb25zdCBjaGFubmVsTmFtZSA9IHBhcmFtcy5jaGFubmVsTmFtZTtcbiAgICBsZXQgY2hhbm5lbENsYWltSWQgPSBwYXJhbXMuY2hhbm5lbENsYWltSWQ7XG4gICAgaWYgKGNoYW5uZWxDbGFpbUlkID09PSAnbm9uZScpIGNoYW5uZWxDbGFpbUlkID0gbnVsbDtcbiAgICBnZXRDaGFubmVsRGF0YShjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIDApXG4gICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgaWYgKGRhdGEgPT09IE5PX0NIQU5ORUwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDQpLmpzb24oe3N1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiAnTm8gbWF0Y2hpbmcgY2hhbm5lbCB3YXMgZm91bmQnfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzLnN0YXR1cygyMDApLmpzb24oe3N1Y2Nlc3M6IHRydWUsIGRhdGF9KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBlcnJvckhhbmRsZXJzLmhhbmRsZUVycm9yUmVzcG9uc2Uob3JpZ2luYWxVcmwsIGlwLCBlcnJvciwgcmVzKTtcbiAgICAgIH0pO1xuICB9KTtcbiAgYXBwLmdldCgnL2FwaS9jaGFubmVsL2NsYWltcy86Y2hhbm5lbE5hbWUvOmNoYW5uZWxDbGFpbUlkLzpwYWdlJywgKHsgaXAsIG9yaWdpbmFsVXJsLCBib2R5LCBwYXJhbXMgfSwgcmVzKSA9PiB7XG4gICAgY29uc3QgY2hhbm5lbE5hbWUgPSBwYXJhbXMuY2hhbm5lbE5hbWU7XG4gICAgbGV0IGNoYW5uZWxDbGFpbUlkID0gcGFyYW1zLmNoYW5uZWxDbGFpbUlkO1xuICAgIGlmIChjaGFubmVsQ2xhaW1JZCA9PT0gJ25vbmUnKSBjaGFubmVsQ2xhaW1JZCA9IG51bGw7XG4gICAgY29uc3QgcGFnZSA9IHBhcmFtcy5wYWdlO1xuICAgIGdldENoYW5uZWxDbGFpbXMoY2hhbm5lbE5hbWUsIGNoYW5uZWxDbGFpbUlkLCBwYWdlKVxuICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgIGlmIChkYXRhID09PSBOT19DSEFOTkVMKSB7XG4gICAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDA0KS5qc29uKHtzdWNjZXNzOiBmYWxzZSwgbWVzc2FnZTogJ05vIG1hdGNoaW5nIGNoYW5uZWwgd2FzIGZvdW5kJ30pO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHtzdWNjZXNzOiB0cnVlLCBkYXRhfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgZXJyb3JIYW5kbGVycy5oYW5kbGVFcnJvclJlc3BvbnNlKG9yaWdpbmFsVXJsLCBpcCwgZXJyb3IsIHJlcyk7XG4gICAgICB9KTtcbiAgfSk7XG4gIC8vIHJvdXRlIHRvIHJ1biBhIGNsYWltX2xpc3QgcmVxdWVzdCBvbiB0aGUgZGFlbW9uXG4gIGFwcC5nZXQoJy9hcGkvY2xhaW0vbGlzdC86bmFtZScsICh7IGlwLCBvcmlnaW5hbFVybCwgcGFyYW1zIH0sIHJlcykgPT4ge1xuICAgIGdldENsYWltTGlzdChwYXJhbXMubmFtZSlcbiAgICAgIC50aGVuKGNsYWltc0xpc3QgPT4ge1xuICAgICAgICByZXMuc3RhdHVzKDIwMCkuanNvbihjbGFpbXNMaXN0KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBlcnJvckhhbmRsZXJzLmhhbmRsZUVycm9yUmVzcG9uc2Uob3JpZ2luYWxVcmwsIGlwLCBlcnJvciwgcmVzKTtcbiAgICAgIH0pO1xuICB9KTtcbiAgLy8gcm91dGUgdG8gZ2V0IGFuIGFzc2V0XG4gIGFwcC5nZXQoJy9hcGkvY2xhaW0vZ2V0LzpuYW1lLzpjbGFpbUlkJywgKHsgaXAsIG9yaWdpbmFsVXJsLCBwYXJhbXMgfSwgcmVzKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IHBhcmFtcy5uYW1lO1xuICAgIGNvbnN0IGNsYWltSWQgPSBwYXJhbXMuY2xhaW1JZDtcbiAgICAvLyByZXNvbHZlIHRoZSBjbGFpbVxuICAgIGRiLkNsYWltLnJlc29sdmVDbGFpbShuYW1lLCBjbGFpbUlkKVxuICAgICAgLnRoZW4ocmVzb2x2ZVJlc3VsdCA9PiB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBhIGNsYWltIGFjdHVhbGx5IGV4aXN0cyBhdCB0aGF0IHVyaVxuICAgICAgICBpZiAoIXJlc29sdmVSZXN1bHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG1hdGNoaW5nIHVyaSBmb3VuZCBpbiBDbGFpbSB0YWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWxlRGF0YSA9IGNyZWF0ZUZpbGVEYXRhKHJlc29sdmVSZXN1bHQpO1xuICAgICAgICAvLyBnZXQgdGhlIGNsYWltXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbZmlsZURhdGEsIGdldENsYWltKGAke25hbWV9IyR7Y2xhaW1JZH1gKV0pO1xuICAgICAgfSlcbiAgICAgIC50aGVuKChbIGZpbGVEYXRhLCBnZXRSZXN1bHQgXSkgPT4ge1xuICAgICAgICBmaWxlRGF0YSA9IGFkZEdldFJlc3VsdHNUb0ZpbGVEYXRhKGZpbGVEYXRhLCBnZXRSZXN1bHQpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW2RiLnVwc2VydChkYi5GaWxlLCBmaWxlRGF0YSwge25hbWUsIGNsYWltSWR9LCAnRmlsZScpLCBnZXRSZXN1bHRdKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoWyBmaWxlUmVjb3JkLCB7bWVzc2FnZSwgY29tcGxldGVkfSBdKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3VjY2VzczogdHJ1ZSwgbWVzc2FnZSwgY29tcGxldGVkIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGVycm9ySGFuZGxlcnMuaGFuZGxlRXJyb3JSZXNwb25zZShvcmlnaW5hbFVybCwgaXAsIGVycm9yLCByZXMpO1xuICAgICAgfSk7XG4gIH0pO1xuICAvLyByb3V0ZSB0byBjaGVjayB3aGV0aGVyIHRoaXMgc2l0ZSBwdWJsaXNoZWQgdG8gYSBjbGFpbVxuICBhcHAuZ2V0KCcvYXBpL2NsYWltL2F2YWlsYWJpbGl0eS86bmFtZScsICh7IGlwLCBvcmlnaW5hbFVybCwgcGFyYW1zOiB7IG5hbWUgfSB9LCByZXMpID0+IHtcbiAgICBjb25zdCBnYVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgY2xhaW1OYW1lSXNBdmFpbGFibGUobmFtZSlcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHJlc3VsdCk7XG4gICAgICAgIHNlbmRHQVRpbWluZ0V2ZW50KCdlbmQtdG8tZW5kJywgJ2NsYWltIG5hbWUgYXZhaWxhYmlsaXR5JywgbmFtZSwgZ2FTdGFydFRpbWUsIERhdGUubm93KCkpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGVycm9ySGFuZGxlcnMuaGFuZGxlRXJyb3JSZXNwb25zZShvcmlnaW5hbFVybCwgaXAsIGVycm9yLCByZXMpO1xuICAgICAgfSk7XG4gIH0pO1xuICAvLyByb3V0ZSB0byBydW4gYSByZXNvbHZlIHJlcXVlc3Qgb24gdGhlIGRhZW1vblxuICBhcHAuZ2V0KCcvYXBpL2NsYWltL3Jlc29sdmUvOm5hbWUvOmNsYWltSWQnLCAoeyBoZWFkZXJzLCBpcCwgb3JpZ2luYWxVcmwsIHBhcmFtcyB9LCByZXMpID0+IHtcbiAgICByZXNvbHZlVXJpKGAke3BhcmFtcy5uYW1lfSMke3BhcmFtcy5jbGFpbUlkfWApXG4gICAgICAudGhlbihyZXNvbHZlZFVyaSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHJlc29sdmVkVXJpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBlcnJvckhhbmRsZXJzLmhhbmRsZUVycm9yUmVzcG9uc2Uob3JpZ2luYWxVcmwsIGlwLCBlcnJvciwgcmVzKTtcbiAgICAgIH0pO1xuICB9KTtcbiAgLy8gcm91dGUgdG8gcnVuIGEgcHVibGlzaCByZXF1ZXN0IG9uIHRoZSBkYWVtb25cbiAgYXBwLnBvc3QoJy9hcGkvY2xhaW0vcHVibGlzaCcsIG11bHRpcGFydE1pZGRsZXdhcmUsICh7IGJvZHksIGZpbGVzLCBoZWFkZXJzLCBpcCwgb3JpZ2luYWxVcmwsIHVzZXIgfSwgcmVzKSA9PiB7XG4gICAgLy8gZGVmaW5lIHZhcmlhYmxlc1xuICAgIGxldCAgY2hhbm5lbE5hbWUsIGNoYW5uZWxJZCwgY2hhbm5lbFBhc3N3b3JkLCBkZXNjcmlwdGlvbiwgZmlsZU5hbWUsIGZpbGVQYXRoLCBmaWxlVHlwZSwgZ2FTdGFydFRpbWUsIGxpY2Vuc2UsIG5hbWUsIG5zZncsIHRodW1ibmFpbCwgdGh1bWJuYWlsRmlsZU5hbWUsIHRodW1ibmFpbEZpbGVQYXRoLCB0aHVtYm5haWxGaWxlVHlwZSwgdGl0bGU7XG4gICAgLy8gcmVjb3JkIHRoZSBzdGFydCB0aW1lIG9mIHRoZSByZXF1ZXN0XG4gICAgZ2FTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIC8vIHZhbGlkYXRlIHRoZSBib2R5IGFuZCBmaWxlcyBvZiB0aGUgcmVxdWVzdFxuICAgIHRyeSB7XG4gICAgICAvLyB2YWxpZGF0ZUFwaVB1Ymxpc2hSZXF1ZXN0KGJvZHksIGZpbGVzKTtcbiAgICAgICh7bmFtZSwgbnNmdywgbGljZW5zZSwgdGl0bGUsIGRlc2NyaXB0aW9uLCB0aHVtYm5haWx9ID0gcGFyc2VQdWJsaXNoQXBpUmVxdWVzdEJvZHkoYm9keSkpO1xuICAgICAgKHtmaWxlTmFtZSwgZmlsZVBhdGgsIGZpbGVUeXBlLCB0aHVtYm5haWxGaWxlTmFtZSwgdGh1bWJuYWlsRmlsZVBhdGgsIHRodW1ibmFpbEZpbGVUeXBlfSA9IHBhcnNlUHVibGlzaEFwaVJlcXVlc3RGaWxlcyhmaWxlcykpO1xuICAgICAgKHtjaGFubmVsTmFtZSwgY2hhbm5lbElkLCBjaGFubmVsUGFzc3dvcmR9ID0gYm9keSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbih7c3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2V9KTtcbiAgICB9XG4gICAgLy8gY2hlY2sgY2hhbm5lbCBhdXRob3JpemF0aW9uXG4gICAgUHJvbWlzZS5hbGwoW1xuICAgICAgYXV0aGVudGljYXRlVXNlcihjaGFubmVsTmFtZSwgY2hhbm5lbElkLCBjaGFubmVsUGFzc3dvcmQsIHVzZXIpLFxuICAgICAgY2xhaW1OYW1lSXNBdmFpbGFibGUobmFtZSksXG4gICAgICBjcmVhdGVCYXNpY1B1Ymxpc2hQYXJhbXMoZmlsZVBhdGgsIG5hbWUsIHRpdGxlLCBkZXNjcmlwdGlvbiwgbGljZW5zZSwgbnNmdywgdGh1bWJuYWlsKSxcbiAgICAgIGNyZWF0ZVRodW1ibmFpbFB1Ymxpc2hQYXJhbXModGh1bWJuYWlsRmlsZVBhdGgsIG5hbWUsIGxpY2Vuc2UsIG5zZncpLFxuICAgIF0pXG4gICAgICAudGhlbigoW3tjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWR9LCB2YWxpZGF0ZWRDbGFpbU5hbWUsIHB1Ymxpc2hQYXJhbXMsIHRodW1ibmFpbFB1Ymxpc2hQYXJhbXNdKSA9PiB7XG4gICAgICAgIC8vIGFkZCBjaGFubmVsIGRldGFpbHMgdG8gdGhlIHB1Ymxpc2ggcGFyYW1zXG4gICAgICAgIGlmIChjaGFubmVsTmFtZSAmJiBjaGFubmVsQ2xhaW1JZCkge1xuICAgICAgICAgIHB1Ymxpc2hQYXJhbXNbJ2NoYW5uZWxfbmFtZSddID0gY2hhbm5lbE5hbWU7XG4gICAgICAgICAgcHVibGlzaFBhcmFtc1snY2hhbm5lbF9pZCddID0gY2hhbm5lbENsYWltSWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHVibGlzaCB0aGUgdGh1bWJuYWlsXG4gICAgICAgIGlmICh0aHVtYm5haWxQdWJsaXNoUGFyYW1zKSB7XG4gICAgICAgICAgcHVibGlzaCh0aHVtYm5haWxQdWJsaXNoUGFyYW1zLCB0aHVtYm5haWxGaWxlTmFtZSwgdGh1bWJuYWlsRmlsZVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHB1Ymxpc2ggdGhlIGFzc2V0XG4gICAgICAgIHJldHVybiBwdWJsaXNoKHB1Ymxpc2hQYXJhbXMsIGZpbGVOYW1lLCBmaWxlVHlwZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cygyMDApLmpzb24oe1xuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogJ3B1Ymxpc2ggY29tcGxldGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICAgICAgZGF0YSAgIDoge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNsYWltSWQ6IHJlc3VsdC5jbGFpbV9pZCxcbiAgICAgICAgICAgIHVybCAgICA6IGAke2hvc3R9LyR7cmVzdWx0LmNsYWltX2lkfS8ke25hbWV9YCxcbiAgICAgICAgICAgIGxicnlUeCA6IHJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gcmVjb3JkIHRoZSBwdWJsaXNoIGVuZCB0aW1lIGFuZCBzZW5kIHRvIGdvb2dsZSBhbmFseXRpY3NcbiAgICAgICAgc2VuZEdBVGltaW5nRXZlbnQoJ2VuZC10by1lbmQnLCAncHVibGlzaCcsIGZpbGVUeXBlLCBnYVN0YXJ0VGltZSwgRGF0ZS5ub3coKSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgZXJyb3JIYW5kbGVycy5oYW5kbGVFcnJvclJlc3BvbnNlKG9yaWdpbmFsVXJsLCBpcCwgZXJyb3IsIHJlcyk7XG4gICAgICB9KTtcbiAgfSk7XG4gIC8vIHJvdXRlIHRvIGdldCBhIHNob3J0IGNsYWltIGlkIGZyb20gbG9uZyBjbGFpbSBJZFxuICBhcHAuZ2V0KCcvYXBpL2NsYWltL3Nob3J0LWlkLzpsb25nSWQvOm5hbWUnLCAoeyBpcCwgb3JpZ2luYWxVcmwsIGJvZHksIHBhcmFtcyB9LCByZXMpID0+IHtcbiAgICBkYi5DbGFpbS5nZXRTaG9ydENsYWltSWRGcm9tTG9uZ0NsYWltSWQocGFyYW1zLmxvbmdJZCwgcGFyYW1zLm5hbWUpXG4gICAgICAudGhlbihzaG9ydElkID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cygyMDApLmpzb24oe3N1Y2Nlc3M6IHRydWUsIGRhdGE6IHNob3J0SWR9KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBlcnJvckhhbmRsZXJzLmhhbmRsZUVycm9yUmVzcG9uc2Uob3JpZ2luYWxVcmwsIGlwLCBlcnJvciwgcmVzKTtcbiAgICAgIH0pO1xuICB9KTtcbiAgYXBwLnBvc3QoJy9hcGkvY2xhaW0vbG9uZy1pZCcsICh7IGlwLCBvcmlnaW5hbFVybCwgYm9keSwgcGFyYW1zIH0sIHJlcykgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZygnYm9keTonLCBib2R5KTtcbiAgICBjb25zdCBjaGFubmVsTmFtZSA9IGJvZHkuY2hhbm5lbE5hbWU7XG4gICAgY29uc3QgY2hhbm5lbENsYWltSWQgPSBib2R5LmNoYW5uZWxDbGFpbUlkO1xuICAgIGNvbnN0IGNsYWltTmFtZSA9IGJvZHkuY2xhaW1OYW1lO1xuICAgIGNvbnN0IGNsYWltSWQgPSBib2R5LmNsYWltSWQ7XG4gICAgZ2V0Q2xhaW1JZChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIGNsYWltTmFtZSwgY2xhaW1JZClcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IE5PX0NIQU5ORUwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDQpLmpzb24oe3N1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiAnTm8gbWF0Y2hpbmcgY2hhbm5lbCBjb3VsZCBiZSBmb3VuZCd9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09PSBOT19DTEFJTSkge1xuICAgICAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwNCkuanNvbih7c3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6ICdObyBtYXRjaGluZyBjbGFpbSBpZCBjb3VsZCBiZSBmb3VuZCd9KTtcbiAgICAgICAgfVxuICAgICAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7c3VjY2VzczogdHJ1ZSwgZGF0YTogcmVzdWx0fSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgZXJyb3JIYW5kbGVycy5oYW5kbGVFcnJvclJlc3BvbnNlKG9yaWdpbmFsVXJsLCBpcCwgZXJyb3IsIHJlcyk7XG4gICAgICB9KTtcbiAgfSk7XG4gIGFwcC5nZXQoJy9hcGkvY2xhaW0vZGF0YS86Y2xhaW1OYW1lLzpjbGFpbUlkJywgKHsgaXAsIG9yaWdpbmFsVXJsLCBib2R5LCBwYXJhbXMgfSwgcmVzKSA9PiB7XG4gICAgY29uc3QgY2xhaW1OYW1lID0gcGFyYW1zLmNsYWltTmFtZTtcbiAgICBsZXQgY2xhaW1JZCA9IHBhcmFtcy5jbGFpbUlkO1xuICAgIGlmIChjbGFpbUlkID09PSAnbm9uZScpIGNsYWltSWQgPSBudWxsO1xuICAgIGRiLkNsYWltLnJlc29sdmVDbGFpbShjbGFpbU5hbWUsIGNsYWltSWQpXG4gICAgICAudGhlbihjbGFpbUluZm8gPT4ge1xuICAgICAgICBpZiAoIWNsYWltSW5mbykge1xuICAgICAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwNCkuanNvbih7c3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6ICdObyBjbGFpbSBjb3VsZCBiZSBmb3VuZCd9KTtcbiAgICAgICAgfVxuICAgICAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7c3VjY2VzczogdHJ1ZSwgZGF0YTogY2xhaW1JbmZvfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgZXJyb3JIYW5kbGVycy5oYW5kbGVFcnJvclJlc3BvbnNlKG9yaWdpbmFsVXJsLCBpcCwgZXJyb3IsIHJlcyk7XG4gICAgICB9KTtcbiAgfSk7XG4gIC8vIHJvdXRlIHRvIHNlZSBpZiBhc3NldCBpcyBhdmFpbGFibGUgbG9jYWxseVxuICBhcHAuZ2V0KCcvYXBpL2ZpbGUvYXZhaWxhYmlsaXR5LzpuYW1lLzpjbGFpbUlkJywgKHsgaXAsIG9yaWdpbmFsVXJsLCBwYXJhbXMgfSwgcmVzKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IHBhcmFtcy5uYW1lO1xuICAgIGNvbnN0IGNsYWltSWQgPSBwYXJhbXMuY2xhaW1JZDtcbiAgICBkYi5GaWxlLmZpbmRPbmUoe3doZXJlOiB7bmFtZSwgY2xhaW1JZH19KVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXMuc3RhdHVzKDIwMCkuanNvbih7c3VjY2VzczogdHJ1ZSwgZGF0YTogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHtzdWNjZXNzOiB0cnVlLCBkYXRhOiBmYWxzZX0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGVycm9ySGFuZGxlcnMuaGFuZGxlRXJyb3JSZXNwb25zZShvcmlnaW5hbFVybCwgaXAsIGVycm9yLCByZXMpO1xuICAgICAgfSk7XG4gIH0pO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9yb3V0ZXMvYXBpLXJvdXRlcy5qcyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvbm5lY3QtbXVsdGlwYXJ0eVwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcImNvbm5lY3QtbXVsdGlwYXJ0eVwiXG4vLyBtb2R1bGUgaWQgPSA3N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJjb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5jb25zdCBkYiA9IHJlcXVpcmUoJy4uL21vZGVscy9pbmRleCcpO1xuY29uc3QgbGJyeUFwaSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbGJyeUFwaS5qcycpO1xuY29uc3QgcHVibGlzaEhlbHBlcnMgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3B1Ymxpc2hIZWxwZXJzLmpzJyk7XG5jb25zdCB7IHB1Ymxpc2hpbmc6IHsgcHJpbWFyeUNsYWltQWRkcmVzcywgYWRkaXRpb25hbENsYWltQWRkcmVzc2VzIH0gfSA9IHJlcXVpcmUoJy4uLy4uL2NvbmZpZy9zaXRlQ29uZmlnLmpzJyk7XG5jb25zdCBTZXF1ZWxpemUgPSByZXF1aXJlKCdzZXF1ZWxpemUnKTtcbmNvbnN0IE9wID0gU2VxdWVsaXplLk9wO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcHVibGlzaCAocHVibGlzaFBhcmFtcywgZmlsZU5hbWUsIGZpbGVUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBwdWJsaXNoUmVzdWx0cywgY2VydGlmaWNhdGVJZCwgY2hhbm5lbE5hbWU7XG4gICAgICAvLyBwdWJsaXNoIHRoZSBmaWxlXG4gICAgICByZXR1cm4gbGJyeUFwaS5wdWJsaXNoQ2xhaW0ocHVibGlzaFBhcmFtcylcbiAgICAgICAgLnRoZW4odHggPT4ge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBTdWNjZXNzZnVsbHkgcHVibGlzaGVkICR7cHVibGlzaFBhcmFtcy5uYW1lfSAke2ZpbGVOYW1lfWAsIHR4KTtcbiAgICAgICAgICBwdWJsaXNoUmVzdWx0cyA9IHR4O1xuICAgICAgICAgIC8vIGdldCB0aGUgY2hhbm5lbCBpbmZvcm1hdGlvblxuICAgICAgICAgIGlmIChwdWJsaXNoUGFyYW1zLmNoYW5uZWxfbmFtZSkge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGB0aGlzIGNsYWltIHdhcyBwdWJsaXNoZWQgaW4gY2hhbm5lbDogJHtwdWJsaXNoUGFyYW1zLmNoYW5uZWxfbmFtZX1gKTtcbiAgICAgICAgICAgIHJldHVybiBkYi5DaGFubmVsLmZpbmRPbmUoe3doZXJlOiB7Y2hhbm5lbE5hbWU6IHB1Ymxpc2hQYXJhbXMuY2hhbm5lbF9uYW1lfX0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoJ3RoaXMgY2xhaW0gd2FzIG5vdCBwdWJsaXNoZWQgaW4gYSBjaGFubmVsJyk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKGNoYW5uZWwgPT4ge1xuICAgICAgICAvLyBzZXQgY2hhbm5lbCBpbmZvcm1hdGlvblxuICAgICAgICAgIGNlcnRpZmljYXRlSWQgPSBudWxsO1xuICAgICAgICAgIGNoYW5uZWxOYW1lID0gbnVsbDtcbiAgICAgICAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgICAgICAgY2VydGlmaWNhdGVJZCA9IGNoYW5uZWwuY2hhbm5lbENsYWltSWQ7XG4gICAgICAgICAgICBjaGFubmVsTmFtZSA9IGNoYW5uZWwuY2hhbm5lbE5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgY2VydGlmaWNhdGVJZDogJHtjZXJ0aWZpY2F0ZUlkfWApO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIC8vIGNyZWF0ZSB0aGUgRmlsZSByZWNvcmRcbiAgICAgICAgICBjb25zdCBmaWxlUmVjb3JkID0ge1xuICAgICAgICAgICAgbmFtZSAgICAgICA6IHB1Ymxpc2hQYXJhbXMubmFtZSxcbiAgICAgICAgICAgIGNsYWltSWQgICAgOiBwdWJsaXNoUmVzdWx0cy5jbGFpbV9pZCxcbiAgICAgICAgICAgIHRpdGxlICAgICAgOiBwdWJsaXNoUGFyYW1zLm1ldGFkYXRhLnRpdGxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHB1Ymxpc2hQYXJhbXMubWV0YWRhdGEuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBhZGRyZXNzICAgIDogcHVibGlzaFBhcmFtcy5jbGFpbV9hZGRyZXNzLFxuICAgICAgICAgICAgb3V0cG9pbnQgICA6IGAke3B1Ymxpc2hSZXN1bHRzLnR4aWR9OiR7cHVibGlzaFJlc3VsdHMubm91dH1gLFxuICAgICAgICAgICAgaGVpZ2h0ICAgICA6IDAsXG4gICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgIGZpbGVQYXRoICAgOiBwdWJsaXNoUGFyYW1zLmZpbGVfcGF0aCxcbiAgICAgICAgICAgIGZpbGVUeXBlLFxuICAgICAgICAgICAgbnNmdyAgICAgICA6IHB1Ymxpc2hQYXJhbXMubWV0YWRhdGEubnNmdyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgQ2xhaW0gcmVjb3JkXG4gICAgICAgICAgY29uc3QgY2xhaW1SZWNvcmQgPSB7XG4gICAgICAgICAgICBuYW1lICAgICAgIDogcHVibGlzaFBhcmFtcy5uYW1lLFxuICAgICAgICAgICAgY2xhaW1JZCAgICA6IHB1Ymxpc2hSZXN1bHRzLmNsYWltX2lkLFxuICAgICAgICAgICAgdGl0bGUgICAgICA6IHB1Ymxpc2hQYXJhbXMubWV0YWRhdGEudGl0bGUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcHVibGlzaFBhcmFtcy5tZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGFkZHJlc3MgICAgOiBwdWJsaXNoUGFyYW1zLmNsYWltX2FkZHJlc3MsXG4gICAgICAgICAgICB0aHVtYm5haWwgIDogcHVibGlzaFBhcmFtcy5tZXRhZGF0YS50aHVtYm5haWwsXG4gICAgICAgICAgICBvdXRwb2ludCAgIDogYCR7cHVibGlzaFJlc3VsdHMudHhpZH06JHtwdWJsaXNoUmVzdWx0cy5ub3V0fWAsXG4gICAgICAgICAgICBoZWlnaHQgICAgIDogMCxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBmaWxlVHlwZSxcbiAgICAgICAgICAgIG5zZncgICAgICAgOiBwdWJsaXNoUGFyYW1zLm1ldGFkYXRhLm5zZncsXG4gICAgICAgICAgICBhbW91bnQgICAgIDogcHVibGlzaFBhcmFtcy5iaWQsXG4gICAgICAgICAgICBjZXJ0aWZpY2F0ZUlkLFxuICAgICAgICAgICAgY2hhbm5lbE5hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyB1cHNlcnQgY3JpdGVyaWFcbiAgICAgICAgICBjb25zdCB1cHNlcnRDcml0ZXJpYSA9IHtcbiAgICAgICAgICAgIG5hbWUgICA6IHB1Ymxpc2hQYXJhbXMubmFtZSxcbiAgICAgICAgICAgIGNsYWltSWQ6IHB1Ymxpc2hSZXN1bHRzLmNsYWltX2lkLFxuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gdXBzZXJ0IHRoZSByZWNvcmRzXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtkYi51cHNlcnQoZGIuRmlsZSwgZmlsZVJlY29yZCwgdXBzZXJ0Q3JpdGVyaWEsICdGaWxlJyksIGRiLnVwc2VydChkYi5DbGFpbSwgY2xhaW1SZWNvcmQsIHVwc2VydENyaXRlcmlhLCAnQ2xhaW0nKV0pO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoW2ZpbGUsIGNsYWltXSkgPT4ge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnRmlsZSBhbmQgQ2xhaW0gcmVjb3JkcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCcpO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbZmlsZS5zZXRDbGFpbShjbGFpbSksIGNsYWltLnNldEZpbGUoZmlsZSldKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnRmlsZSBhbmQgQ2xhaW0gcmVjb3JkcyBzdWNjZXNzZnVsbHkgYXNzb2NpYXRlZCcpO1xuICAgICAgICAgIHJlc29sdmUocHVibGlzaFJlc3VsdHMpOyAvLyByZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIHJlc3VsdCBmcm9tIGxicnlBcGkucHVibGlzaENsYWltO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignUFVCTElTSCBFUlJPUicsIGVycm9yKTtcbiAgICAgICAgICBwdWJsaXNoSGVscGVycy5kZWxldGVUZW1wb3JhcnlGaWxlKHB1Ymxpc2hQYXJhbXMuZmlsZV9wYXRoKTsgLy8gZGVsZXRlIHRoZSBsb2NhbCBmaWxlXG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG4gIGNsYWltTmFtZUlzQXZhaWxhYmxlIChuYW1lKSB7XG4gICAgY29uc3QgY2xhaW1BZGRyZXNzZXMgPSBhZGRpdGlvbmFsQ2xhaW1BZGRyZXNzZXMgfHwgW107XG4gICAgY2xhaW1BZGRyZXNzZXMucHVzaChwcmltYXJ5Q2xhaW1BZGRyZXNzKTtcbiAgICAvLyBmaW5kIGFueSByZWNvcmRzIHdoZXJlIHRoZSBuYW1lIGlzIHVzZWRcbiAgICByZXR1cm4gZGIuQ2xhaW1cbiAgICAgIC5maW5kQWxsKHtcbiAgICAgICAgYXR0cmlidXRlczogWydhZGRyZXNzJ10sXG4gICAgICAgIHdoZXJlICAgICA6IHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgIFtPcC5vcl06IGNsYWltQWRkcmVzc2VzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPj0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhhdCBjbGFpbSBpcyBhbHJlYWR5IGluIHVzZScpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICB9LFxuICBjaGVja0NoYW5uZWxBdmFpbGFiaWxpdHkgKG5hbWUpIHtcbiAgICByZXR1cm4gZGIuQ2hhbm5lbFxuICAgICAgLmZpbmRBbGwoe1xuICAgICAgICB3aGVyZTogeyBjaGFubmVsTmFtZTogbmFtZSB9LFxuICAgICAgfSlcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoYXQgY2hhbm5lbCBoYXMgYWxyZWFkeSBiZWVuIGNsYWltZWQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICB9LFxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9jb250cm9sbGVycy9wdWJsaXNoQ29udHJvbGxlci5qcyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZzXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwiZnNcIlxuLy8gbW9kdWxlIGlkID0gNzlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiY29uc3QgZGIgPSByZXF1aXJlKCcuLi9tb2RlbHMvaW5kZXgnKTtcbmNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJ3dpbnN0b24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGF1dGhlbnRpY2F0ZVVzZXIgKGNoYW5uZWxOYW1lLCBjaGFubmVsSWQsIGNoYW5uZWxQYXNzd29yZCwgdXNlcikge1xuICAgIC8vIGNhc2U6IG5vIGNoYW5uZWxOYW1lIG9yIGNoYW5uZWwgSWQgYXJlIHByb3ZpZGVkIChhbm9ueW1vdXMpLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdXNlciB0b2tlbiBpcyBwcm92aWRlZFxuICAgIGlmICghY2hhbm5lbE5hbWUgJiYgIWNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hhbm5lbE5hbWUgICA6IG51bGwsXG4gICAgICAgIGNoYW5uZWxDbGFpbUlkOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gY2FzZTogY2hhbm5lbE5hbWUgb3IgY2hhbm5lbCBJZCBhcmUgcHJvdmlkZWQgd2l0aCB1c2VyIHRva2VuXG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIGlmIChjaGFubmVsTmFtZSAmJiBjaGFubmVsTmFtZSAhPT0gdXNlci5jaGFubmVsTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBwcm92aWRlZCBjaGFubmVsIG5hbWUgZG9lcyBub3QgbWF0Y2ggdXNlciBjcmVkZW50aWFscycpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5uZWxJZCAmJiBjaGFubmVsSWQgIT09IHVzZXIuY2hhbm5lbENsYWltSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgcHJvdmlkZWQgY2hhbm5lbCBpZCBkb2VzIG5vdCBtYXRjaCB1c2VyIGNyZWRlbnRpYWxzJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjaGFubmVsTmFtZSAgIDogdXNlci5jaGFubmVsTmFtZSxcbiAgICAgICAgY2hhbm5lbENsYWltSWQ6IHVzZXIuY2hhbm5lbENsYWltSWQsXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBjYXNlOiBjaGFubmVsTmFtZSBvciBjaGFubmVsIElkIGFyZSBwcm92aWRlZCB3aXRoIHBhc3N3b3JkIGluc3RlYWQgb2YgdXNlciB0b2tlblxuICAgIGlmICghY2hhbm5lbFBhc3N3b3JkKSB0aHJvdyBuZXcgRXJyb3IoJ25vIGNoYW5uZWwgcGFzc3dvcmQgcHJvdmlkZWQnKTtcbiAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHMuYXV0aGVudGljYXRlQ2hhbm5lbENyZWRlbnRpYWxzKGNoYW5uZWxOYW1lLCBjaGFubmVsSWQsIGNoYW5uZWxQYXNzd29yZCk7XG4gIH0sXG4gIGF1dGhlbnRpY2F0ZUNoYW5uZWxDcmVkZW50aWFscyAoY2hhbm5lbE5hbWUsIGNoYW5uZWxJZCwgdXNlclBhc3N3b3JkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGhvaXN0ZWQgdmFyaWFibGVzXG4gICAgICBsZXQgY2hhbm5lbERhdGE7XG4gICAgICAvLyBidWlsZCB0aGUgcGFyYW1zIGZvciBmaW5kaW5nIHRoZSBjaGFubmVsXG4gICAgICBsZXQgY2hhbm5lbEZpbmRQYXJhbXMgPSB7fTtcbiAgICAgIGlmIChjaGFubmVsTmFtZSkgY2hhbm5lbEZpbmRQYXJhbXNbJ2NoYW5uZWxOYW1lJ10gPSBjaGFubmVsTmFtZTtcbiAgICAgIGlmIChjaGFubmVsSWQpIGNoYW5uZWxGaW5kUGFyYW1zWydjaGFubmVsQ2xhaW1JZCddID0gY2hhbm5lbElkO1xuICAgICAgLy8gZmluZCB0aGUgY2hhbm5lbFxuICAgICAgZGIuQ2hhbm5lbFxuICAgICAgICAuZmluZE9uZSh7XG4gICAgICAgICAgd2hlcmU6IGNoYW5uZWxGaW5kUGFyYW1zLFxuICAgICAgICB9KVxuICAgICAgICAudGhlbihjaGFubmVsID0+IHtcbiAgICAgICAgICBpZiAoIWNoYW5uZWwpIHtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zygnbm8gY2hhbm5lbCBmb3VuZCcpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiBmYWlsZWQsIHlvdSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhhdCBjaGFubmVsJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoYW5uZWxEYXRhID0gY2hhbm5lbC5nZXQoKTtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoJ2NoYW5uZWwgZGF0YTonLCBjaGFubmVsRGF0YSk7XG4gICAgICAgICAgcmV0dXJuIGRiLlVzZXIuZmluZE9uZSh7XG4gICAgICAgICAgICB3aGVyZTogeyB1c2VyTmFtZTogY2hhbm5lbERhdGEuY2hhbm5lbE5hbWUuc3Vic3RyaW5nKDEpIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKHVzZXIgPT4ge1xuICAgICAgICAgIGlmICghdXNlcikge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdubyB1c2VyIGZvdW5kJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCwgeW91IGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGF0IGNoYW5uZWwnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHVzZXIuY29tcGFyZVBhc3N3b3JkKHVzZXJQYXNzd29yZCk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKGlzTWF0Y2ggPT4ge1xuICAgICAgICAgIGlmICghaXNNYXRjaCkge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdpbmNvcnJlY3QgcGFzc3dvcmQnKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gZmFpbGVkLCB5b3UgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRoYXQgY2hhbm5lbCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2dnZXIuZGVidWcoJy4uLnBhc3N3b3JkIHdhcyBhIG1hdGNoLi4uJyk7XG4gICAgICAgICAgcmVzb2x2ZShjaGFubmVsRGF0YSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2F1dGgvYXV0aGVudGljYXRpb24uanMiLCJjb25zdCBDTEFJTVNfUEVSX1BBR0UgPSAxMjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJldHVyblBhZ2luYXRlZENoYW5uZWxDbGFpbXMgKGNoYW5uZWxOYW1lLCBsb25nQ2hhbm5lbENsYWltSWQsIGNsYWltcywgcGFnZSkge1xuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBtb2R1bGUuZXhwb3J0cy5kZXRlcm1pbmVUb3RhbFBhZ2VzKGNsYWltcyk7XG4gICAgY29uc3QgcGFnaW5hdGlvblBhZ2UgPSBtb2R1bGUuZXhwb3J0cy5nZXRQYWdlRnJvbVF1ZXJ5KHBhZ2UpO1xuICAgIGNvbnN0IHZpZXdEYXRhID0ge1xuICAgICAgY2hhbm5lbE5hbWUgICAgICAgOiBjaGFubmVsTmFtZSxcbiAgICAgIGxvbmdDaGFubmVsQ2xhaW1JZDogbG9uZ0NoYW5uZWxDbGFpbUlkLFxuICAgICAgY2xhaW1zICAgICAgICAgICAgOiBtb2R1bGUuZXhwb3J0cy5leHRyYWN0UGFnZUZyb21DbGFpbXMoY2xhaW1zLCBwYWdpbmF0aW9uUGFnZSksXG4gICAgICBwcmV2aW91c1BhZ2UgICAgICA6IG1vZHVsZS5leHBvcnRzLmRldGVybWluZVByZXZpb3VzUGFnZShwYWdpbmF0aW9uUGFnZSksXG4gICAgICBjdXJyZW50UGFnZSAgICAgICA6IHBhZ2luYXRpb25QYWdlLFxuICAgICAgbmV4dFBhZ2UgICAgICAgICAgOiBtb2R1bGUuZXhwb3J0cy5kZXRlcm1pbmVOZXh0UGFnZSh0b3RhbFBhZ2VzLCBwYWdpbmF0aW9uUGFnZSksXG4gICAgICB0b3RhbFBhZ2VzICAgICAgICA6IHRvdGFsUGFnZXMsXG4gICAgICB0b3RhbFJlc3VsdHMgICAgICA6IG1vZHVsZS5leHBvcnRzLmRldGVybWluZVRvdGFsQ2xhaW1zKGNsYWltcyksXG4gICAgfTtcbiAgICByZXR1cm4gdmlld0RhdGE7XG4gIH0sXG4gIGdldFBhZ2VGcm9tUXVlcnkgKHBhZ2UpIHtcbiAgICBpZiAocGFnZSkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KHBhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gMTtcbiAgfSxcbiAgZXh0cmFjdFBhZ2VGcm9tQ2xhaW1zIChjbGFpbXMsIHBhZ2VOdW1iZXIpIHtcbiAgICBpZiAoIWNsYWltcykge1xuICAgICAgcmV0dXJuIFtdOyAgLy8gaWYgbm8gY2xhaW1zLCByZXR1cm4gdGhpcyBkZWZhdWx0XG4gICAgfVxuICAgIC8vIGxvZ2dlci5kZWJ1ZygnY2xhaW1zIGlzIGFycmF5PycsIEFycmF5LmlzQXJyYXkoY2xhaW1zKSk7XG4gICAgLy8gbG9nZ2VyLmRlYnVnKGBwYWdlTnVtYmVyICR7cGFnZU51bWJlcn0gaXMgbnVtYmVyP2AsIE51bWJlci5pc0ludGVnZXIocGFnZU51bWJlcikpO1xuICAgIGNvbnN0IGNsYWltU3RhcnRJbmRleCA9IChwYWdlTnVtYmVyIC0gMSkgKiBDTEFJTVNfUEVSX1BBR0U7XG4gICAgY29uc3QgY2xhaW1FbmRJbmRleCA9IGNsYWltU3RhcnRJbmRleCArIENMQUlNU19QRVJfUEFHRTtcbiAgICBjb25zdCBwYWdlT2ZDbGFpbXMgPSBjbGFpbXMuc2xpY2UoY2xhaW1TdGFydEluZGV4LCBjbGFpbUVuZEluZGV4KTtcbiAgICByZXR1cm4gcGFnZU9mQ2xhaW1zO1xuICB9LFxuICBkZXRlcm1pbmVUb3RhbFBhZ2VzIChjbGFpbXMpIHtcbiAgICBpZiAoIWNsYWltcykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRvdGFsQ2xhaW1zID0gY2xhaW1zLmxlbmd0aDtcbiAgICAgIGlmICh0b3RhbENsYWltcyA8IENMQUlNU19QRVJfUEFHRSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZ1bGxQYWdlcyA9IE1hdGguZmxvb3IodG90YWxDbGFpbXMgLyBDTEFJTVNfUEVSX1BBR0UpO1xuICAgICAgY29uc3QgcmVtYWluZGVyID0gdG90YWxDbGFpbXMgJSBDTEFJTVNfUEVSX1BBR0U7XG4gICAgICBpZiAocmVtYWluZGVyID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmdWxsUGFnZXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVsbFBhZ2VzICsgMTtcbiAgICB9XG4gIH0sXG4gIGRldGVybWluZVByZXZpb3VzUGFnZSAoY3VycmVudFBhZ2UpIHtcbiAgICBpZiAoY3VycmVudFBhZ2UgPT09IDEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudFBhZ2UgLSAxO1xuICB9LFxuICBkZXRlcm1pbmVOZXh0UGFnZSAodG90YWxQYWdlcywgY3VycmVudFBhZ2UpIHtcbiAgICBpZiAoY3VycmVudFBhZ2UgPT09IHRvdGFsUGFnZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudFBhZ2UgKyAxO1xuICB9LFxuICBkZXRlcm1pbmVUb3RhbENsYWltcyAoY2xhaW1zKSB7XG4gICAgaWYgKCFjbGFpbXMpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gY2xhaW1zLmxlbmd0aDtcbiAgfSxcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2ZXIvaGVscGVycy9jaGFubmVsUGFnaW5hdGlvbi5qcyIsImNvbnN0IHsgZGV0YWlsczogaG9zdCB9ID0gcmVxdWlyZSgnLi4vLi4vY29uZmlnL3NpdGVDb25maWcuanMnKTtcbmNvbnN0IGhhbmRsZVBhZ2VSZW5kZXIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2hhbmRsZVBhZ2VSZW5kZXIuanN4Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKGFwcCkgPT4ge1xuICAvLyByb3V0ZSBmb3IgdGhlIGhvbWUgcGFnZVxuICBhcHAuZ2V0KCcvJywgKHJlcSwgcmVzKSA9PiB7XG4gICAgaGFuZGxlUGFnZVJlbmRlcihyZXEsIHJlcyk7XG4gIH0pO1xuICAvLyByb3V0ZSB0byBkaXNwbGF5IGxvZ2luIHBhZ2VcbiAgYXBwLmdldCgnL2xvZ2luJywgKHJlcSwgcmVzKSA9PiB7XG4gICAgaGFuZGxlUGFnZVJlbmRlcihyZXEsIHJlcyk7XG4gIH0pO1xuICAvLyByb3V0ZSB0byBzaG93ICdhYm91dCcgcGFnZVxuICBhcHAuZ2V0KCcvYWJvdXQnLCAocmVxLCByZXMpID0+IHtcbiAgICBoYW5kbGVQYWdlUmVuZGVyKHJlcSwgcmVzKTtcbiAgfSk7XG4gIC8vIHJvdXRlIHRvIGRpc3BsYXkgYSBsaXN0IG9mIHRoZSB0cmVuZGluZyBpbWFnZXNcbiAgYXBwLmdldCgnL3RyZW5kaW5nJywgKHJlcSwgcmVzKSA9PiB7XG4gICAgcmVzLnN0YXR1cygzMDEpLnJlZGlyZWN0KCcvcG9wdWxhcicpO1xuICB9KTtcbiAgYXBwLmdldCgnL3BvcHVsYXInLCAocmVxLCByZXMpID0+IHtcbiAgICBoYW5kbGVQYWdlUmVuZGVyKHJlcSwgcmVzKTtcbiAgfSk7XG4gIC8vIHJvdXRlIHRvIGRpc3BsYXkgYSBsaXN0IG9mIHRoZSB0cmVuZGluZyBpbWFnZXNcbiAgYXBwLmdldCgnL25ldycsIChyZXEsIHJlcykgPT4ge1xuICAgIGhhbmRsZVBhZ2VSZW5kZXIocmVxLCByZXMpO1xuICB9KTtcbiAgLy8gcm91dGUgdG8gc2VuZCBlbWJlZGFibGUgdmlkZW8gcGxheWVyIChmb3IgdHdpdHRlcilcbiAgYXBwLmdldCgnL2VtYmVkLzpjbGFpbUlkLzpuYW1lJywgKHsgcGFyYW1zIH0sIHJlcykgPT4ge1xuICAgIGNvbnN0IGNsYWltSWQgPSBwYXJhbXMuY2xhaW1JZDtcbiAgICBjb25zdCBuYW1lID0gcGFyYW1zLm5hbWU7XG4gICAgLy8gZ2V0IGFuZCByZW5kZXIgdGhlIGNvbnRlbnRcbiAgICByZXMuc3RhdHVzKDIwMCkucmVuZGVyKCdlbWJlZCcsIHsgbGF5b3V0OiAnZW1iZWQnLCBob3N0LCBjbGFpbUlkLCBuYW1lIH0pO1xuICB9KTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2ZXIvcm91dGVzL3BhZ2Utcm91dGVzLmpzIiwiaW1wb3J0ICogYXMgYWN0aW9ucyBmcm9tICdjb25zdGFudHMvcHVibGlzaF9hY3Rpb25fdHlwZXMnO1xuaW1wb3J0IHsgTE9HSU4gfSBmcm9tICdjb25zdGFudHMvcHVibGlzaF9jaGFubmVsX3NlbGVjdF9zdGF0ZXMnO1xuY29uc3QgeyBwdWJsaXNoaW5nIH0gPSByZXF1aXJlKCcuLi8uLi9jb25maWcvc2l0ZUNvbmZpZy5qcycpO1xuXG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGRpc2FibGVkICAgICAgICAgIDogcHVibGlzaGluZy5kaXNhYmxlZCxcbiAgZGlzYWJsZWRNZXNzYWdlICAgOiBwdWJsaXNoaW5nLmRpc2FibGVkTWVzc2FnZSxcbiAgcHVibGlzaEluQ2hhbm5lbCAgOiBmYWxzZSxcbiAgc2VsZWN0ZWRDaGFubmVsICAgOiBMT0dJTixcbiAgc2hvd01ldGFkYXRhSW5wdXRzOiBmYWxzZSxcbiAgc3RhdHVzICAgICAgICAgICAgOiB7XG4gICAgc3RhdHVzIDogbnVsbCxcbiAgICBtZXNzYWdlOiBudWxsLFxuICB9LFxuICBlcnJvcjoge1xuICAgIGZpbGUgICAgICAgICA6IG51bGwsXG4gICAgdXJsICAgICAgICAgIDogbnVsbCxcbiAgICBjaGFubmVsICAgICAgOiBudWxsLFxuICAgIHB1Ymxpc2hTdWJtaXQ6IG51bGwsXG4gIH0sXG4gIGZpbGUgICAgOiBudWxsLFxuICBjbGFpbSAgIDogJycsXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGUgICAgICA6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBsaWNlbnNlICAgIDogJycsXG4gICAgbnNmdyAgICAgICA6IGZhbHNlLFxuICB9LFxuICB0aHVtYm5haWw6IG51bGwsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBhY3Rpb25zLkZJTEVfU0VMRUNURUQ6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgaW5pdGlhbFN0YXRlLCB7ICAvLyBub3RlOiBjbGVhcnMgdG8gaW5pdGlhbCBzdGF0ZVxuICAgICAgICBmaWxlOiBhY3Rpb24uZGF0YSxcbiAgICAgIH0pO1xuICAgIGNhc2UgYWN0aW9ucy5GSUxFX0NMRUFSOlxuICAgICAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbiAgICBjYXNlIGFjdGlvbnMuTUVUQURBVEFfVVBEQVRFOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIG1ldGFkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5tZXRhZGF0YSwge1xuICAgICAgICAgIFthY3Rpb24uZGF0YS5uYW1lXTogYWN0aW9uLmRhdGEudmFsdWUsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgY2FzZSBhY3Rpb25zLkNMQUlNX1VQREFURTpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICBjbGFpbTogYWN0aW9uLmRhdGEsXG4gICAgICB9KTtcbiAgICBjYXNlIGFjdGlvbnMuU0VUX1BVQkxJU0hfSU5fQ0hBTk5FTDpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICBwdWJsaXNoSW5DaGFubmVsOiBhY3Rpb24uY2hhbm5lbCxcbiAgICAgIH0pO1xuICAgIGNhc2UgYWN0aW9ucy5QVUJMSVNIX1NUQVRVU19VUERBVEU6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgc3RhdHVzOiBhY3Rpb24uZGF0YSxcbiAgICAgIH0pO1xuICAgIGNhc2UgYWN0aW9ucy5FUlJPUl9VUERBVEU6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgZXJyb3I6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmVycm9yLCB7XG4gICAgICAgICAgW2FjdGlvbi5kYXRhLm5hbWVdOiBhY3Rpb24uZGF0YS52YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICBjYXNlIGFjdGlvbnMuU0VMRUNURURfQ0hBTk5FTF9VUERBVEU6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgc2VsZWN0ZWRDaGFubmVsOiBhY3Rpb24uZGF0YSxcbiAgICAgIH0pO1xuICAgIGNhc2UgYWN0aW9ucy5UT0dHTEVfTUVUQURBVEFfSU5QVVRTOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIHNob3dNZXRhZGF0YUlucHV0czogYWN0aW9uLmRhdGEsXG4gICAgICB9KTtcbiAgICBjYXNlIGFjdGlvbnMuVEhVTUJOQUlMX05FVzpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICB0aHVtYm5haWw6IGFjdGlvbi5kYXRhLFxuICAgICAgfSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3JlZHVjZXJzL3B1Ymxpc2guanMiLCJpbXBvcnQgKiBhcyBhY3Rpb25zIGZyb20gJ2NvbnN0YW50cy9jaGFubmVsX2FjdGlvbl90eXBlcyc7XG5cbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgbG9nZ2VkSW5DaGFubmVsOiB7XG4gICAgbmFtZSAgIDogbnVsbCxcbiAgICBzaG9ydElkOiBudWxsLFxuICAgIGxvbmdJZCA6IG51bGwsXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBhY3Rpb25zLkNIQU5ORUxfVVBEQVRFOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIGxvZ2dlZEluQ2hhbm5lbDogYWN0aW9uLmRhdGEsXG4gICAgICB9KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvcmVkdWNlcnMvY2hhbm5lbC5qcyIsImltcG9ydCAqIGFzIGFjdGlvbnMgZnJvbSAnY29uc3RhbnRzL3Nob3dfYWN0aW9uX3R5cGVzJztcbmltcG9ydCB7IExPQ0FMX0NIRUNLLCBFUlJPUiB9IGZyb20gJ2NvbnN0YW50cy9hc3NldF9kaXNwbGF5X3N0YXRlcyc7XG5cbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgcmVxdWVzdDoge1xuICAgIGVycm9yOiBudWxsLFxuICAgIHR5cGUgOiBudWxsLFxuICAgIGlkICAgOiBudWxsLFxuICB9LFxuICByZXF1ZXN0TGlzdCA6IHt9LFxuICBjaGFubmVsTGlzdCA6IHt9LFxuICBhc3NldExpc3QgICA6IHt9LFxuICBkaXNwbGF5QXNzZXQ6IHtcbiAgICBlcnJvciA6IG51bGwsXG4gICAgc3RhdHVzOiBMT0NBTF9DSEVDSyxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChzdGF0ZSA9IGluaXRpYWxTdGF0ZSwgYWN0aW9uKSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAvLyBoYW5kbGUgcmVxdWVzdFxuICAgIGNhc2UgYWN0aW9ucy5SRVFVRVNUX0VSUk9SOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlcXVlc3QsIHtcbiAgICAgICAgICBlcnJvcjogYWN0aW9uLmRhdGEsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgY2FzZSBhY3Rpb25zLlJFUVVFU1RfVVBEQVRFOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlcXVlc3QsIHtcbiAgICAgICAgICB0eXBlOiBhY3Rpb24uZGF0YS5yZXF1ZXN0VHlwZSxcbiAgICAgICAgICBpZCAgOiBhY3Rpb24uZGF0YS5yZXF1ZXN0SWQsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgLy8gc3RvcmUgcmVxdWVzdHNcbiAgICBjYXNlIGFjdGlvbnMuUkVRVUVTVF9MSVNUX0FERDpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICByZXF1ZXN0TGlzdDogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVxdWVzdExpc3QsIHtcbiAgICAgICAgICBbYWN0aW9uLmRhdGEuaWRdOiB7XG4gICAgICAgICAgICBlcnJvcjogYWN0aW9uLmRhdGEuZXJyb3IsXG4gICAgICAgICAgICBrZXkgIDogYWN0aW9uLmRhdGEua2V5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgLy8gYXNzZXQgZGF0YVxuICAgIGNhc2UgYWN0aW9ucy5BU1NFVF9BREQ6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgYXNzZXRMaXN0OiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hc3NldExpc3QsIHtcbiAgICAgICAgICBbYWN0aW9uLmRhdGEuaWRdOiB7XG4gICAgICAgICAgICBlcnJvciAgICA6IGFjdGlvbi5kYXRhLmVycm9yLFxuICAgICAgICAgICAgbmFtZSAgICAgOiBhY3Rpb24uZGF0YS5uYW1lLFxuICAgICAgICAgICAgY2xhaW1JZCAgOiBhY3Rpb24uZGF0YS5jbGFpbUlkLFxuICAgICAgICAgICAgc2hvcnRJZCAgOiBhY3Rpb24uZGF0YS5zaG9ydElkLFxuICAgICAgICAgICAgY2xhaW1EYXRhOiBhY3Rpb24uZGF0YS5jbGFpbURhdGEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICAvLyBjaGFubmVsIGRhdGFcbiAgICBjYXNlIGFjdGlvbnMuQ0hBTk5FTF9BREQ6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgY2hhbm5lbExpc3Q6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmNoYW5uZWxMaXN0LCB7XG4gICAgICAgICAgW2FjdGlvbi5kYXRhLmlkXToge1xuICAgICAgICAgICAgbmFtZSAgICAgIDogYWN0aW9uLmRhdGEubmFtZSxcbiAgICAgICAgICAgIGxvbmdJZCAgICA6IGFjdGlvbi5kYXRhLmxvbmdJZCxcbiAgICAgICAgICAgIHNob3J0SWQgICA6IGFjdGlvbi5kYXRhLnNob3J0SWQsXG4gICAgICAgICAgICBjbGFpbXNEYXRhOiBhY3Rpb24uZGF0YS5jbGFpbXNEYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgY2FzZSBhY3Rpb25zLkNIQU5ORUxfQ0xBSU1TX1VQREFURV9TVUNDRVNTOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIGNoYW5uZWxMaXN0OiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jaGFubmVsTGlzdCwge1xuICAgICAgICAgIFthY3Rpb24uZGF0YS5jaGFubmVsTGlzdElkXTogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuY2hhbm5lbExpc3RbYWN0aW9uLmRhdGEuY2hhbm5lbExpc3RJZF0sIHtcbiAgICAgICAgICAgIGNsYWltc0RhdGE6IGFjdGlvbi5kYXRhLmNsYWltc0RhdGEsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgLy8gZGlzcGxheSBhbiBhc3NldFxuICAgIGNhc2UgYWN0aW9ucy5GSUxFX0FWQUlMQUJJTElUWV9VUERBVEU6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgZGlzcGxheUFzc2V0OiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5kaXNwbGF5QXNzZXQsIHtcbiAgICAgICAgICBzdGF0dXM6IGFjdGlvbi5kYXRhLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIGNhc2UgYWN0aW9ucy5ESVNQTEFZX0FTU0VUX0VSUk9SOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIGRpc3BsYXlBc3NldDogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZGlzcGxheUFzc2V0LCB7XG4gICAgICAgICAgZXJyb3IgOiBhY3Rpb24uZGF0YSxcbiAgICAgICAgICBzdGF0dXM6IEVSUk9SLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9yZWR1Y2Vycy9zaG93LmpzIiwiY29uc3Qgc2l0ZUNvbmZpZyA9IHJlcXVpcmUoJy4uLy4uL2NvbmZpZy9zaXRlQ29uZmlnLmpzJyk7XG5cbmNvbnN0IHtcbiAgYW5hbHl0aWNzOiB7XG4gICAgZ29vZ2xlSWQ6IGdvb2dsZUFuYWx5dGljc0lkLFxuICB9LFxuICBhc3NldERlZmF1bHRzOiB7XG4gICAgdGh1bWJuYWlsOiBkZWZhdWx0VGh1bWJuYWlsLFxuICAgIGRlc2NyaXB0aW9uOiBkZWZhdWx0RGVzY3JpcHRpb24sXG4gIH0sXG4gIGRldGFpbHM6IHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBob3N0LFxuICAgIHRpdGxlLFxuICAgIHR3aXR0ZXIsXG4gIH0sXG59ID0gc2l0ZUNvbmZpZztcblxuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBkZXNjcmlwdGlvbixcbiAgZ29vZ2xlQW5hbHl0aWNzSWQsXG4gIGhvc3QsXG4gIHRpdGxlLFxuICB0d2l0dGVyLFxuICBkZWZhdWx0RGVzY3JpcHRpb24sXG4gIGRlZmF1bHRUaHVtYm5haWwsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3JlZHVjZXJzL3NpdGUuanMiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1nYVwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInJlYWN0LWdhXCJcbi8vIG1vZHVsZSBpZCA9IDg3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU0VPIGZyb20gJ2NvbXBvbmVudHMvU0VPJztcbmltcG9ydCBOYXZCYXIgZnJvbSAnY29udGFpbmVycy9OYXZCYXInO1xuaW1wb3J0IFB1Ymxpc2hUb29sIGZyb20gJ2NvbnRhaW5lcnMvUHVibGlzaFRvb2wnO1xuXG5jbGFzcyBIb21lUGFnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlciAoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXsncm93IHJvdy0tdGFsbCBmbGV4LWNvbnRhaW5lci0tY29sdW1uJ30+XG4gICAgICAgIDxTRU8gLz5cbiAgICAgICAgPE5hdkJhciAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J3JvdyByb3ctLXRhbGwgcm93LS1wYWRkZWQgZmxleC1jb250YWluZXItLWNvbHVtbid9PlxuICAgICAgICAgIDxQdWJsaXNoVG9vbCAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEhvbWVQYWdlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3BhZ2VzL0hvbWVQYWdlL2luZGV4LmpzeCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgSGVsbWV0IGZyb20gJ3JlYWN0LWhlbG1ldCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgeyBjcmVhdGVQYWdlVGl0bGUgfSBmcm9tICd1dGlscy9wYWdlVGl0bGUnO1xuaW1wb3J0IHsgY3JlYXRlTWV0YVRhZ3MgfSBmcm9tICd1dGlscy9tZXRhVGFncyc7XG5pbXBvcnQgeyBjcmVhdGVDYW5vbmljYWxMaW5rIH0gZnJvbSAndXRpbHMvY2Fub25pY2FsTGluayc7XG5cbmNsYXNzIFNFTyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlciAoKSB7XG4gICAgLy8gcHJvcHMgZnJvbSBzdGF0ZVxuICAgIGNvbnN0IHsgZGVmYXVsdERlc2NyaXB0aW9uLCBkZWZhdWx0VGh1bWJuYWlsLCBzaXRlRGVzY3JpcHRpb24sIHNpdGVIb3N0LCBzaXRlVGl0bGUsIHNpdGVUd2l0dGVyIH0gPSB0aGlzLnByb3BzO1xuICAgIC8vIHByb3BzIGZyb20gcGFyZW50XG4gICAgY29uc3QgeyBhc3NldCwgY2hhbm5lbCwgcGFnZVVyaSB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgeyBwYWdlVGl0bGUgfSA9IHRoaXMucHJvcHM7XG4gICAgLy8gY3JlYXRlIHBhZ2UgdGl0bGUsIHRhZ3MsIGFuZCBjYW5vbmljYWwgbGlua1xuICAgIHBhZ2VUaXRsZSA9IGNyZWF0ZVBhZ2VUaXRsZShzaXRlVGl0bGUsIHBhZ2VUaXRsZSk7XG4gICAgY29uc3QgbWV0YVRhZ3MgPSBjcmVhdGVNZXRhVGFncyhzaXRlRGVzY3JpcHRpb24sIHNpdGVIb3N0LCBzaXRlVGl0bGUsIHNpdGVUd2l0dGVyLCBhc3NldCwgY2hhbm5lbCwgZGVmYXVsdERlc2NyaXB0aW9uLCBkZWZhdWx0VGh1bWJuYWlsKTtcbiAgICBjb25zdCBjYW5vbmljYWxMaW5rID0gY3JlYXRlQ2Fub25pY2FsTGluayhhc3NldCwgY2hhbm5lbCwgcGFnZVVyaSwgc2l0ZUhvc3QpO1xuICAgIC8vIHJlbmRlciByZXN1bHRzXG4gICAgcmV0dXJuIChcbiAgICAgIDxIZWxtZXRcbiAgICAgICAgdGl0bGU9e3BhZ2VUaXRsZX1cbiAgICAgICAgbWV0YT17bWV0YVRhZ3N9XG4gICAgICAgIGxpbms9e1t7cmVsOiAnY2Fub25pY2FsJywgaHJlZjogY2Fub25pY2FsTGlua31dfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59O1xuXG5TRU8ucHJvcFR5cGVzID0ge1xuICBwYWdlVGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHBhZ2VVcmkgIDogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2hhbm5lbCAgOiBQcm9wVHlwZXMub2JqZWN0LFxuICBhc3NldCAgICA6IFByb3BUeXBlcy5vYmplY3QsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBTRU87XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29tcG9uZW50cy9TRU8vdmlldy5qc3giLCJleHBvcnQgY29uc3QgY3JlYXRlUGFnZVRpdGxlID0gKHNpdGVUaXRsZSwgcGFnZVRpdGxlKSA9PiB7XG4gIGlmICghcGFnZVRpdGxlKSB7XG4gICAgcmV0dXJuIGAke3NpdGVUaXRsZX1gO1xuICB9XG4gIHJldHVybiBgJHtzaXRlVGl0bGV9IC0gJHtwYWdlVGl0bGV9YDtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvdXRpbHMvcGFnZVRpdGxlLmpzIiwiY29uc3QgZGV0ZXJtaW5lT2dUaHVtYm5haWxDb250ZW50VHlwZSA9ICh0aHVtYm5haWwpID0+IHtcbiAgaWYgKHRodW1ibmFpbCkge1xuICAgIGNvbnN0IGZpbGVFeHQgPSB0aHVtYm5haWwuc3Vic3RyaW5nKHRodW1ibmFpbC5sYXN0SW5kZXhPZignLicpKTtcbiAgICBzd2l0Y2ggKGZpbGVFeHQpIHtcbiAgICAgIGNhc2UgJ2pwZWcnOlxuICAgICAgY2FzZSAnanBnJzpcbiAgICAgICAgcmV0dXJuICdpbWFnZS9qcGVnJztcbiAgICAgIGNhc2UgJ3BuZyc6XG4gICAgICAgIHJldHVybiAnaW1hZ2UvcG5nJztcbiAgICAgIGNhc2UgJ2dpZic6XG4gICAgICAgIHJldHVybiAnaW1hZ2UvZ2lmJztcbiAgICAgIGNhc2UgJ21wNCc6XG4gICAgICAgIHJldHVybiAndmlkZW8vbXA0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnaW1hZ2UvanBlZyc7XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn07XG5cbmNvbnN0IGNyZWF0ZUJhc2ljTWV0YVRhZ3MgPSAoc2l0ZUhvc3QsIHNpdGVEZXNjcmlwdGlvbiwgc2l0ZVRpdGxlLCBzaXRlVHdpdHRlcikgPT4ge1xuICByZXR1cm4gW1xuICAgIHtwcm9wZXJ0eTogJ29nOnRpdGxlJywgY29udGVudDogc2l0ZVRpdGxlfSxcbiAgICB7cHJvcGVydHk6ICdvZzp1cmwnLCBjb250ZW50OiBzaXRlSG9zdH0sXG4gICAge3Byb3BlcnR5OiAnb2c6c2l0ZV9uYW1lJywgY29udGVudDogc2l0ZVRpdGxlfSxcbiAgICB7cHJvcGVydHk6ICdvZzpkZXNjcmlwdGlvbicsIGNvbnRlbnQ6IHNpdGVEZXNjcmlwdGlvbn0sXG4gICAge3Byb3BlcnR5OiAndHdpdHRlcjpzaXRlJywgY29udGVudDogc2l0ZVR3aXR0ZXJ9LFxuICAgIHtwcm9wZXJ0eTogJ3R3aXR0ZXI6Y2FyZCcsIGNvbnRlbnQ6ICdzdW1tYXJ5J30sXG4gIF07XG59O1xuXG5jb25zdCBjcmVhdGVDaGFubmVsTWV0YVRhZ3MgPSAoc2l0ZVRpdGxlLCBzaXRlSG9zdCwgc2l0ZVR3aXR0ZXIsIGNoYW5uZWwpID0+IHtcbiAgY29uc3QgeyBuYW1lLCBsb25nSWQgfSA9IGNoYW5uZWw7XG4gIHJldHVybiBbXG4gICAge3Byb3BlcnR5OiAnb2c6dGl0bGUnLCBjb250ZW50OiBgJHtuYW1lfSBvbiAke3NpdGVUaXRsZX1gfSxcbiAgICB7cHJvcGVydHk6ICdvZzp1cmwnLCBjb250ZW50OiBgJHtzaXRlSG9zdH0vJHtuYW1lfToke2xvbmdJZH1gfSxcbiAgICB7cHJvcGVydHk6ICdvZzpzaXRlX25hbWUnLCBjb250ZW50OiBzaXRlVGl0bGV9LFxuICAgIHtwcm9wZXJ0eTogJ29nOmRlc2NyaXB0aW9uJywgY29udGVudDogYCR7bmFtZX0sIGEgY2hhbm5lbCBvbiAke3NpdGVUaXRsZX1gfSxcbiAgICB7cHJvcGVydHk6ICd0d2l0dGVyOnNpdGUnLCBjb250ZW50OiBzaXRlVHdpdHRlcn0sXG4gICAge3Byb3BlcnR5OiAndHdpdHRlcjpjYXJkJywgY29udGVudDogJ3N1bW1hcnknfSxcbiAgXTtcbn07XG5cbmNvbnN0IGNyZWF0ZUFzc2V0TWV0YVRhZ3MgPSAoc2l0ZUhvc3QsIHNpdGVUaXRsZSwgc2l0ZVR3aXR0ZXIsIGFzc2V0LCBkZWZhdWx0RGVzY3JpcHRpb24sIGRlZmF1bHRUaHVtYm5haWwpID0+IHtcbiAgY29uc3QgeyBjbGFpbURhdGEgfSA9IGFzc2V0O1xuICBjb25zdCB7IGNvbnRlbnRUeXBlIH0gPSBjbGFpbURhdGE7XG4gIGNvbnN0IGVtYmVkVXJsID0gYCR7c2l0ZUhvc3R9LyR7Y2xhaW1EYXRhLmNsYWltSWR9LyR7Y2xhaW1EYXRhLm5hbWV9YDtcbiAgY29uc3Qgc2hvd1VybCA9IGAke3NpdGVIb3N0fS8ke2NsYWltRGF0YS5jbGFpbUlkfS8ke2NsYWltRGF0YS5uYW1lfWA7XG4gIGNvbnN0IHNvdXJjZSA9IGAke3NpdGVIb3N0fS8ke2NsYWltRGF0YS5jbGFpbUlkfS8ke2NsYWltRGF0YS5uYW1lfS4ke2NsYWltRGF0YS5maWxlRXh0fWA7XG4gIGNvbnN0IG9nVGl0bGUgPSBjbGFpbURhdGEudGl0bGUgfHwgY2xhaW1EYXRhLm5hbWU7XG4gIGNvbnN0IG9nRGVzY3JpcHRpb24gPSBjbGFpbURhdGEuZGVzY3JpcHRpb24gfHwgZGVmYXVsdERlc2NyaXB0aW9uO1xuICBjb25zdCBvZ1RodW1ibmFpbENvbnRlbnRUeXBlID0gZGV0ZXJtaW5lT2dUaHVtYm5haWxDb250ZW50VHlwZShjbGFpbURhdGEudGh1bWJuYWlsKTtcbiAgY29uc3Qgb2dUaHVtYm5haWwgPSBjbGFpbURhdGEudGh1bWJuYWlsIHx8IGRlZmF1bHRUaHVtYm5haWw7XG4gIGNvbnN0IG1ldGFUYWdzID0gW1xuICAgIHtwcm9wZXJ0eTogJ29nOnRpdGxlJywgY29udGVudDogb2dUaXRsZX0sXG4gICAge3Byb3BlcnR5OiAnb2c6dXJsJywgY29udGVudDogc2hvd1VybH0sXG4gICAge3Byb3BlcnR5OiAnb2c6c2l0ZV9uYW1lJywgY29udGVudDogc2l0ZVRpdGxlfSxcbiAgICB7cHJvcGVydHk6ICdvZzpkZXNjcmlwdGlvbicsIGNvbnRlbnQ6IG9nRGVzY3JpcHRpb259LFxuICAgIHtwcm9wZXJ0eTogJ29nOmltYWdlOndpZHRoJywgY29udGVudDogNjAwfSxcbiAgICB7cHJvcGVydHk6ICdvZzppbWFnZTpoZWlnaHQnLCBjb250ZW50OiAzMTV9LFxuICAgIHtwcm9wZXJ0eTogJ3R3aXR0ZXI6c2l0ZScsIGNvbnRlbnQ6IHNpdGVUd2l0dGVyfSxcbiAgXTtcbiAgaWYgKGNvbnRlbnRUeXBlID09PSAndmlkZW8vbXA0JyB8fCBjb250ZW50VHlwZSA9PT0gJ3ZpZGVvL3dlYm0nKSB7XG4gICAgbWV0YVRhZ3MucHVzaCh7cHJvcGVydHk6ICdvZzp2aWRlbycsIGNvbnRlbnQ6IHNvdXJjZX0pO1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAnb2c6dmlkZW86c2VjdXJlX3VybCcsIGNvbnRlbnQ6IHNvdXJjZX0pO1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAnb2c6dmlkZW86dHlwZScsIGNvbnRlbnQ6IGNvbnRlbnRUeXBlfSk7XG4gICAgbWV0YVRhZ3MucHVzaCh7cHJvcGVydHk6ICdvZzppbWFnZScsIGNvbnRlbnQ6IG9nVGh1bWJuYWlsfSk7XG4gICAgbWV0YVRhZ3MucHVzaCh7cHJvcGVydHk6ICdvZzppbWFnZTp0eXBlJywgY29udGVudDogb2dUaHVtYm5haWxDb250ZW50VHlwZX0pO1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAnb2c6dHlwZScsIGNvbnRlbnQ6ICd2aWRlbyd9KTtcbiAgICBtZXRhVGFncy5wdXNoKHtwcm9wZXJ0eTogJ3R3aXR0ZXI6Y2FyZCcsIGNvbnRlbnQ6ICdwbGF5ZXInfSk7XG4gICAgbWV0YVRhZ3MucHVzaCh7cHJvcGVydHk6ICd0d2l0dGVyOnBsYXllcicsIGNvbnRlbnQ6IGVtYmVkVXJsfSk7XG4gICAgbWV0YVRhZ3MucHVzaCh7cHJvcGVydHk6ICd0d2l0dGVyOnBsYXllcjp3aWR0aCcsIGNvbnRlbnQ6IDYwMH0pO1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAndHdpdHRlcjp0ZXh0OnBsYXllcl93aWR0aCcsIGNvbnRlbnQ6IDYwMH0pO1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAndHdpdHRlcjpwbGF5ZXI6aGVpZ2h0JywgY29udGVudDogMzM3fSk7XG4gICAgbWV0YVRhZ3MucHVzaCh7cHJvcGVydHk6ICd0d2l0dGVyOnBsYXllcjpzdHJlYW0nLCBjb250ZW50OiBzb3VyY2V9KTtcbiAgICBtZXRhVGFncy5wdXNoKHtwcm9wZXJ0eTogJ3R3aXR0ZXI6cGxheWVyOnN0cmVhbTpjb250ZW50X3R5cGUnLCBjb250ZW50OiBjb250ZW50VHlwZX0pO1xuICB9IGVsc2Uge1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAnb2c6aW1hZ2UnLCBjb250ZW50OiBzb3VyY2V9KTtcbiAgICBtZXRhVGFncy5wdXNoKHtwcm9wZXJ0eTogJ29nOmltYWdlOnR5cGUnLCBjb250ZW50OiBjb250ZW50VHlwZX0pO1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAnb2c6dHlwZScsIGNvbnRlbnQ6ICdhcnRpY2xlJ30pO1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAndHdpdHRlcjpjYXJkJywgY29udGVudDogJ3N1bW1hcnlfbGFyZ2VfaW1hZ2UnfSk7XG4gIH1cbiAgcmV0dXJuIG1ldGFUYWdzO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1ldGFUYWdzID0gKHNpdGVEZXNjcmlwdGlvbiwgc2l0ZUhvc3QsIHNpdGVUaXRsZSwgc2l0ZVR3aXR0ZXIsIGFzc2V0LCBjaGFubmVsLCBkZWZhdWx0RGVzY3JpcHRpb24sIGRlZmF1bHRUaHVtYm5haWwpID0+IHtcbiAgaWYgKGFzc2V0KSB7XG4gICAgcmV0dXJuIGNyZWF0ZUFzc2V0TWV0YVRhZ3Moc2l0ZUhvc3QsIHNpdGVUaXRsZSwgc2l0ZVR3aXR0ZXIsIGFzc2V0LCBkZWZhdWx0RGVzY3JpcHRpb24sIGRlZmF1bHRUaHVtYm5haWwpO1xuICB9O1xuICBpZiAoY2hhbm5lbCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFubmVsTWV0YVRhZ3Moc2l0ZUhvc3QsIHNpdGVUaXRsZSwgc2l0ZVR3aXR0ZXIsIGNoYW5uZWwpO1xuICB9O1xuICByZXR1cm4gY3JlYXRlQmFzaWNNZXRhVGFncyhzaXRlRGVzY3JpcHRpb24sIHNpdGVIb3N0LCBzaXRlVGl0bGUsIHNpdGVUd2l0dGVyKTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvdXRpbHMvbWV0YVRhZ3MuanMiLCJjb25zdCBjcmVhdGVCYXNpY0Nhbm9uaWNhbExpbmsgPSAocGFnZSwgc2l0ZUhvc3QpID0+IHtcbiAgcmV0dXJuIGAke3NpdGVIb3N0fS8ke3BhZ2V9YDtcbn07XG5cbmNvbnN0IGNyZWF0ZUFzc2V0Q2Fub25pY2FsTGluayA9IChhc3NldCwgc2l0ZUhvc3QpID0+IHtcbiAgbGV0IGNoYW5uZWxOYW1lLCBjZXJ0aWZpY2F0ZUlkLCBuYW1lLCBjbGFpbUlkO1xuICBpZiAoYXNzZXQuY2xhaW1EYXRhKSB7XG4gICAgKHsgY2hhbm5lbE5hbWUsIGNlcnRpZmljYXRlSWQsIG5hbWUsIGNsYWltSWQgfSA9IGFzc2V0LmNsYWltRGF0YSk7XG4gIH07XG4gIGlmIChjaGFubmVsTmFtZSkge1xuICAgIHJldHVybiBgJHtzaXRlSG9zdH0vJHtjaGFubmVsTmFtZX06JHtjZXJ0aWZpY2F0ZUlkfS8ke25hbWV9YDtcbiAgfTtcbiAgcmV0dXJuIGAke3NpdGVIb3N0fS8ke2NsYWltSWR9LyR7bmFtZX1gO1xufTtcblxuY29uc3QgY3JlYXRlQ2hhbm5lbENhbm9uaWNhbExpbmsgPSAoY2hhbm5lbCwgc2l0ZUhvc3QpID0+IHtcbiAgY29uc3QgeyBuYW1lLCBsb25nSWQgfSA9IGNoYW5uZWw7XG4gIHJldHVybiBgJHtzaXRlSG9zdH0vJHtuYW1lfToke2xvbmdJZH1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNhbm9uaWNhbExpbmsgPSAoYXNzZXQsIGNoYW5uZWwsIHBhZ2UsIHNpdGVIb3N0KSA9PiB7XG4gIGlmIChhc3NldCkge1xuICAgIHJldHVybiBjcmVhdGVBc3NldENhbm9uaWNhbExpbmsoYXNzZXQsIHNpdGVIb3N0KTtcbiAgfVxuICBpZiAoY2hhbm5lbCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFubmVsQ2Fub25pY2FsTGluayhjaGFubmVsLCBzaXRlSG9zdCk7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJhc2ljQ2Fub25pY2FsTGluayhwYWdlLCBzaXRlSG9zdCk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3V0aWxzL2Nhbm9uaWNhbExpbmsuanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTmF2TGluaywgd2l0aFJvdXRlciB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IExvZ28gZnJvbSAnY29tcG9uZW50cy9Mb2dvJztcbmltcG9ydCBOYXZCYXJDaGFubmVsRHJvcGRvd24gZnJvbSAnY29tcG9uZW50cy9OYXZCYXJDaGFubmVsT3B0aW9uc0Ryb3Bkb3duJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJ3V0aWxzL3JlcXVlc3QnO1xuXG5jb25zdCBWSUVXID0gJ1ZJRVcnO1xuY29uc3QgTE9HT1VUID0gJ0xPR09VVCc7XG5cbmNsYXNzIE5hdkJhciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNoZWNrRm9yTG9nZ2VkSW5Vc2VyID0gdGhpcy5jaGVja0ZvckxvZ2dlZEluVXNlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMubG9nb3V0VXNlciA9IHRoaXMubG9nb3V0VXNlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlU2VsZWN0aW9uID0gdGhpcy5oYW5kbGVTZWxlY3Rpb24uYmluZCh0aGlzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgLy8gY2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIGlzIGFscmVhZHkgbG9nZ2VkIGluXG4gICAgdGhpcy5jaGVja0ZvckxvZ2dlZEluVXNlcigpO1xuICB9XG4gIGNoZWNrRm9yTG9nZ2VkSW5Vc2VyICgpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7Y3JlZGVudGlhbHM6ICdpbmNsdWRlJ307XG4gICAgcmVxdWVzdCgnL3VzZXInLCBwYXJhbXMpXG4gICAgICAudGhlbigoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5uZWxMb2dpbihkYXRhLmNoYW5uZWxOYW1lLCBkYXRhLnNob3J0Q2hhbm5lbElkLCBkYXRhLmNoYW5uZWxDbGFpbUlkKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnL3VzZXIgZXJyb3I6JywgZXJyb3IubWVzc2FnZSk7XG4gICAgICB9KTtcbiAgfVxuICBsb2dvdXRVc2VyICgpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7Y3JlZGVudGlhbHM6ICdpbmNsdWRlJ307XG4gICAgcmVxdWVzdCgnL2xvZ291dCcsIHBhcmFtcylcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5uZWxMb2dvdXQoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnL2xvZ291dCBlcnJvcicsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfSk7XG4gIH1cbiAgaGFuZGxlU2VsZWN0aW9uIChldmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnNlbGVjdGVkT3B0aW9uc1swXS52YWx1ZTtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlIExPR09VVDpcbiAgICAgICAgdGhpcy5sb2dvdXRVc2VyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWSUVXOlxuICAgICAgICAvLyByZWRpcmVjdCB0byBjaGFubmVsIHBhZ2VcbiAgICAgICAgdGhpcy5wcm9wcy5oaXN0b3J5LnB1c2goYC8ke3RoaXMucHJvcHMuY2hhbm5lbE5hbWV9OiR7dGhpcy5wcm9wcy5jaGFubmVsTG9uZ0lkfWApO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHsgc2l0ZURlc2NyaXB0aW9uIH0gPSAgdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXdpZGUgbmF2LWJhcic+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS1wYWRkZWQgcm93LS1zaG9ydCBmbGV4LWNvbnRhaW5lci0tcm93IGZsZXgtY29udGFpbmVyLS1zcGFjZS1iZXR3ZWVuLWNlbnRlcic+XG4gICAgICAgICAgPExvZ28gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbmF2LWJhci0tY2VudGVyJz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nbmF2LWJhci10YWdsaW5lJz57c2l0ZURlc2NyaXB0aW9ufTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbmF2LWJhci0tcmlnaHQnPlxuICAgICAgICAgICAgPE5hdkxpbmsgY2xhc3NOYW1lPSduYXYtYmFyLWxpbmsgbGluay0tbmF2JyBhY3RpdmVDbGFzc05hbWU9J2xpbmstLW5hdi1hY3RpdmUnIHRvPScvJyBleGFjdD5QdWJsaXNoPC9OYXZMaW5rPlxuICAgICAgICAgICAgPE5hdkxpbmsgY2xhc3NOYW1lPSduYXYtYmFyLWxpbmsgbGluay0tbmF2JyAgYWN0aXZlQ2xhc3NOYW1lPSdsaW5rLS1uYXYtYWN0aXZlJyB0bz0nL2Fib3V0Jz5BYm91dDwvTmF2TGluaz5cbiAgICAgICAgICAgIHsgdGhpcy5wcm9wcy5jaGFubmVsTmFtZSA/IChcbiAgICAgICAgICAgICAgPE5hdkJhckNoYW5uZWxEcm9wZG93blxuICAgICAgICAgICAgICAgIGNoYW5uZWxOYW1lPXt0aGlzLnByb3BzLmNoYW5uZWxOYW1lfVxuICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdGlvbj17dGhpcy5oYW5kbGVTZWxlY3Rpb259XG4gICAgICAgICAgICAgICAgZGVmYXVsdFNlbGVjdGlvbj17dGhpcy5wcm9wcy5jaGFubmVsTmFtZX1cbiAgICAgICAgICAgICAgICBWSUVXPXtWSUVXfVxuICAgICAgICAgICAgICAgIExPR09VVD17TE9HT1VUfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPE5hdkxpbmsgaWQ9J25hdi1iYXItbG9naW4tbGluaycgY2xhc3NOYW1lPSduYXYtYmFyLWxpbmsgbGluay0tbmF2JyBhY3RpdmVDbGFzc05hbWU9J2xpbmstLW5hdi1hY3RpdmUnIHRvPScvbG9naW4nPkNoYW5uZWw8L05hdkxpbms+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlcihOYXZCYXIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvTmF2QmFyL3ZpZXcuanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcblxuZnVuY3Rpb24gTG9nbyAoKSB7XG4gIHJldHVybiAoXG4gICAgPHN2ZyB2ZXJzaW9uPScxLjEnIGlkPSdMYXllcl8xJyB4PScwcHgnIHk9JzBweCcgaGVpZ2h0PScyNHB4JyB2aWV3Qm94PScwIDAgODAgMzEnIGVuYWJsZUJhY2tncm91bmQ9J25ldyAwIDAgODAgMzEnIGNsYXNzTmFtZT0nbmF2LWJhci1sb2dvJz5cbiAgICAgIDxMaW5rIHRvPScvJz5cbiAgICAgICAgPHRpdGxlPkxvZ288L3RpdGxlPlxuICAgICAgICA8ZGVzYz5TcGVlLmNoIGxvZ288L2Rlc2M+XG4gICAgICAgIDxnIGlkPSdBYm91dCc+XG4gICAgICAgICAgPGcgaWQ9J1B1Ymxpc2gtRm9ybS1WMi1feDI4X2ZpbGxlZF94MjlfJyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgtNDIuMDAwMDAwLCAtMjMuMDAwMDAwKSc+XG4gICAgICAgICAgICA8ZyBpZD0nR3JvdXAtMTcnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKDQyLjAwMDAwMCwgMjIuMDAwMDAwKSc+XG4gICAgICAgICAgICAgIDx0ZXh0IHRyYW5zZm9ybT0nbWF0cml4KDEgMCAwIDEgMCAyMCknIGZvbnRTaXplPScyNScgZm9udEZhbWlseT0nUm9ib3RvJz5TcGVlJmx0O2g8L3RleHQ+XG4gICAgICAgICAgICAgIDxnIGlkPSdHcm91cC0xNicgdHJhbnNmb3JtPSd0cmFuc2xhdGUoMC4wMDAwMDAsIDMwLjAwMDAwMCknPlxuICAgICAgICAgICAgICAgIDxwYXRoIGlkPSdMaW5lLTgnIGZpbGw9J25vbmUnIHN0cm9rZT0nIzA5RjkxMScgc3Ryb2tlV2lkdGg9JzEnIHN0cm9rZUxpbmVjYXA9J3NxdWFyZScgZD0nTTAuNSwxLjVoMTUnIC8+XG4gICAgICAgICAgICAgICAgPHBhdGggaWQ9J0xpbmUtOC1Db3B5JyBmaWxsPSdub25lJyBzdHJva2U9JyMwMjlENzQnIHN0cm9rZVdpZHRoPScxJyBzdHJva2VMaW5lY2FwPSdzcXVhcmUnIGQ9J00xNi41LDEuNWgxNScgLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBpZD0nTGluZS04LUNvcHktMicgZmlsbD0nbm9uZScgc3Ryb2tlPScjRTM1QkQ4JyBzdHJva2VXaWR0aD0nMScgc3Ryb2tlTGluZWNhcD0nc3F1YXJlJyBkPSdNMzIuNSwxLjVoMTUnIC8+XG4gICAgICAgICAgICAgICAgPHBhdGggaWQ9J0xpbmUtOC1Db3B5LTMnIGZpbGw9J25vbmUnIHN0cm9rZT0nIzQxNTZDNScgc3Ryb2tlV2lkdGg9JzEnIHN0cm9rZUxpbmVjYXA9J3NxdWFyZScgZD0nTTQ4LjUsMS41aDE1JyAvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGlkPSdMaW5lLTgtQ29weS00JyBmaWxsPSdub25lJyBzdHJva2U9JyM2MzU2ODgnIHN0cm9rZVdpZHRoPScxJyBzdHJva2VMaW5lY2FwPSdzcXVhcmUnIGQ9J002NC41LDEuNWgxNScgLz5cbiAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgPC9nPlxuICAgICAgICAgIDwvZz5cbiAgICAgICAgPC9nPlxuICAgICAgPC9MaW5rPlxuICAgIDwvc3ZnPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTG9nbztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb21wb25lbnRzL0xvZ28vaW5kZXguanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gTmF2QmFyQ2hhbm5lbERyb3Bkb3duICh7IGNoYW5uZWxOYW1lLCBoYW5kbGVTZWxlY3Rpb24sIGRlZmF1bHRTZWxlY3Rpb24sIFZJRVcsIExPR09VVCB9KSB7XG4gIHJldHVybiAoXG4gICAgPHNlbGVjdCB0eXBlPSd0ZXh0JyBpZD0nbmF2LWJhci1jaGFubmVsLXNlbGVjdCcgY2xhc3NOYW1lPSdzZWxlY3Qgc2VsZWN0LS1hcnJvdyBsaW5rLS1uYXYnIG9uQ2hhbmdlPXtoYW5kbGVTZWxlY3Rpb259IHZhbHVlPXtkZWZhdWx0U2VsZWN0aW9ufT5cbiAgICAgIDxvcHRpb24gaWQ9J25hdi1iYXItY2hhbm5lbC1zZWxlY3QtY2hhbm5lbC1vcHRpb24nPntjaGFubmVsTmFtZX08L29wdGlvbj5cbiAgICAgIDxvcHRpb24gdmFsdWU9e1ZJRVd9PlZpZXc8L29wdGlvbj5cbiAgICAgIDxvcHRpb24gdmFsdWU9e0xPR09VVH0+TG9nb3V0PC9vcHRpb24+XG4gICAgPC9zZWxlY3Q+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBOYXZCYXJDaGFubmVsRHJvcGRvd247XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29tcG9uZW50cy9OYXZCYXJDaGFubmVsT3B0aW9uc0Ryb3Bkb3duL2luZGV4LmpzeCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNyb3NzLWZldGNoL3BvbHlmaWxsXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwiY3Jvc3MtZmV0Y2gvcG9seWZpbGxcIlxuLy8gbW9kdWxlIGlkID0gOTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBwdWJsaXNoIH0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBkaXNhYmxlZDogcHVibGlzaC5kaXNhYmxlZCxcbiAgICBmaWxlICAgIDogcHVibGlzaC5maWxlLFxuICAgIHN0YXR1cyAgOiBwdWJsaXNoLnN0YXR1cy5zdGF0dXMsXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbnVsbCkoVmlldyk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoVG9vbC9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRHJvcHpvbmUgZnJvbSAnY29udGFpbmVycy9Ecm9wem9uZSc7XG5pbXBvcnQgUHVibGlzaERldGFpbHMgZnJvbSAnY29udGFpbmVycy9QdWJsaXNoRGV0YWlscyc7XG5pbXBvcnQgUHVibGlzaFN0YXR1cyBmcm9tICdjb250YWluZXJzL1B1Ymxpc2hTdGF0dXMnO1xuaW1wb3J0IFB1Ymxpc2hEaXNhYmxlZE1lc3NhZ2UgZnJvbSAnY29udGFpbmVycy9QdWJsaXNoRGlzYWJsZWRNZXNzYWdlJztcblxuY2xhc3MgUHVibGlzaFRvb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBjb25zb2xlLmxvZygncHVibGlzaCBpcyBkaXNhYmxlZCcpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFB1Ymxpc2hEaXNhYmxlZE1lc3NhZ2UgLz5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdwdWJsaXNoIGlzIG5vdCBkaXNhYmxlZCcpO1xuICAgICAgaWYgKHRoaXMucHJvcHMuZmlsZSkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5zdGF0dXMpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFB1Ymxpc2hTdGF0dXMgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiA8UHVibGlzaERldGFpbHMgLz47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiA8RHJvcHpvbmUgLz47XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQdWJsaXNoVG9vbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hUb29sL3ZpZXcuanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHZhbGlkYXRlRmlsZSB9IGZyb20gJ3V0aWxzL2ZpbGUnO1xuaW1wb3J0IFB1Ymxpc2hQcmV2aWV3IGZyb20gJ2NvbXBvbmVudHMvUHVibGlzaFByZXZpZXcnO1xuXG5jbGFzcyBEcm9wem9uZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZHJhZ092ZXIgIDogZmFsc2UsXG4gICAgICBtb3VzZU92ZXIgOiBmYWxzZSxcbiAgICAgIGRpbVByZXZpZXc6IGZhbHNlLFxuICAgIH07XG4gICAgdGhpcy5oYW5kbGVEcm9wID0gdGhpcy5oYW5kbGVEcm9wLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVEcmFnT3ZlciA9IHRoaXMuaGFuZGxlRHJhZ092ZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZURyYWdFbmQgPSB0aGlzLmhhbmRsZURyYWdFbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZURyYWdFbnRlciA9IHRoaXMuaGFuZGxlRHJhZ0VudGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVEcmFnTGVhdmUgPSB0aGlzLmhhbmRsZURyYWdMZWF2ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlTW91c2VFbnRlciA9IHRoaXMuaGFuZGxlTW91c2VFbnRlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlTW91c2VMZWF2ZSA9IHRoaXMuaGFuZGxlTW91c2VMZWF2ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQgPSB0aGlzLmhhbmRsZUZpbGVJbnB1dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY2hvb3NlRmlsZSA9IHRoaXMuY2hvb3NlRmlsZS5iaW5kKHRoaXMpO1xuICB9XG4gIGhhbmRsZURyb3AgKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtkcmFnT3ZlcjogZmFsc2V9KTtcbiAgICAvLyBpZiBkcm9wcGVkIGl0ZW1zIGFyZW4ndCBmaWxlcywgcmVqZWN0IHRoZW1cbiAgICBjb25zdCBkdCA9IGV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICBpZiAoZHQuaXRlbXMpIHtcbiAgICAgIGlmIChkdC5pdGVtc1swXS5raW5kID09PSAnZmlsZScpIHtcbiAgICAgICAgY29uc3QgZHJvcHBlZEZpbGUgPSBkdC5pdGVtc1swXS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgdGhpcy5jaG9vc2VGaWxlKGRyb3BwZWRGaWxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaGFuZGxlRHJhZ092ZXIgKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBoYW5kbGVEcmFnRW5kIChldmVudCkge1xuICAgIHZhciBkdCA9IGV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICBpZiAoZHQuaXRlbXMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZHQuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZHQuaXRlbXMucmVtb3ZlKGkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuY2xlYXJEYXRhKCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZURyYWdFbnRlciAoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7ZHJhZ092ZXI6IHRydWUsIGRpbVByZXZpZXc6IHRydWV9KTtcbiAgfVxuICBoYW5kbGVEcmFnTGVhdmUgKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoe2RyYWdPdmVyOiBmYWxzZSwgZGltUHJldmlldzogZmFsc2V9KTtcbiAgfVxuICBoYW5kbGVNb3VzZUVudGVyICgpIHtcbiAgICB0aGlzLnNldFN0YXRlKHttb3VzZU92ZXI6IHRydWUsIGRpbVByZXZpZXc6IHRydWV9KTtcbiAgfVxuICBoYW5kbGVNb3VzZUxlYXZlICgpIHtcbiAgICB0aGlzLnNldFN0YXRlKHttb3VzZU92ZXI6IGZhbHNlLCBkaW1QcmV2aWV3OiBmYWxzZX0pO1xuICB9XG4gIGhhbmRsZUNsaWNrIChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVfaW5wdXQnKS5jbGljaygpO1xuICB9XG4gIGhhbmRsZUZpbGVJbnB1dCAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGZpbGVMaXN0ID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xuICAgIHRoaXMuY2hvb3NlRmlsZShmaWxlTGlzdFswXSk7XG4gIH1cbiAgY2hvb3NlRmlsZSAoZmlsZSkge1xuICAgIGlmIChmaWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWxpZGF0ZUZpbGUoZmlsZSk7IC8vIHZhbGlkYXRlIHRoZSBmaWxlJ3MgbmFtZSwgdHlwZSwgYW5kIHNpemVcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnNldEZpbGVFcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIC8vIHN0YWdlIGl0IHNvIGl0IHdpbGwgYmUgcmVhZHkgd2hlbiB0aGUgcHVibGlzaCBidXR0b24gaXMgY2xpY2tlZFxuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RGaWxlKGZpbGUpO1xuICAgIH1cbiAgfVxuICByZW5kZXIgKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tdGFsbCBmbGV4LWNvbnRhaW5lci0tY29sdW1uJz5cbiAgICAgICAgPGZvcm0+XG4gICAgICAgICAgPGlucHV0IGNsYXNzTmFtZT0naW5wdXQtZmlsZScgdHlwZT0nZmlsZScgaWQ9J2ZpbGVfaW5wdXQnIG5hbWU9J2ZpbGVfaW5wdXQnIGFjY2VwdD0ndmlkZW8vKixpbWFnZS8qJyBvbkNoYW5nZT17dGhpcy5oYW5kbGVGaWxlSW5wdXR9IGVuY1R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnIC8+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgICAgPGRpdiBpZD0ncHJldmlldy1kcm9wem9uZScgY2xhc3NOYW1lPXsncm93IHJvdy0tcGFkZGVkIHJvdy0tdGFsbCBkcm9wem9uZScgKyAodGhpcy5zdGF0ZS5kcmFnT3ZlciA/ICcgZHJvcHpvbmUtLWRyYWctb3ZlcicgOiAnJyl9IG9uRHJvcD17dGhpcy5oYW5kbGVEcm9wfSBvbkRyYWdPdmVyPXt0aGlzLmhhbmRsZURyYWdPdmVyfSBvbkRyYWdFbmQ9e3RoaXMuaGFuZGxlRHJhZ0VuZH0gb25EcmFnRW50ZXI9e3RoaXMuaGFuZGxlRHJhZ0VudGVyfSBvbkRyYWdMZWF2ZT17dGhpcy5oYW5kbGVEcmFnTGVhdmV9IG9uTW91c2VFbnRlcj17dGhpcy5oYW5kbGVNb3VzZUVudGVyfSBvbk1vdXNlTGVhdmU9e3RoaXMuaGFuZGxlTW91c2VMZWF2ZX0gb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30+XG4gICAgICAgICAge3RoaXMucHJvcHMuZmlsZSA/IChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxQdWJsaXNoUHJldmlld1xuICAgICAgICAgICAgICAgIGRpbVByZXZpZXc9e3RoaXMuc3RhdGUuZGltUHJldmlld31cbiAgICAgICAgICAgICAgICBmaWxlPXt0aGlzLnByb3BzLmZpbGV9XG4gICAgICAgICAgICAgICAgdGh1bWJuYWlsPXt0aGlzLnByb3BzLnRodW1ibmFpbH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGRpdiBpZD0nZHJvcHpvbmUtdGV4dC1ob2xkZXInIGNsYXNzTmFtZT17J2ZsZXgtY29udGFpbmVyLS1jb2x1bW4gZmxleC1jb250YWluZXItLWNlbnRlci1jZW50ZXInfT5cbiAgICAgICAgICAgICAgICB7IHRoaXMuc3RhdGUuZHJhZ092ZXIgPyAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGlkPSdkcm9wem9uZS1kcmFnb3Zlcic+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0nYmx1ZSc+RHJvcCBpdC48L3A+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgeyB0aGlzLnN0YXRlLm1vdXNlT3ZlciA/IChcbiAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9J2Ryb3B6b25lLWluc3RydWN0aW9ucyc+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0naW5mby1tZXNzYWdlLXBsYWNlaG9sZGVyIGluZm8tbWVzc2FnZS0tZmFpbHVyZScgaWQ9J2lucHV0LWVycm9yLWZpbGUtc2VsZWN0aW9uJz57dGhpcy5wcm9wcy5maWxlRXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5EcmFnICYgZHJvcCBpbWFnZSBvciB2aWRlbyBoZXJlIHRvIHB1Ymxpc2g8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0nZmluZS1wcmludCc+T1I8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0nYmx1ZS0tdW5kZXJsaW5lZCc+Q0hPT1NFIEZJTEU8L3A+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxkaXYgaWQ9J2Ryb3B6b25lLXRleHQtaG9sZGVyJyBjbGFzc05hbWU9eydmbGV4LWNvbnRhaW5lci0tY29sdW1uIGZsZXgtY29udGFpbmVyLS1jZW50ZXItY2VudGVyJ30+XG4gICAgICAgICAgICAgIHsgdGhpcy5zdGF0ZS5kcmFnT3ZlciA/IChcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPSdkcm9wem9uZS1kcmFnb3Zlcic+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9J2JsdWUnPkRyb3AgaXQuPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9J2Ryb3B6b25lLWluc3RydWN0aW9ucyc+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9J2luZm8tbWVzc2FnZS1wbGFjZWhvbGRlciBpbmZvLW1lc3NhZ2UtLWZhaWx1cmUnIGlkPSdpbnB1dC1lcnJvci1maWxlLXNlbGVjdGlvbic+e3RoaXMucHJvcHMuZmlsZUVycm9yfTwvcD5cbiAgICAgICAgICAgICAgICAgIDxwPkRyYWcgJiBkcm9wIGltYWdlIG9yIHZpZGVvIGhlcmUgdG8gcHVibGlzaDwvcD5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0nZmluZS1wcmludCc+T1I8L3A+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9J2JsdWUtLXVuZGVybGluZWQnPkNIT09TRSBGSUxFPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBEcm9wem9uZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0Ryb3B6b25lL3ZpZXcuanN4IiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIHZhbGlkYXRlRmlsZSAoZmlsZSkge1xuICAgIGlmICghZmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBmaWxlIHByb3ZpZGVkJyk7XG4gICAgfVxuICAgIGlmICgvJy8udGVzdChmaWxlLm5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Fwb3N0cm9waGVzIGFyZSBub3QgYWxsb3dlZCBpbiB0aGUgZmlsZSBuYW1lJyk7XG4gICAgfVxuICAgIC8vIHZhbGlkYXRlIHNpemUgYW5kIHR5cGVcbiAgICBzd2l0Y2ggKGZpbGUudHlwZSkge1xuICAgICAgY2FzZSAnaW1hZ2UvanBlZyc6XG4gICAgICBjYXNlICdpbWFnZS9qcGcnOlxuICAgICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IDEwMDAwMDAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb3JyeSwgaW1hZ2VzIGFyZSBsaW1pdGVkIHRvIDEwIG1lZ2FieXRlcy4nKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2ltYWdlL2dpZic6XG4gICAgICAgIGlmIChmaWxlLnNpemUgPiA1MDAwMDAwMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU29ycnksIEdJRnMgYXJlIGxpbWl0ZWQgdG8gNTAgbWVnYWJ5dGVzLicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndmlkZW8vbXA0JzpcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IDUwMDAwMDAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb3JyeSwgdmlkZW9zIGFyZSBsaW1pdGVkIHRvIDUwIG1lZ2FieXRlcy4nKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihmaWxlLnR5cGUgKyAnIGlzIG5vdCBhIHN1cHBvcnRlZCBmaWxlIHR5cGUuIE9ubHksIC5qcGVnLCAucG5nLCAuZ2lmLCBhbmQgLm1wNCBmaWxlcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4nKTtcbiAgICB9XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3V0aWxzL2ZpbGUuanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuY2xhc3MgUHVibGlzaFByZXZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGltZ1NvdXJjZSAgICAgICA6ICcnLFxuICAgICAgZGVmYXVsdFRodW1ibmFpbDogJy9hc3NldHMvaW1nL3ZpZGVvX3RodW1iX2RlZmF1bHQucG5nJyxcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICB0aGlzLnNldFByZXZpZXdJbWFnZVNvdXJjZSh0aGlzLnByb3BzLmZpbGUpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgKG5ld1Byb3BzKSB7XG4gICAgaWYgKG5ld1Byb3BzLmZpbGUgIT09IHRoaXMucHJvcHMuZmlsZSkge1xuICAgICAgdGhpcy5zZXRQcmV2aWV3SW1hZ2VTb3VyY2UobmV3UHJvcHMuZmlsZSk7XG4gICAgfVxuICAgIGlmIChuZXdQcm9wcy50aHVtYm5haWwgIT09IHRoaXMucHJvcHMudGh1bWJuYWlsKSB7XG4gICAgICBpZiAobmV3UHJvcHMudGh1bWJuYWlsKSB7XG4gICAgICAgIHRoaXMuc2V0UHJldmlld0ltYWdlU291cmNlRnJvbUZpbGUobmV3UHJvcHMudGh1bWJuYWlsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2ltZ1NvdXJjZTogdGhpcy5zdGF0ZS5kZWZhdWx0VGh1bWJuYWlsfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHNldFByZXZpZXdJbWFnZVNvdXJjZUZyb21GaWxlIChmaWxlKSB7XG4gICAgY29uc3QgcHJldmlld1JlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcHJldmlld1JlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIHByZXZpZXdSZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7aW1nU291cmNlOiBwcmV2aWV3UmVhZGVyLnJlc3VsdH0pO1xuICAgIH07XG4gIH1cbiAgc2V0UHJldmlld0ltYWdlU291cmNlIChmaWxlKSB7XG4gICAgaWYgKGZpbGUudHlwZSAhPT0gJ3ZpZGVvL21wNCcpIHtcbiAgICAgIHRoaXMuc2V0UHJldmlld0ltYWdlU291cmNlRnJvbUZpbGUoZmlsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLnRodW1ibmFpbCkge1xuICAgICAgICB0aGlzLnNldFByZXZpZXdJbWFnZVNvdXJjZUZyb21GaWxlKHRoaXMucHJvcHMudGh1bWJuYWlsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe2ltZ1NvdXJjZTogdGhpcy5zdGF0ZS5kZWZhdWx0VGh1bWJuYWlsfSk7XG4gICAgfVxuICB9XG4gIHJlbmRlciAoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbWdcbiAgICAgICAgaWQ9J2Ryb3B6b25lLXByZXZpZXcnXG4gICAgICAgIHNyYz17dGhpcy5zdGF0ZS5pbWdTb3VyY2V9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5kaW1QcmV2aWV3ID8gJ2RpbScgOiAnJ31cbiAgICAgICAgYWx0PSdwdWJsaXNoIHByZXZpZXcnXG4gICAgICAvPlxuICAgICk7XG4gIH1cbn07XG5cblB1Ymxpc2hQcmV2aWV3LnByb3BUeXBlcyA9IHtcbiAgZGltUHJldmlldzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgZmlsZSAgICAgIDogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICB0aHVtYm5haWwgOiBQcm9wVHlwZXMub2JqZWN0LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUHVibGlzaFByZXZpZXc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29tcG9uZW50cy9QdWJsaXNoUHJldmlldy9pbmRleC5qc3giLCJpbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7Y2xlYXJGaWxlLCBzdGFydFB1Ymxpc2h9IGZyb20gJ2FjdGlvbnMvcHVibGlzaCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBjaGFubmVsLCBwdWJsaXNoIH0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmaWxlOiBwdWJsaXNoLmZpbGUsXG4gIH07XG59O1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSB7XG4gIGNsZWFyRmlsZSxcbiAgc3RhcnRQdWJsaXNoLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcykoVmlldyk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoRGV0YWlscy9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgRHJvcHpvbmUgZnJvbSAnY29udGFpbmVycy9Ecm9wem9uZSc7XG5pbXBvcnQgUHVibGlzaFRpdGxlSW5wdXQgZnJvbSAnY29udGFpbmVycy9QdWJsaXNoVGl0bGVJbnB1dCc7XG5pbXBvcnQgUHVibGlzaFVybElucHV0IGZyb20gJ2NvbnRhaW5lcnMvUHVibGlzaFVybElucHV0JztcbmltcG9ydCBQdWJsaXNoVGh1bWJuYWlsSW5wdXQgZnJvbSAnY29udGFpbmVycy9QdWJsaXNoVGh1bWJuYWlsSW5wdXQnO1xuaW1wb3J0IFB1Ymxpc2hNZXRhZGF0YUlucHV0cyBmcm9tICdjb250YWluZXJzL1B1Ymxpc2hNZXRhZGF0YUlucHV0cyc7XG5pbXBvcnQgQ2hhbm5lbFNlbGVjdCBmcm9tICdjb250YWluZXJzL0NoYW5uZWxTZWxlY3QnO1xuXG5jbGFzcyBQdWJsaXNoRGV0YWlscyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKVxuICAgIHRoaXMub25QdWJsaXNoU3VibWl0ID0gdGhpcy5vblB1Ymxpc2hTdWJtaXQuYmluZCh0aGlzKTtcbiAgfVxuICBvblB1Ymxpc2hTdWJtaXQgKCkge1xuICAgIHRoaXMucHJvcHMuc3RhcnRQdWJsaXNoKHRoaXMucHJvcHMuaGlzdG9yeSk7XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLW5vLWJvdHRvbSc+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0xMCc+XG4gICAgICAgICAgPFB1Ymxpc2hUaXRsZUlucHV0IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7LyogbGVmdCBjb2x1bW4gKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS01IGNvbHVtbi0tc21sLTEwJyA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCc+XG4gICAgICAgICAgICA8RHJvcHpvbmUgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsvKiByaWdodCBjb2x1bW4gKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS01IGNvbHVtbi0tc21sLTEwIGFsaWduLWNvbnRlbnQtdG9wJz5cbiAgICAgICAgICA8ZGl2IGlkPSdwdWJsaXNoLWFjdGl2ZS1hcmVhJyBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tcGFkZGVkIHJvdy0tbm8tdG9wIHJvdy0td2lkZSc+XG4gICAgICAgICAgICAgIDxQdWJsaXNoVXJsSW5wdXQgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCByb3ctLW5vLXRvcCByb3ctLXdpZGUnPlxuICAgICAgICAgICAgICA8Q2hhbm5lbFNlbGVjdCAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7ICh0aGlzLnByb3BzLmZpbGUudHlwZSA9PT0gJ3ZpZGVvL21wNCcpICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCByb3ctLW5vLXRvcCByb3ctLXdpZGUgJz5cbiAgICAgICAgICAgICAgICA8UHVibGlzaFRodW1ibmFpbElucHV0IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS1wYWRkZWQgcm93LS1uby10b3Agcm93LS1uby1ib3R0b20gcm93LS13aWRlJz5cbiAgICAgICAgICAgICAgPFB1Ymxpc2hNZXRhZGF0YUlucHV0cyAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0td2lkZSBhbGlnbi1jb250ZW50LWNlbnRlcic+XG4gICAgICAgICAgICAgIDxidXR0b24gaWQ9J3B1Ymxpc2gtc3VibWl0JyBjbGFzc05hbWU9J2J1dHRvbi0tcHJpbWFyeSBidXR0b24tLWxhcmdlJyBvbkNsaWNrPXt0aGlzLm9uUHVibGlzaFN1Ym1pdH0+UHVibGlzaDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tcGFkZGVkIHJvdy0tbm8tYm90dG9tIGFsaWduLWNvbnRlbnQtY2VudGVyJz5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9J2J1dHRvbi0tY2FuY2VsJyBvbkNsaWNrPXt0aGlzLnByb3BzLmNsZWFyRmlsZX0+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS1zaG9ydCBhbGlnbi1jb250ZW50LWNlbnRlcic+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0nZmluZS1wcmludCc+QnkgY2xpY2tpbmcgJ1B1Ymxpc2gnLCB5b3UgYWZmaXJtIHRoYXQgeW91IGhhdmUgdGhlIHJpZ2h0cyB0byBwdWJsaXNoIHRoaXMgY29udGVudCB0byB0aGUgTEJSWSBuZXR3b3JrLCBhbmQgdGhhdCB5b3UgdW5kZXJzdGFuZCB0aGUgcHJvcGVydGllcyBvZiBwdWJsaXNoaW5nIGl0IHRvIGEgZGVjZW50cmFsaXplZCwgdXNlci1jb250cm9sbGVkIG5ldHdvcmsuIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2h0dHBzOi8vbGJyeS5pby9sZWFybic+UmVhZCBtb3JlLjwvYT48L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKFB1Ymxpc2hEZXRhaWxzKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hEZXRhaWxzL3ZpZXcuanN4IiwiaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge3VwZGF0ZU1ldGFkYXRhfSBmcm9tICdhY3Rpb25zL3B1Ymxpc2gnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgcHVibGlzaCB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgdGl0bGU6IHB1Ymxpc2gubWV0YWRhdGEudGl0bGUsXG4gIH07XG59O1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSBkaXNwYXRjaCA9PiB7XG4gIHJldHVybiB7XG4gICAgb25NZXRhZGF0YUNoYW5nZTogKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVNZXRhZGF0YShuYW1lLCB2YWx1ZSkpO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hUaXRsZUlucHV0L2luZGV4LmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY2xhc3MgUHVibGlzaFRpdGxlSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVJbnB1dCA9IHRoaXMuaGFuZGxlSW5wdXQuYmluZCh0aGlzKTtcbiAgfVxuICBoYW5kbGVJbnB1dCAoZSkge1xuICAgIGNvbnN0IG5hbWUgPSBlLnRhcmdldC5uYW1lO1xuICAgIGNvbnN0IHZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgdGhpcy5wcm9wcy5vbk1ldGFkYXRhQ2hhbmdlKG5hbWUsIHZhbHVlKTtcbiAgfVxuICByZW5kZXIgKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J3B1Ymxpc2gtdGl0bGUnIGNsYXNzTmFtZT0naW5wdXQtdGV4dCB0ZXh0LS1sYXJnZSBpbnB1dC10ZXh0LS1mdWxsLXdpZHRoJyBuYW1lPSd0aXRsZScgcGxhY2Vob2xkZXI9J0dpdmUgeW91ciBwb3N0IGEgdGl0bGUuLi4nIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUlucHV0fSB2YWx1ZT17dGhpcy5wcm9wcy50aXRsZX0gLz5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1Ymxpc2hUaXRsZUlucHV0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvUHVibGlzaFRpdGxlSW5wdXQvdmlldy5qc3giLCJpbXBvcnQge3VwZGF0ZUNsYWltLCB1cGRhdGVFcnJvcn0gZnJvbSAnYWN0aW9ucy9wdWJsaXNoJztcbmltcG9ydCB7Y29ubmVjdH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgY2hhbm5lbCwgcHVibGlzaCB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgbG9nZ2VkSW5DaGFubmVsTmFtZSAgIDogY2hhbm5lbC5sb2dnZWRJbkNoYW5uZWwubmFtZSxcbiAgICBsb2dnZWRJbkNoYW5uZWxTaG9ydElkOiBjaGFubmVsLmxvZ2dlZEluQ2hhbm5lbC5zaG9ydElkLFxuICAgIGZpbGVOYW1lICAgICAgICAgICAgICA6IHB1Ymxpc2guZmlsZS5uYW1lLFxuICAgIHB1Ymxpc2hJbkNoYW5uZWwgICAgICA6IHB1Ymxpc2gucHVibGlzaEluQ2hhbm5lbCxcbiAgICBzZWxlY3RlZENoYW5uZWwgICAgICAgOiBwdWJsaXNoLnNlbGVjdGVkQ2hhbm5lbCxcbiAgICBjbGFpbSAgICAgICAgICAgICAgICAgOiBwdWJsaXNoLmNsYWltLFxuICAgIHVybEVycm9yICAgICAgICAgICAgICA6IHB1Ymxpc2guZXJyb3IudXJsLFxuICB9O1xufTtcblxuY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gZGlzcGF0Y2ggPT4ge1xuICByZXR1cm4ge1xuICAgIG9uQ2xhaW1DaGFuZ2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgZGlzcGF0Y2godXBkYXRlQ2xhaW0odmFsdWUpKTtcbiAgICAgIGRpc3BhdGNoKHVwZGF0ZUVycm9yKCdwdWJsaXNoU3VibWl0JywgbnVsbCkpO1xuICAgIH0sXG4gICAgb25VcmxFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVFcnJvcigndXJsJywgdmFsdWUpKTtcbiAgICB9LFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcykoVmlldyk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoVXJsSW5wdXQvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAndXRpbHMvcmVxdWVzdCc7XG5pbXBvcnQgVXJsTWlkZGxlIGZyb20gJ2NvbXBvbmVudHMvUHVibGlzaFVybE1pZGRsZURpc3BsYXknO1xuXG5jbGFzcyBQdWJsaXNoVXJsSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVJbnB1dCA9IHRoaXMuaGFuZGxlSW5wdXQuYmluZCh0aGlzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgY29uc3QgeyBjbGFpbSwgZmlsZU5hbWUgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCFjbGFpbSkge1xuICAgICAgdGhpcy5zZXRDbGFpbU5hbWUoZmlsZU5hbWUpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICh7IGNsYWltLCBmaWxlTmFtZSB9KSB7XG4gICAgLy8gaWYgYSBuZXcgZmlsZSB3YXMgY2hvc2VuLCB1cGRhdGUgdGhlIGNsYWltIG5hbWVcbiAgICBpZiAoZmlsZU5hbWUgIT09IHRoaXMucHJvcHMuZmlsZU5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldENsYWltTmFtZShmaWxlTmFtZSk7XG4gICAgfVxuICAgIC8vIGlmIHRoZSBjbGFpbSBoYXMgdXBkYXRlZCwgY2hlY2sgaXRzIGF2YWlsYWJpbGl0eVxuICAgIGlmIChjbGFpbSAhPT0gdGhpcy5wcm9wcy5jbGFpbSkge1xuICAgICAgdGhpcy52YWxpZGF0ZUNsYWltKGNsYWltKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlSW5wdXQgKGV2ZW50KSB7XG4gICAgbGV0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHZhbHVlID0gdGhpcy5jbGVhbnNlSW5wdXQodmFsdWUpO1xuICAgIC8vIHVwZGF0ZSB0aGUgc3RhdGVcbiAgICB0aGlzLnByb3BzLm9uQ2xhaW1DaGFuZ2UodmFsdWUpO1xuICB9XG4gIGNsZWFuc2VJbnB1dCAoaW5wdXQpIHtcbiAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL1xccysvZywgJy0nKTsgLy8gcmVwbGFjZSBzcGFjZXMgd2l0aCBkYXNoZXNcbiAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL1teQS1aYS16MC05LV0vZywgJycpOyAgLy8gcmVtb3ZlIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBBLVosIGEteiwgMC05LCBvciAnLSdcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgc2V0Q2xhaW1OYW1lIChmaWxlTmFtZSkge1xuICAgIGNvbnN0IGZpbGVOYW1lV2l0aG91dEVuZGluZyA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpKTtcbiAgICBjb25zdCBjbGVhbkNsYWltTmFtZSA9IHRoaXMuY2xlYW5zZUlucHV0KGZpbGVOYW1lV2l0aG91dEVuZGluZyk7XG4gICAgdGhpcy5wcm9wcy5vbkNsYWltQ2hhbmdlKGNsZWFuQ2xhaW1OYW1lKTtcbiAgfVxuICB2YWxpZGF0ZUNsYWltIChjbGFpbSkge1xuICAgIGlmICghY2xhaW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLm9uVXJsRXJyb3IoJ0VudGVyIGEgdXJsIGFib3ZlJyk7XG4gICAgfVxuICAgIHJlcXVlc3QoYC9hcGkvY2xhaW0vYXZhaWxhYmlsaXR5LyR7Y2xhaW19YClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5vblVybEVycm9yKG51bGwpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5vblVybEVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfSk7XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7IGNsYWltLCBsb2dnZWRJbkNoYW5uZWxOYW1lLCBsb2dnZWRJbkNoYW5uZWxTaG9ydElkLCBwdWJsaXNoSW5DaGFubmVsLCBzZWxlY3RlZENoYW5uZWwsIHVybEVycm9yIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tMTAgY29sdW1uLS1zbWwtMTAnPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0naW5wdXQtdGV4dC0tcHJpbWFyeSBzcGFuLS1yZWxhdGl2ZSc+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSd1cmwtdGV4dC0tc2Vjb25kYXJ5Jz5zcGVlLmNoIC8gPC9zcGFuPlxuICAgICAgICAgIDxVcmxNaWRkbGVcbiAgICAgICAgICAgIHB1Ymxpc2hJbkNoYW5uZWw9e3B1Ymxpc2hJbkNoYW5uZWx9XG4gICAgICAgICAgICBzZWxlY3RlZENoYW5uZWw9e3NlbGVjdGVkQ2hhbm5lbH1cbiAgICAgICAgICAgIGxvZ2dlZEluQ2hhbm5lbE5hbWU9e2xvZ2dlZEluQ2hhbm5lbE5hbWV9XG4gICAgICAgICAgICBsb2dnZWRJbkNoYW5uZWxTaG9ydElkPXtsb2dnZWRJbkNoYW5uZWxTaG9ydElkfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGlucHV0IHR5cGU9J3RleHQnIGlkPSdjbGFpbS1uYW1lLWlucHV0JyBjbGFzc05hbWU9J2lucHV0LXRleHQnIG5hbWU9J2NsYWltJyBwbGFjZWhvbGRlcj0neW91ci11cmwtaGVyZScgb25DaGFuZ2U9e3RoaXMuaGFuZGxlSW5wdXR9IHZhbHVlPXtjbGFpbX0gLz5cbiAgICAgICAgICB7IChjbGFpbSAmJiAhdXJsRXJyb3IpICYmIDxzcGFuIGlkPSdpbnB1dC1zdWNjZXNzLWNsYWltLW5hbWUnIGNsYXNzTmFtZT0naW5mby1tZXNzYWdlLS1zdWNjZXNzIHNwYW4tLWFic29sdXRlJz57J1xcdTI3MTMnfTwvc3Bhbj4gfVxuICAgICAgICAgIHsgdXJsRXJyb3IgJiYgPHNwYW4gaWQ9J2lucHV0LXN1Y2Nlc3MtY2hhbm5lbC1uYW1lJyBjbGFzc05hbWU9J2luZm8tbWVzc2FnZS0tZmFpbHVyZSBzcGFuLS1hYnNvbHV0ZSc+eydcXHUyNzE2J308L3NwYW4+IH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgeyB1cmxFcnJvciA/IChcbiAgICAgICAgICAgIDxwIGlkPSdpbnB1dC1lcnJvci1jbGFpbS1uYW1lJyBjbGFzc05hbWU9J2luZm8tbWVzc2FnZS0tZmFpbHVyZSc+e3VybEVycm9yfTwvcD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSdpbmZvLW1lc3NhZ2UnPkNob29zZSBhIGN1c3RvbSB1cmw8L3A+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1Ymxpc2hVcmxJbnB1dDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hVcmxJbnB1dC92aWV3LmpzeCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5mdW5jdGlvbiBVcmxNaWRkbGUgKHtwdWJsaXNoSW5DaGFubmVsLCBzZWxlY3RlZENoYW5uZWwsIGxvZ2dlZEluQ2hhbm5lbE5hbWUsIGxvZ2dlZEluQ2hhbm5lbFNob3J0SWR9KSB7XG4gIGlmIChwdWJsaXNoSW5DaGFubmVsKSB7XG4gICAgaWYgKHNlbGVjdGVkQ2hhbm5lbCA9PT0gbG9nZ2VkSW5DaGFubmVsTmFtZSkge1xuICAgICAgcmV0dXJuIDxzcGFuIGlkPSd1cmwtY2hhbm5lbCcgY2xhc3NOYW1lPSd1cmwtdGV4dC0tc2Vjb25kYXJ5Jz57bG9nZ2VkSW5DaGFubmVsTmFtZX06e2xvZ2dlZEluQ2hhbm5lbFNob3J0SWR9IC88L3NwYW4+O1xuICAgIH1cbiAgICByZXR1cm4gPHNwYW4gaWQ9J3VybC1jaGFubmVsLXBsYWNlaG9sZGVyJyBjbGFzc05hbWU9J3VybC10ZXh0LS1zZWNvbmRhcnkgdG9vbHRpcCc+QGNoYW5uZWw8c3BhblxuICAgICAgY2xhc3NOYW1lPSd0b29sdGlwLXRleHQnPlNlbGVjdCBhIGNoYW5uZWwgYmVsb3c8L3NwYW4+IC88L3NwYW4+O1xuICB9XG4gIHJldHVybiAoXG4gICAgPHNwYW4gaWQ9J3VybC1uby1jaGFubmVsLXBsYWNlaG9sZGVyJyBjbGFzc05hbWU9J3VybC10ZXh0LS1zZWNvbmRhcnkgdG9vbHRpcCc+eHl6PHNwYW4gY2xhc3NOYW1lPSd0b29sdGlwLXRleHQnPlRoaXMgd2lsbCBiZSBhIHJhbmRvbSBpZDwvc3Bhbj4gLzwvc3Bhbj5cbiAgKTtcbn1cblxuVXJsTWlkZGxlLnByb3BUeXBlcyA9IHtcbiAgcHVibGlzaEluQ2hhbm5lbCAgICAgIDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgbG9nZ2VkSW5DaGFubmVsTmFtZSAgIDogUHJvcFR5cGVzLnN0cmluZyxcbiAgbG9nZ2VkSW5DaGFubmVsU2hvcnRJZDogUHJvcFR5cGVzLnN0cmluZyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFVybE1pZGRsZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb21wb25lbnRzL1B1Ymxpc2hVcmxNaWRkbGVEaXNwbGF5L2luZGV4LmpzeCIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBvbk5ld1RodW1ibmFpbCB9IGZyb20gJ2FjdGlvbnMvcHVibGlzaCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBwdWJsaXNoOiB7IGZpbGUgfSB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgZmlsZSxcbiAgfTtcbn07XG5cbmNvbnN0IG1hcERpc3BhdGNoVG9Qcm9wcyA9IHtcbiAgb25OZXdUaHVtYm5haWwsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hUaHVtYm5haWxJbnB1dC9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIGRhdGFVUkl0b0Jsb2IoZGF0YVVSSSkge1xuICAvLyBjb252ZXJ0IGJhc2U2NC9VUkxFbmNvZGVkIGRhdGEgY29tcG9uZW50IHRvIHJhdyBiaW5hcnkgZGF0YSBoZWxkIGluIGEgc3RyaW5nXG4gIGxldCBieXRlU3RyaW5nID0gYXRvYihkYXRhVVJJLnNwbGl0KCcsJylbMV0pO1xuICAvLyBzZXBhcmF0ZSBvdXQgdGhlIG1pbWUgY29tcG9uZW50XG4gIGxldCBtaW1lU3RyaW5nID0gZGF0YVVSSS5zcGxpdCgnLCcpWzBdLnNwbGl0KCc6JylbMV0uc3BsaXQoJzsnKVswXTtcbiAgLy8gd3JpdGUgdGhlIGJ5dGVzIG9mIHRoZSBzdHJpbmcgdG8gYSB0eXBlZCBhcnJheVxuICBsZXQgaWEgPSBuZXcgVWludDhBcnJheShieXRlU3RyaW5nLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgIGlhW2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICB9XG4gIHJldHVybiBuZXcgQmxvYihbaWFdLCB7dHlwZTogbWltZVN0cmluZ30pO1xufVxuXG5jbGFzcyBQdWJsaXNoVGh1bWJuYWlsSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZpZGVvU291cmNlICAgOiBudWxsLFxuICAgICAgZXJyb3IgICAgICAgICA6IG51bGwsXG4gICAgICBzbGlkZXJNaW5SYW5nZTogMSxcbiAgICAgIHNsaWRlck1heFJhbmdlOiBudWxsLFxuICAgICAgc2xpZGVyVmFsdWUgICA6IG51bGwsXG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZVZpZGVvTG9hZGVkRGF0YSA9IHRoaXMuaGFuZGxlVmlkZW9Mb2FkZWREYXRhLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVTbGlkZXJDaGFuZ2UgPSB0aGlzLmhhbmRsZVNsaWRlckNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlVGh1bWJuYWlsID0gdGhpcy5jcmVhdGVUaHVtYm5haWwuYmluZCh0aGlzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgY29uc3QgeyBmaWxlIH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuc2V0VmlkZW9Tb3VyY2UoZmlsZSk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAobmV4dFByb3BzKSB7XG4gICAgLy8gaWYgZmlsZSBjaGFuZ2VzXG4gICAgaWYgKG5leHRQcm9wcy5maWxlICYmIG5leHRQcm9wcy5maWxlICE9PSB0aGlzLnByb3BzLmZpbGUpIHtcbiAgICAgIGNvbnN0IHsgZmlsZSB9ID0gbmV4dFByb3BzO1xuICAgICAgdGhpcy5zZXRWaWRlb1NvdXJjZShmaWxlKTtcbiAgICB9O1xuICB9XG4gIHNldFZpZGVvU291cmNlIChmaWxlKSB7XG4gICAgY29uc3QgcHJldmlld1JlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcHJldmlld1JlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIHByZXZpZXdSZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YVVyaSA9IHByZXZpZXdSZWFkZXIucmVzdWx0O1xuICAgICAgY29uc3QgYmxvYiA9IGRhdGFVUkl0b0Jsb2IoZGF0YVVyaSk7XG4gICAgICBjb25zdCB2aWRlb1NvdXJjZSA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgdmlkZW9Tb3VyY2UgfSk7XG4gICAgfTtcbiAgfVxuICBoYW5kbGVWaWRlb0xvYWRlZERhdGEgKGV2ZW50KSB7XG4gICAgY29uc3QgZHVyYXRpb24gPSBldmVudC50YXJnZXQuZHVyYXRpb247XG4gICAgY29uc3QgdG90YWxNaW51dGVzID0gTWF0aC5mbG9vcihkdXJhdGlvbiAvIDYwKTtcbiAgICBjb25zdCB0b3RhbFNlY29uZHMgPSBNYXRoLmZsb29yKGR1cmF0aW9uICUgNjApO1xuICAgIC8vIHNldCB0aGUgc2xpZGVyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzbGlkZXJNYXhSYW5nZTogZHVyYXRpb24gKiAxMDAsXG4gICAgICBzbGlkZXJWYWx1ZSAgIDogZHVyYXRpb24gKiAxMDAgLyAyLFxuICAgICAgdG90YWxNaW51dGVzLFxuICAgICAgdG90YWxTZWNvbmRzLFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSB2aWRlb1xuICAgIGxldCB2aWRlbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aWRlby10aHVtYi1wbGF5ZXInKTtcbiAgICB2aWRlby5jdXJyZW50VGltZSA9IGR1cmF0aW9uIC8gMjtcbiAgfVxuICBoYW5kbGVTbGlkZXJDaGFuZ2UgKGV2ZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChldmVudC50YXJnZXQudmFsdWUpO1xuICAgIC8vIHVwZGF0ZSB0aGUgc2xpZGVyIHZhbHVlXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzbGlkZXJWYWx1ZTogdmFsdWUsXG4gICAgfSk7XG4gICAgLy8gdXBkYXRlIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIHZpZGVvXG4gICAgbGV0IHZpZGVvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZGVvLXRodW1iLXBsYXllcicpO1xuICAgIHZpZGVvLmN1cnJlbnRUaW1lID0gdmFsdWUgLyAxMDA7XG4gIH1cbiAgY3JlYXRlVGh1bWJuYWlsICgpIHtcbiAgICAvLyB0YWtlIGEgc25hcHNob3RcbiAgICBsZXQgdmlkZW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmlkZW8tdGh1bWItcGxheWVyJyk7XG4gICAgbGV0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhcy53aWR0aCA9IHZpZGVvLnZpZGVvV2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IHZpZGVvLnZpZGVvSGVpZ2h0O1xuICAgIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmRyYXdJbWFnZSh2aWRlbywgMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICBjb25zdCBkYXRhVXJsID0gY2FudmFzLnRvRGF0YVVSTCgpO1xuICAgIGNvbnN0IGJsb2IgPSBkYXRhVVJJdG9CbG9iKGRhdGFVcmwpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gbmV3IEZpbGUoW2Jsb2JdLCBgdGh1bWJuYWlsLnBuZ2AsIHtcbiAgICAgIHR5cGU6ICdpbWFnZS9wbmcnLFxuICAgIH0pO1xuICAgIC8vIHNldCB0aGUgdGh1bWJuYWlsIGluIHJlZHV4IHN0b3JlXG4gICAgaWYgKHNuYXBzaG90KSB7XG4gICAgICB0aGlzLnByb3BzLm9uTmV3VGh1bWJuYWlsKHNuYXBzaG90KTtcbiAgICB9XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7IGVycm9yLCB2aWRlb1NvdXJjZSwgc2xpZGVyTWluUmFuZ2UsIHNsaWRlck1heFJhbmdlLCBzbGlkZXJWYWx1ZSwgdG90YWxNaW51dGVzLCB0b3RhbFNlY29uZHMgfSA9IHRoaXMuc3RhdGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9J2xhYmVsJz5UaHVtYm5haWw6PC9sYWJlbD5cbiAgICAgICAgPHZpZGVvXG4gICAgICAgICAgaWQ9J3ZpZGVvLXRodW1iLXBsYXllcidcbiAgICAgICAgICBwcmVsb2FkPSdtZXRhZGF0YSdcbiAgICAgICAgICBtdXRlZFxuICAgICAgICAgIHN0eWxlPXt7ZGlzcGxheTogJ25vbmUnfX1cbiAgICAgICAgICBwbGF5c0lubGluZVxuICAgICAgICAgIG9uTG9hZGVkRGF0YT17dGhpcy5oYW5kbGVWaWRlb0xvYWRlZERhdGF9XG4gICAgICAgICAgc3JjPXt2aWRlb1NvdXJjZX1cbiAgICAgICAgICBvblNlZWtlZD17dGhpcy5jcmVhdGVUaHVtYm5haWx9XG4gICAgICAgIC8+XG4gICAgICAgIHtcbiAgICAgICAgICBzbGlkZXJWYWx1ZSA/IChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdmbGV4LWNvbnRhaW5lci0tcm93IGZsZXgtY29udGFpbmVyLS1zcGFjZS1iZXR3ZWVuLWNlbnRlcicgc3R5bGU9e3t3aWR0aDogJzEwMCUnfX0+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdpbmZvLW1lc3NhZ2UnPjAnMDBcIjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J2luZm8tbWVzc2FnZSc+e3RvdGFsTWludXRlc30ne3RvdGFsU2Vjb25kc31cIjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPSdyYW5nZSdcbiAgICAgICAgICAgICAgICAgIG1pbj17c2xpZGVyTWluUmFuZ2V9XG4gICAgICAgICAgICAgICAgICBtYXg9e3NsaWRlck1heFJhbmdlfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3NsaWRlclZhbHVlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPSdzbGlkZXInXG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVTbGlkZXJDaGFuZ2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSdpbmZvLW1lc3NhZ2UnID5sb2FkaW5nLi4uIDwvcD5cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgeyBlcnJvciA/IChcbiAgICAgICAgICA8cCBjbGFzc05hbWU9J2luZm8tbWVzc2FnZS0tZmFpbHVyZSc+e2Vycm9yfTwvcD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8cCBjbGFzc05hbWU9J2luZm8tbWVzc2FnZSc+VXNlIHNsaWRlciB0byBzZXQgdGh1bWJuYWlsPC9wPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQdWJsaXNoVGh1bWJuYWlsSW5wdXQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoVGh1bWJuYWlsSW5wdXQvdmlldy5qc3giLCJpbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7dXBkYXRlTWV0YWRhdGEsIHRvZ2dsZU1ldGFkYXRhSW5wdXRzfSBmcm9tICdhY3Rpb25zL3B1Ymxpc2gnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgcHVibGlzaCB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgc2hvd01ldGFkYXRhSW5wdXRzOiBwdWJsaXNoLnNob3dNZXRhZGF0YUlucHV0cyxcbiAgICBkZXNjcmlwdGlvbiAgICAgICA6IHB1Ymxpc2gubWV0YWRhdGEuZGVzY3JpcHRpb24sXG4gICAgbGljZW5zZSAgICAgICAgICAgOiBwdWJsaXNoLm1ldGFkYXRhLmxpY2Vuc2UsXG4gICAgbnNmdyAgICAgICAgICAgICAgOiBwdWJsaXNoLm1ldGFkYXRhLm5zZncsXG4gIH07XG59O1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSBkaXNwYXRjaCA9PiB7XG4gIHJldHVybiB7XG4gICAgb25NZXRhZGF0YUNoYW5nZTogKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVNZXRhZGF0YShuYW1lLCB2YWx1ZSkpO1xuICAgIH0sXG4gICAgb25Ub2dnbGVNZXRhZGF0YUlucHV0czogKHZhbHVlKSA9PiB7XG4gICAgICBkaXNwYXRjaCh0b2dnbGVNZXRhZGF0YUlucHV0cyh2YWx1ZSkpO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hNZXRhZGF0YUlucHV0cy9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRXhwYW5kaW5nVGV4dEFyZWEgZnJvbSAnY29tcG9uZW50cy9FeHBhbmRpbmdUZXh0QXJlYSc7XG5cbmNsYXNzIFB1Ymxpc2hNZXRhZGF0YUlucHV0cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnRvZ2dsZVNob3dJbnB1dHMgPSB0aGlzLnRvZ2dsZVNob3dJbnB1dHMuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZUlucHV0ID0gdGhpcy5oYW5kbGVJbnB1dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlU2VsZWN0ID0gdGhpcy5oYW5kbGVTZWxlY3QuYmluZCh0aGlzKTtcbiAgfVxuICB0b2dnbGVTaG93SW5wdXRzICgpIHtcbiAgICB0aGlzLnByb3BzLm9uVG9nZ2xlTWV0YWRhdGFJbnB1dHMoIXRoaXMucHJvcHMuc2hvd01ldGFkYXRhSW5wdXRzKTtcbiAgfVxuICBoYW5kbGVJbnB1dCAoZXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94JyA/IHRhcmdldC5jaGVja2VkIDogdGFyZ2V0LnZhbHVlO1xuICAgIGNvbnN0IG5hbWUgPSB0YXJnZXQubmFtZTtcbiAgICB0aGlzLnByb3BzLm9uTWV0YWRhdGFDaGFuZ2UobmFtZSwgdmFsdWUpO1xuICB9XG4gIGhhbmRsZVNlbGVjdCAoZXZlbnQpIHtcbiAgICBjb25zdCBuYW1lID0gZXZlbnQudGFyZ2V0Lm5hbWU7XG4gICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBldmVudC50YXJnZXQuc2VsZWN0ZWRPcHRpb25zWzBdLnZhbHVlO1xuICAgIHRoaXMucHJvcHMub25NZXRhZGF0YUNoYW5nZShuYW1lLCBzZWxlY3RlZE9wdGlvbik7XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBpZD0ncHVibGlzaC1kZXRhaWxzJyBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCByb3ctLW5vLXRvcCByb3ctLXdpZGUnPlxuICAgICAgICB7dGhpcy5wcm9wcy5zaG93TWV0YWRhdGFJbnB1dHMgJiYgKFxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tbm8tdG9wJz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTMgY29sdW1uLS1tZWQtMTAgYWxpZ24tY29udGVudC10b3AnPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPSdwdWJsaXNoLWxpY2Vuc2UnIGNsYXNzTmFtZT0nbGFiZWwnPkRlc2NyaXB0aW9uOjwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PjxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS03IGNvbHVtbi0tc21sLTEwJz5cbiAgICAgICAgICAgICAgICA8RXhwYW5kaW5nVGV4dEFyZWFcbiAgICAgICAgICAgICAgICAgIGlkPSdwdWJsaXNoLWRlc2NyaXB0aW9uJ1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPSd0ZXh0YXJlYSB0ZXh0YXJlYS0tcHJpbWFyeSB0ZXh0YXJlYS0tZnVsbC13aWR0aCdcbiAgICAgICAgICAgICAgICAgIHJvd3M9ezF9XG4gICAgICAgICAgICAgICAgICBtYXhMZW5ndGg9ezIwMDB9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXhIZWlnaHQ6IDIwMCB9fVxuICAgICAgICAgICAgICAgICAgbmFtZT0nZGVzY3JpcHRpb24nXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nT3B0aW9uYWwgZGVzY3JpcHRpb24nXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5wcm9wcy5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUlucHV0fSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tbm8tdG9wJz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTMgY29sdW1uLS1tZWQtMTAnPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPSdwdWJsaXNoLWxpY2Vuc2UnIGNsYXNzTmFtZT0nbGFiZWwnPkxpY2Vuc2U6PC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTcgY29sdW1uLS1zbWwtMTAnPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgdHlwZT0ndGV4dCcgbmFtZT0nbGljZW5zZScgaWQ9J3B1Ymxpc2gtbGljZW5zZScgY2xhc3NOYW1lPSdzZWxlY3Qgc2VsZWN0LS1wcmltYXJ5JyBvbkNoYW5nZT17dGhpcy5oYW5kbGVTZWxlY3R9PlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nICc+VW5zcGVjaWZpZWQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9J1B1YmxpYyBEb21haW4nPlB1YmxpYyBEb21haW48L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9J0NyZWF0aXZlIENvbW1vbnMnPkNyZWF0aXZlIENvbW1vbnM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLW5vLXRvcCc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0zJz5cbiAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj0ncHVibGlzaC1uc2Z3JyBjbGFzc05hbWU9J2xhYmVsJz5NYXR1cmU6PC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTcnPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzc05hbWU9J2lucHV0LWNoZWNrYm94JyB0eXBlPSdjaGVja2JveCcgaWQ9J3B1Ymxpc2gtbnNmdycgbmFtZT0nbnNmdycgdmFsdWU9e3RoaXMucHJvcHMubnNmd30gb25DaGFuZ2U9e3RoaXMuaGFuZGxlSW5wdXR9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSdidXR0b24tLXNlY29uZGFyeScgb25DbGljaz17dGhpcy50b2dnbGVTaG93SW5wdXRzfT57dGhpcy5wcm9wcy5zaG93TWV0YWRhdGFJbnB1dHMgPyAnbGVzcycgOiAnbW9yZSd9PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1Ymxpc2hNZXRhZGF0YUlucHV0cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hNZXRhZGF0YUlucHV0cy92aWV3LmpzeCIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5jbGFzcyBFeHBhbmRpbmdUZXh0YXJlYSBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLl9oYW5kbGVDaGFuZ2UgPSB0aGlzLl9oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgdGhpcy5hZGp1c3RUZXh0YXJlYSh7fSk7XG4gIH1cbiAgX2hhbmRsZUNoYW5nZSAoZXZlbnQpIHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoZXZlbnQpO1xuICAgIHRoaXMuYWRqdXN0VGV4dGFyZWEoZXZlbnQpO1xuICB9XG4gIGFkanVzdFRleHRhcmVhICh7IHRhcmdldCA9IHRoaXMuZWwgfSkge1xuICAgIHRhcmdldC5zdHlsZS5oZWlnaHQgPSAwO1xuICAgIHRhcmdldC5zdHlsZS5oZWlnaHQgPSBgJHt0YXJnZXQuc2Nyb2xsSGVpZ2h0fXB4YDtcbiAgfVxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHsgLi4ucmVzdCB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgICByZWY9e3ggPT4gdGhpcy5lbCA9IHh9XG4gICAgICAgIG9uQ2hhbmdlPXt0aGlzLl9oYW5kbGVDaGFuZ2V9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuRXhwYW5kaW5nVGV4dGFyZWEucHJvcFR5cGVzID0ge1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFeHBhbmRpbmdUZXh0YXJlYTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb21wb25lbnRzL0V4cGFuZGluZ1RleHRBcmVhL2luZGV4LmpzeCIsImltcG9ydCB7Y29ubmVjdH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHtzZXRQdWJsaXNoSW5DaGFubmVsLCB1cGRhdGVTZWxlY3RlZENoYW5uZWwsIHVwZGF0ZUVycm9yfSBmcm9tICdhY3Rpb25zL3B1Ymxpc2gnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgY2hhbm5lbCwgcHVibGlzaCB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgbG9nZ2VkSW5DaGFubmVsTmFtZTogY2hhbm5lbC5sb2dnZWRJbkNoYW5uZWwubmFtZSxcbiAgICBwdWJsaXNoSW5DaGFubmVsICAgOiBwdWJsaXNoLnB1Ymxpc2hJbkNoYW5uZWwsXG4gICAgc2VsZWN0ZWRDaGFubmVsICAgIDogcHVibGlzaC5zZWxlY3RlZENoYW5uZWwsXG4gICAgY2hhbm5lbEVycm9yICAgICAgIDogcHVibGlzaC5lcnJvci5jaGFubmVsLFxuICB9O1xufTtcblxuY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gZGlzcGF0Y2ggPT4ge1xuICByZXR1cm4ge1xuICAgIG9uUHVibGlzaEluQ2hhbm5lbENoYW5nZTogKHZhbHVlKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVFcnJvcignY2hhbm5lbCcsIG51bGwpKTtcbiAgICAgIGRpc3BhdGNoKHNldFB1Ymxpc2hJbkNoYW5uZWwodmFsdWUpKTtcbiAgICB9LFxuICAgIG9uQ2hhbm5lbFNlbGVjdDogKHZhbHVlKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVFcnJvcignY2hhbm5lbCcsIG51bGwpKTtcbiAgICAgIGRpc3BhdGNoKHVwZGF0ZVNlbGVjdGVkQ2hhbm5lbCh2YWx1ZSkpO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxTZWxlY3QvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENoYW5uZWxMb2dpbkZvcm0gZnJvbSAnY29udGFpbmVycy9DaGFubmVsTG9naW5Gb3JtJztcbmltcG9ydCBDaGFubmVsQ3JlYXRlRm9ybSBmcm9tICdjb250YWluZXJzL0NoYW5uZWxDcmVhdGVGb3JtJztcbmltcG9ydCAqIGFzIHN0YXRlcyBmcm9tICdjb25zdGFudHMvcHVibGlzaF9jaGFubmVsX3NlbGVjdF9zdGF0ZXMnO1xuXG5jbGFzcyBDaGFubmVsU2VsZWN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMudG9nZ2xlQW5vbnltb3VzUHVibGlzaCA9IHRoaXMudG9nZ2xlQW5vbnltb3VzUHVibGlzaC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlU2VsZWN0aW9uID0gdGhpcy5oYW5kbGVTZWxlY3Rpb24uYmluZCh0aGlzKTtcbiAgfVxuICB0b2dnbGVBbm9ueW1vdXNQdWJsaXNoIChldmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIGlmICh2YWx1ZSA9PT0gJ2Fub255bW91cycpIHtcbiAgICAgIHRoaXMucHJvcHMub25QdWJsaXNoSW5DaGFubmVsQ2hhbmdlKGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy5vblB1Ymxpc2hJbkNoYW5uZWxDaGFuZ2UodHJ1ZSk7XG4gICAgfVxuICB9XG4gIGhhbmRsZVNlbGVjdGlvbiAoZXZlbnQpIHtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IGV2ZW50LnRhcmdldC5zZWxlY3RlZE9wdGlvbnNbMF0udmFsdWU7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5uZWxTZWxlY3Qoc2VsZWN0ZWRPcHRpb24pO1xuICB9XG4gIHJlbmRlciAoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxmb3JtPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0zIGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0nYW5vbnltb3VzLW9yLWNoYW5uZWwnIGlkPSdhbm9ueW1vdXMtcmFkaW8nIGNsYXNzTmFtZT0naW5wdXQtcmFkaW8nIHZhbHVlPSdhbm9ueW1vdXMnIGNoZWNrZWQ9eyF0aGlzLnByb3BzLnB1Ymxpc2hJbkNoYW5uZWx9IG9uQ2hhbmdlPXt0aGlzLnRvZ2dsZUFub255bW91c1B1Ymxpc2h9IC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSdsYWJlbCBsYWJlbC0tcG9pbnRlcicgaHRtbEZvcj0nYW5vbnltb3VzLXJhZGlvJz5Bbm9ueW1vdXM8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS03IGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0nYW5vbnltb3VzLW9yLWNoYW5uZWwnIGlkPSdjaGFubmVsLXJhZGlvJyBjbGFzc05hbWU9J2lucHV0LXJhZGlvJyB2YWx1ZT0naW4gYSBjaGFubmVsJyBjaGVja2VkPXt0aGlzLnByb3BzLnB1Ymxpc2hJbkNoYW5uZWx9IG9uQ2hhbmdlPXt0aGlzLnRvZ2dsZUFub255bW91c1B1Ymxpc2h9IC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSdsYWJlbCBsYWJlbC0tcG9pbnRlcicgaHRtbEZvcj0nY2hhbm5lbC1yYWRpbyc+SW4gYSBjaGFubmVsPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7IHRoaXMucHJvcHMuY2hhbm5lbEVycm9yID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSdpbmZvLW1lc3NhZ2UtLWZhaWx1cmUnPnt0aGlzLnByb3BzLmNoYW5uZWxFcnJvcn08L3A+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0naW5mby1tZXNzYWdlJz5QdWJsaXNoIGFub255bW91c2x5IG9yIGluIGEgY2hhbm5lbDwvcD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Zvcm0+XG4gICAgICAgIHsgdGhpcy5wcm9wcy5wdWJsaXNoSW5DaGFubmVsICYmIChcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTMnPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSdsYWJlbCcgaHRtbEZvcj0nY2hhbm5lbC1uYW1lLXNlbGVjdCc+Q2hhbm5lbDo8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTcnPlxuICAgICAgICAgICAgICA8c2VsZWN0IHR5cGU9J3RleHQnIGlkPSdjaGFubmVsLW5hbWUtc2VsZWN0JyBjbGFzc05hbWU9J3NlbGVjdCBzZWxlY3QtLWFycm93JyB2YWx1ZT17dGhpcy5wcm9wcy5zZWxlY3RlZENoYW5uZWx9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZVNlbGVjdGlvbn0+XG4gICAgICAgICAgICAgICAgeyB0aGlzLnByb3BzLmxvZ2dlZEluQ2hhbm5lbE5hbWUgJiYgPG9wdGlvbiB2YWx1ZT17dGhpcy5wcm9wcy5sb2dnZWRJbkNoYW5uZWxOYW1lfSBpZD0ncHVibGlzaC1jaGFubmVsLXNlbGVjdC1jaGFubmVsLW9wdGlvbic+e3RoaXMucHJvcHMubG9nZ2VkSW5DaGFubmVsTmFtZX08L29wdGlvbj4gfVxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9e3N0YXRlcy5MT0dJTn0+RXhpc3Rpbmc8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXtzdGF0ZXMuQ1JFQVRFfT5OZXc8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHsgKHRoaXMucHJvcHMuc2VsZWN0ZWRDaGFubmVsID09PSBzdGF0ZXMuTE9HSU4pICYmIDxDaGFubmVsTG9naW5Gb3JtIC8+IH1cbiAgICAgICAgICAgIHsgKHRoaXMucHJvcHMuc2VsZWN0ZWRDaGFubmVsID09PSBzdGF0ZXMuQ1JFQVRFKSAmJiA8Q2hhbm5lbENyZWF0ZUZvcm0gLz4gfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsU2VsZWN0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvQ2hhbm5lbFNlbGVjdC92aWV3LmpzeCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICd1dGlscy9yZXF1ZXN0JztcblxuY2xhc3MgQ2hhbm5lbExvZ2luRm9ybSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZXJyb3IgICA6IG51bGwsXG4gICAgICBuYW1lICAgIDogJycsXG4gICAgICBwYXNzd29yZDogJycsXG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUlucHV0ID0gdGhpcy5oYW5kbGVJbnB1dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMubG9naW5Ub0NoYW5uZWwgPSB0aGlzLmxvZ2luVG9DaGFubmVsLmJpbmQodGhpcyk7XG4gIH1cbiAgaGFuZGxlSW5wdXQgKGV2ZW50KSB7XG4gICAgY29uc3QgbmFtZSA9IGV2ZW50LnRhcmdldC5uYW1lO1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1tuYW1lXTogdmFsdWV9KTtcbiAgfVxuICBsb2dpblRvQ2hhbm5lbCAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG1ldGhvZCA6ICdQT1NUJyxcbiAgICAgIGJvZHkgICA6IEpTT04uc3RyaW5naWZ5KHt1c2VybmFtZTogdGhpcy5zdGF0ZS5uYW1lLCBwYXNzd29yZDogdGhpcy5zdGF0ZS5wYXNzd29yZH0pLFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoe1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSksXG4gICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgIH07XG4gICAgcmVxdWVzdCgnbG9naW4nLCBwYXJhbXMpXG4gICAgICAudGhlbigoe3N1Y2Nlc3MsIGNoYW5uZWxOYW1lLCBzaG9ydENoYW5uZWxJZCwgY2hhbm5lbENsYWltSWQsIG1lc3NhZ2V9KSA9PiB7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5uZWxMb2dpbihjaGFubmVsTmFtZSwgc2hvcnRDaGFubmVsSWQsIGNoYW5uZWxDbGFpbUlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsnZXJyb3InOiBtZXNzYWdlfSk7XG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsnZXJyb3InOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7J2Vycm9yJzogZXJyb3J9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGZvcm0gaWQ9J2NoYW5uZWwtbG9naW4tZm9ybSc+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS13aWRlIHJvdy0tc2hvcnQnPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0zIGNvbHVtbi0tc21sLTEwJz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9J2xhYmVsJyBodG1sRm9yPSdjaGFubmVsLWxvZ2luLW5hbWUtaW5wdXQnPk5hbWU6PC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj48ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tNiBjb2x1bW4tLXNtbC0xMCc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0naW5wdXQtdGV4dC0tcHJpbWFyeSBmbGV4LWNvbnRhaW5lci0tcm93IGZsZXgtY29udGFpbmVyLS1sZWZ0LWJvdHRvbSc+XG4gICAgICAgICAgICAgIDxzcGFuPkA8L3NwYW4+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nY2hhbm5lbC1sb2dpbi1uYW1lLWlucHV0JyBjbGFzc05hbWU9J2lucHV0LXRleHQnIG5hbWU9J25hbWUnIHBsYWNlaG9sZGVyPSdZb3VyIENoYW5uZWwgTmFtZScgdmFsdWU9e3RoaXMuc3RhdGUuY2hhbm5lbE5hbWV9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUlucHV0fSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0td2lkZSByb3ctLXNob3J0Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tMyBjb2x1bW4tLXNtbC0xMCc+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSdsYWJlbCcgaHRtbEZvcj0nY2hhbm5lbC1sb2dpbi1wYXNzd29yZC1pbnB1dCcgPlBhc3N3b3JkOjwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTYgY29sdW1uLS1zbWwtMTAnPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2lucHV0LXRleHQtLXByaW1hcnknPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ncGFzc3dvcmQnIGlkPSdjaGFubmVsLWxvZ2luLXBhc3N3b3JkLWlucHV0JyBuYW1lPSdwYXNzd29yZCcgY2xhc3NOYW1lPSdpbnB1dC10ZXh0JyBwbGFjZWhvbGRlcj0nJyB2YWx1ZT17dGhpcy5zdGF0ZS5jaGFubmVsUGFzc3dvcmR9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUlucHV0fSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7IHRoaXMuc3RhdGUuZXJyb3IgPyAoXG4gICAgICAgICAgPHAgY2xhc3NOYW1lPSdpbmZvLW1lc3NhZ2UtLWZhaWx1cmUnPnt0aGlzLnN0YXRlLmVycm9yfTwvcD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8cCBjbGFzc05hbWU9J2luZm8tbWVzc2FnZSc+RW50ZXIgdGhlIG5hbWUgYW5kIHBhc3N3b3JkIGZvciB5b3VyIGNoYW5uZWw8L3A+XG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS13aWRlJz5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT0nYnV0dG9uLS1wcmltYXJ5JyBvbkNsaWNrPXt0aGlzLmxvZ2luVG9DaGFubmVsfT5BdXRoZW50aWNhdGU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Zvcm0+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsTG9naW5Gb3JtO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvQ2hhbm5lbExvZ2luRm9ybS92aWV3LmpzeCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvZ3Jlc3NCYXIgZnJvbSAnY29tcG9uZW50cy9Qcm9ncmVzc0Jhcic7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICd1dGlscy9yZXF1ZXN0JztcblxuY2xhc3MgQ2hhbm5lbENyZWF0ZUZvcm0gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGVycm9yICAgOiBudWxsLFxuICAgICAgY2hhbm5lbCA6ICcnLFxuICAgICAgcGFzc3dvcmQ6ICcnLFxuICAgICAgc3RhdHVzICA6IG51bGwsXG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUNoYW5uZWxJbnB1dCA9IHRoaXMuaGFuZGxlQ2hhbm5lbElucHV0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVJbnB1dCA9IHRoaXMuaGFuZGxlSW5wdXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUNoYW5uZWwgPSB0aGlzLmNyZWF0ZUNoYW5uZWwuYmluZCh0aGlzKTtcbiAgfVxuICBjbGVhbnNlQ2hhbm5lbElucHV0IChpbnB1dCkge1xuICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgvXFxzKy9nLCAnLScpOyAvLyByZXBsYWNlIHNwYWNlcyB3aXRoIGRhc2hlc1xuICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgvW15BLVphLXowLTktXS9nLCAnJyk7ICAvLyByZW1vdmUgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IEEtWiwgYS16LCAwLTksIG9yICctJ1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBoYW5kbGVDaGFubmVsSW5wdXQgKGV2ZW50KSB7XG4gICAgbGV0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHZhbHVlID0gdGhpcy5jbGVhbnNlQ2hhbm5lbElucHV0KHZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHtjaGFubmVsOiB2YWx1ZX0pO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy51cGRhdGVJc0NoYW5uZWxBdmFpbGFibGUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtlcnJvcjogJ1BsZWFzZSBlbnRlciBhIGNoYW5uZWwgbmFtZSd9KTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlSW5wdXQgKGV2ZW50KSB7XG4gICAgY29uc3QgbmFtZSA9IGV2ZW50LnRhcmdldC5uYW1lO1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1tuYW1lXTogdmFsdWV9KTtcbiAgfVxuICB1cGRhdGVJc0NoYW5uZWxBdmFpbGFibGUgKGNoYW5uZWwpIHtcbiAgICBjb25zdCBjaGFubmVsV2l0aEF0U3ltYm9sID0gYEAke2NoYW5uZWx9YDtcbiAgICByZXF1ZXN0KGAvYXBpL2NoYW5uZWwvYXZhaWxhYmlsaXR5LyR7Y2hhbm5lbFdpdGhBdFN5bWJvbH1gKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsnZXJyb3InOiBudWxsfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsnZXJyb3InOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgICB9KTtcbiAgfVxuICBjaGVja0lzQ2hhbm5lbEF2YWlsYWJsZSAoY2hhbm5lbCkge1xuICAgIGNvbnN0IGNoYW5uZWxXaXRoQXRTeW1ib2wgPSBgQCR7Y2hhbm5lbH1gO1xuICAgIHJldHVybiByZXF1ZXN0KGAvYXBpL2NoYW5uZWwvYXZhaWxhYmlsaXR5LyR7Y2hhbm5lbFdpdGhBdFN5bWJvbH1gKTtcbiAgfVxuICBjaGVja0lzUGFzc3dvcmRQcm92aWRlZCAocGFzc3dvcmQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFwYXNzd29yZCB8fCBwYXNzd29yZC5sZW5ndGggPCAxKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSBhIHBhc3N3b3JkJykpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG4gIG1ha2VQdWJsaXNoQ2hhbm5lbFJlcXVlc3QgKHVzZXJuYW1lLCBwYXNzd29yZCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG1ldGhvZCA6ICdQT1NUJyxcbiAgICAgIGJvZHkgICA6IEpTT04uc3RyaW5naWZ5KHt1c2VybmFtZSwgcGFzc3dvcmR9KSxcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0pLFxuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXF1ZXN0KCcvc2lnbnVwJywgcGFyYW1zKVxuICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgVW5mb3J0dW5hdGVseSwgd2UgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgY3JlYXRpbmcgeW91ciBjaGFubmVsLiBQbGVhc2UgbGV0IHVzIGtub3cgaW4gRGlzY29yZCEgJHtlcnJvci5tZXNzYWdlfWApKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgY3JlYXRlQ2hhbm5lbCAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuY2hlY2tJc1Bhc3N3b3JkUHJvdmlkZWQodGhpcy5zdGF0ZS5wYXNzd29yZClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tJc0NoYW5uZWxBdmFpbGFibGUodGhpcy5zdGF0ZS5jaGFubmVsKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3N0YXR1czogJ1dlIGFyZSBwdWJsaXNoaW5nIHlvdXIgbmV3IGNoYW5uZWwuICBTaXQgdGlnaHQuLi4nfSk7XG4gICAgICAgIHJldHVybiB0aGlzLm1ha2VQdWJsaXNoQ2hhbm5lbFJlcXVlc3QodGhpcy5zdGF0ZS5jaGFubmVsLCB0aGlzLnN0YXRlLnBhc3N3b3JkKTtcbiAgICAgIH0pXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtzdGF0dXM6IG51bGx9KTtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5uZWxMb2dpbihyZXN1bHQuY2hhbm5lbE5hbWUsIHJlc3VsdC5zaG9ydENoYW5uZWxJZCwgcmVzdWx0LmNoYW5uZWxDbGFpbUlkKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7J2Vycm9yJzogZXJyb3IubWVzc2FnZSwgc3RhdHVzOiBudWxsfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7J2Vycm9yJzogZXJyb3IsIHN0YXR1czogbnVsbH0pO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgeyAhdGhpcy5zdGF0ZS5zdGF0dXMgPyAoXG4gICAgICAgICAgPGZvcm0gaWQ9J3B1Ymxpc2gtY2hhbm5lbC1mb3JtJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS13aWRlIHJvdy0tc2hvcnQnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tMyBjb2x1bW4tLXNtbC0xMCc+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0nbGFiZWwnIGh0bWxGb3I9J25ldy1jaGFubmVsLW5hbWUnPk5hbWU6PC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTYgY29sdW1uLS1zbWwtMTAnPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdpbnB1dC10ZXh0LS1wcmltYXJ5IGZsZXgtY29udGFpbmVyLS1yb3cgZmxleC1jb250YWluZXItLWxlZnQtYm90dG9tIHNwYW4tLXJlbGF0aXZlJz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPkA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nY2hhbm5lbCcgaWQ9J25ldy1jaGFubmVsLW5hbWUnIGNsYXNzTmFtZT0naW5wdXQtdGV4dCcgcGxhY2Vob2xkZXI9J2V4YW1wbGVDaGFubmVsTmFtZScgdmFsdWU9e3RoaXMuc3RhdGUuY2hhbm5lbH0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbm5lbElucHV0fSAvPlxuICAgICAgICAgICAgICAgICAgeyAodGhpcy5zdGF0ZS5jaGFubmVsICYmICF0aGlzLnN0YXRlLmVycm9yKSAmJiA8c3BhbiBpZD0naW5wdXQtc3VjY2Vzcy1jaGFubmVsLW5hbWUnIGNsYXNzTmFtZT0naW5mby1tZXNzYWdlLS1zdWNjZXNzIHNwYW4tLWFic29sdXRlJz57J1xcdTI3MTMnfTwvc3Bhbj4gfVxuICAgICAgICAgICAgICAgICAgeyB0aGlzLnN0YXRlLmVycm9yICYmIDxzcGFuIGlkPSdpbnB1dC1zdWNjZXNzLWNoYW5uZWwtbmFtZScgY2xhc3NOYW1lPSdpbmZvLW1lc3NhZ2UtLWZhaWx1cmUgc3Bhbi0tYWJzb2x1dGUnPnsnXFx1MjcxNid9PC9zcGFuPiB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0td2lkZSByb3ctLXNob3J0Jz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTMgY29sdW1uLS1zbWwtMTAnPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9J2xhYmVsJyBodG1sRm9yPSduZXctY2hhbm5lbC1wYXNzd29yZCc+UGFzc3dvcmQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTYgY29sdW1uLS1zbWwtMTAnPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdpbnB1dC10ZXh0LS1wcmltYXJ5Jz5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdwYXNzd29yZCcgbmFtZT0ncGFzc3dvcmQnIGlkPSduZXctY2hhbm5lbC1wYXNzd29yZCcgY2xhc3NOYW1lPSdpbnB1dC10ZXh0JyAgcGxhY2Vob2xkZXI9JycgdmFsdWU9e3RoaXMuc3RhdGUucGFzc3dvcmR9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUlucHV0fSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge3RoaXMuc3RhdGUuZXJyb3IgPyAoXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0naW5mby1tZXNzYWdlLS1mYWlsdXJlJz57dGhpcy5zdGF0ZS5lcnJvcn08L3A+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9J2luZm8tbWVzc2FnZSc+Q2hvb3NlIGEgbmFtZSBhbmQgcGFzc3dvcmQgZm9yIHlvdXIgY2hhbm5lbDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0td2lkZSc+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSdidXR0b24tLXByaW1hcnknIG9uQ2xpY2s9e3RoaXMuY3JlYXRlQ2hhbm5lbH0+Q3JlYXRlIENoYW5uZWw8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSdmaW5lLXByaW50Jz57dGhpcy5zdGF0ZS5zdGF0dXN9PC9wPlxuICAgICAgICAgICAgPFByb2dyZXNzQmFyIHNpemU9ezEyfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsQ3JlYXRlRm9ybTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxDcmVhdGVGb3JtL3ZpZXcuanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgQWN0aXZlU3RhdHVzQmFyID0gKCkgPT4ge1xuICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPSdwcm9ncmVzcy1iYXIgcHJvZ3Jlc3MtYmFyLS1hY3RpdmUnPnwgPC9zcGFuPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFjdGl2ZVN0YXR1c0JhcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb21wb25lbnRzL0FjdGl2ZVN0YXR1c0Jhci9pbmRleC5qc3giLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBJbmFjdGl2ZVN0YXR1c0JhciA9ICgpID0+IHtcbiAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT0ncHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci0taW5hY3RpdmUnPnwgPC9zcGFuPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEluYWN0aXZlU3RhdHVzQmFyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbXBvbmVudHMvSW5hY3RpdmVTdGF0dXNCYXIvaW5kZXguanN4IiwiaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge2NsZWFyRmlsZX0gZnJvbSAnYWN0aW9ucy9wdWJsaXNoJztcbmltcG9ydCBWaWV3IGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9ICh7IHB1Ymxpc2ggfSkgPT4ge1xuICByZXR1cm4ge1xuICAgIHN0YXR1cyA6IHB1Ymxpc2guc3RhdHVzLnN0YXR1cyxcbiAgICBtZXNzYWdlOiBwdWJsaXNoLnN0YXR1cy5tZXNzYWdlLFxuICB9O1xufTtcblxuY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0ge1xuICBjbGVhckZpbGUsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hTdGF0dXMvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb2dyZXNzQmFyIGZyb20gJ2NvbXBvbmVudHMvUHJvZ3Jlc3NCYXInO1xuaW1wb3J0ICogYXMgcHVibGlzaFN0YXRlcyBmcm9tICdjb25zdGFudHMvcHVibGlzaF9jbGFpbV9zdGF0ZXMnO1xuXG5jbGFzcyBQdWJsaXNoU3RhdHVzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7IHN0YXR1cywgbWVzc2FnZSwgY2xlYXJGaWxlIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tdGFsbCBmbGV4LWNvbnRhaW5lci0tY29sdW1uIGZsZXgtY29udGFpbmVyLS1jZW50ZXItY2VudGVyJz5cbiAgICAgICAge3N0YXR1cyA9PT0gcHVibGlzaFN0YXRlcy5MT0FEX1NUQVJUICYmXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgYWxpZ24tY29udGVudC1jZW50ZXInPlxuICAgICAgICAgIDxwPkZpbGUgaXMgbG9hZGluZyB0byBzZXJ2ZXI8L3A+XG4gICAgICAgICAgPHAgY2xhc3NOYW1lPSdibHVlJz4wJTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAge3N0YXR1cyA9PT0gcHVibGlzaFN0YXRlcy5MT0FESU5HICYmXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyBhbGlnbi1jb250ZW50LWNlbnRlcic+XG4gICAgICAgICAgICA8cD5GaWxlIGlzIGxvYWRpbmcgdG8gc2VydmVyPC9wPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSdibHVlJz57bWVzc2FnZX08L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIHtzdGF0dXMgPT09IHB1Ymxpc2hTdGF0ZXMuUFVCTElTSElORyAmJlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IGFsaWduLWNvbnRlbnQtY2VudGVyJz5cbiAgICAgICAgICA8cD5VcGxvYWQgY29tcGxldGUuICBZb3VyIGZpbGUgaXMgbm93IGJlaW5nIHB1Ymxpc2hlZCBvbiB0aGUgYmxvY2tjaGFpbi4uLjwvcD5cbiAgICAgICAgICA8UHJvZ3Jlc3NCYXIgc2l6ZT17MTJ9IC8+XG4gICAgICAgICAgPHA+Q3VyaW91cyB3aGF0IG1hZ2ljIGlzIGhhcHBlbmluZyBoZXJlPyA8YSBjbGFzc05hbWU9J2xpbmstLXByaW1hcnknIHRhcmdldD0nYmxhbmsnIGhyZWY9J2h0dHBzOi8vbGJyeS5pby9mYXEvd2hhdC1pcy1sYnJ5Jz5MZWFybiBtb3JlLjwvYT48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIHtzdGF0dXMgPT09IHB1Ymxpc2hTdGF0ZXMuU1VDQ0VTUyAmJlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IGFsaWduLWNvbnRlbnQtY2VudGVyJz5cbiAgICAgICAgICA8cD5Zb3VyIHB1Ymxpc2ggaXMgY29tcGxldGUhIFlvdSBhcmUgYmVpbmcgcmVkaXJlY3RlZCB0byBpdCBub3cuPC9wPlxuICAgICAgICAgIDxwPklmIHlvdSBhcmUgbm90IGF1dG9tYXRpY2FsbHkgcmVkaXJlY3RlZCwgPGEgY2xhc3NOYW1lPSdsaW5rLS1wcmltYXJ5JyB0YXJnZXQ9J19ibGFuaycgaHJlZj17bWVzc2FnZX0+Y2xpY2sgaGVyZS48L2E+PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICB7c3RhdHVzID09PSBwdWJsaXNoU3RhdGVzLkZBSUxFRCAmJlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IGFsaWduLWNvbnRlbnQtY2VudGVyJz5cbiAgICAgICAgICA8cD5Tb21ldGhpbmcgd2VudCB3cm9uZy4uLjwvcD5cbiAgICAgICAgICA8cD48c3Ryb25nPnttZXNzYWdlfTwvc3Ryb25nPjwvcD5cbiAgICAgICAgICA8cD5Gb3IgaGVscCwgcG9zdCB0aGUgYWJvdmUgZXJyb3IgdGV4dCBpbiB0aGUgI3NwZWVjaCBjaGFubmVsIG9uIHRoZSA8YSBjbGFzc05hbWU9J2xpbmstLXByaW1hcnknIGhyZWY9J2h0dHBzOi8vZGlzY29yZC5nZy9Zallid2hTJyB0YXJnZXQ9J19ibGFuayc+bGJyeSBkaXNjb3JkPC9hPjwvcD5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT0nYnV0dG9uLS1zZWNvbmRhcnknIG9uQ2xpY2s9e2NsZWFyRmlsZX0+UmVzZXQ8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFB1Ymxpc2hTdGF0dXM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoU3RhdHVzL3ZpZXcuanN4IiwiZXhwb3J0IGNvbnN0IExPQURfU1RBUlQgPSAnTE9BRF9TVEFSVCc7XG5leHBvcnQgY29uc3QgTE9BRElORyA9ICdMT0FESU5HJztcbmV4cG9ydCBjb25zdCBQVUJMSVNISU5HID0gJ1BVQkxJU0hJTkcnO1xuZXhwb3J0IGNvbnN0IFNVQ0NFU1MgPSAnU1VDQ0VTUyc7XG5leHBvcnQgY29uc3QgRkFJTEVEID0gJ0ZBSUxFRCc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29uc3RhbnRzL3B1Ymxpc2hfY2xhaW1fc3RhdGVzLmpzIiwiaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBwdWJsaXNoIH0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlOiBwdWJsaXNoLmRpc2FibGVkTWVzc2FnZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBudWxsKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hEaXNhYmxlZE1lc3NhZ2UvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jbGFzcyBQdWJsaXNoRGlzYWJsZWRNZXNzYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5wcm9wcy5tZXNzYWdlO1xuICAgIGNvbnNvbGUubG9nKCd0aGlzLnByb3BzLm1lc3NhZ2U6JywgbWVzc2FnZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgZHJvcHpvbmUtLWRpc2FibGVkIHJvdy0tdGFsbCBmbGV4LWNvbnRhaW5lci0tY29sdW1uIGZsZXgtY29udGFpbmVyLS1jZW50ZXItY2VudGVyJz5cbiAgICAgICAgPHAgY2xhc3NOYW1lPSd0ZXh0LS1kaXNhYmxlZCc+UHVibGlzaGluZyBpcyBjdXJyZW50bHkgZGlzYWJsZWQuPC9wPlxuICAgICAgICA8cCBjbGFzc05hbWU9J3RleHQtLWRpc2FibGVkJz57bWVzc2FnZX08L3A+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1Ymxpc2hEaXNhYmxlZE1lc3NhZ2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoRGlzYWJsZWRNZXNzYWdlL3ZpZXcuanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBOYXZCYXIgZnJvbSAnY29udGFpbmVycy9OYXZCYXInO1xuaW1wb3J0IFNFTyBmcm9tICdjb21wb25lbnRzL1NFTyc7XG5cbmNsYXNzIEFib3V0UGFnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlciAoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxTRU8gcGFnZVRpdGxlPXsnQWJvdXQnfSBwYWdlVXJpPXsnYWJvdXQnfSAvPlxuICAgICAgICA8TmF2QmFyIC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS1wYWRkZWQnPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS01IGNvbHVtbi0tbWVkLTEwIGFsaWduLWNvbnRlbnQtdG9wJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS04IGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSdwdWxsLXF1b3RlJz5TcGVlLmNoIGlzIGFuIG9wZW4tc291cmNlIHByb2plY3QuICBQbGVhc2UgY29udHJpYnV0ZSB0byB0aGUgZXhpc3Rpbmcgc2l0ZSwgb3IgZm9yayBpdCBhbmQgbWFrZSB5b3VyIG93bi48L3A+XG4gICAgICAgICAgICAgIDxwPjxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2h0dHBzOi8vdHdpdHRlci5jb20vc3BlZV9jaCc+VFdJVFRFUjwvYT48L3A+XG4gICAgICAgICAgICAgIDxwPjxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9sYnJ5aW8vc3BlZS5jaCc+R0lUSFVCPC9hPjwvcD5cbiAgICAgICAgICAgICAgPHA+PGEgY2xhc3NOYW1lPSdsaW5rLS1wcmltYXJ5JyB0YXJnZXQ9J19ibGFuaycgaHJlZj0naHR0cHM6Ly9kaXNjb3JkLmdnL1lqWWJ3aFMnPkRJU0NPUkQgQ0hBTk5FTDwvYT48L3A+XG4gICAgICAgICAgICAgIDxwPjxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9sYnJ5aW8vc3BlZS5jaC9ibG9iL21hc3Rlci9SRUFETUUubWQnPkRPQ1VNRU5UQVRJT048L2E+PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTUgY29sdW1uLS1tZWQtMTAgYWxpZ24tY29udGVudC10b3AnPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTggY29sdW1uLS1tZWQtMTAnPlxuICAgICAgICAgICAgICA8cD5TcGVlLmNoIGlzIGEgbWVkaWEtaG9zdGluZyBzaXRlIHRoYXQgcmVhZHMgZnJvbSBhbmQgcHVibGlzaGVzIGNvbnRlbnQgdG8gdGhlIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgaHJlZj0naHR0cHM6Ly9sYnJ5LmlvJz5MQlJZPC9hPiBibG9ja2NoYWluLjwvcD5cbiAgICAgICAgICAgICAgPHA+U3BlZS5jaCBpcyBhIGhvc3Rpbmcgc2VydmljZSwgYnV0IHdpdGggdGhlIGFkZGVkIGJlbmVmaXQgdGhhdCBpdCBzdG9yZXMgeW91ciBjb250ZW50IG9uIGEgZGVjZW50cmFsaXplZCBuZXR3b3JrIG9mIGNvbXB1dGVycyAtLSB0aGUgPGEgY2xhc3NOYW1lPSdsaW5rLS1wcmltYXJ5JyBocmVmPSdodHRwczovL2xicnkuaW8vZ2V0Jz5MQlJZPC9hPiBuZXR3b3JrLiAgVGhpcyBtZWFucyB0aGF0IHlvdXIgaW1hZ2VzIGFyZSBzdG9yZWQgaW4gbXVsdGlwbGUgbG9jYXRpb25zIHdpdGhvdXQgYSBzaW5nbGUgcG9pbnQgb2YgZmFpbHVyZS48L3A+XG4gICAgICAgICAgICAgIDxoMz5Db250cmlidXRlPC9oMz5cbiAgICAgICAgICAgICAgPHA+SWYgeW91IGhhdmUgYW4gaWRlYSBmb3IgeW91ciBvd24gc3BlZS5jaC1saWtlIHNpdGUgb24gdG9wIG9mIExCUlksIGZvcmsgb3VyIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL2xicnlpby9zcGVlLmNoJz5naXRodWIgcmVwbzwvYT4gYW5kIGdvIHRvIHRvd24hPC9wPlxuICAgICAgICAgICAgICA8cD5JZiB5b3Ugd2FudCB0byBpbXByb3ZlIHNwZWUuY2gsIGpvaW4gb3VyIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgaHJlZj0naHR0cHM6Ly9kaXNjb3JkLmdnL1lqWWJ3aFMnPmRpc2NvcmQgY2hhbm5lbDwvYT4gb3Igc29sdmUgb25lIG9mIG91ciA8YSBjbGFzc05hbWU9J2xpbmstLXByaW1hcnknIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9sYnJ5aW8vc3BlZS5jaC9pc3N1ZXMnPmdpdGh1YiBpc3N1ZXM8L2E+LjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFib3V0UGFnZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9wYWdlcy9BYm91dFBhZ2UvaW5kZXguanN4IiwiaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBjaGFubmVsIH0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBsb2dnZWRJbkNoYW5uZWxOYW1lOiBjaGFubmVsLmxvZ2dlZEluQ2hhbm5lbC5uYW1lLFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG51bGwpKFZpZXcpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3BhZ2VzL0xvZ2luUGFnZS9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgU0VPIGZyb20gJ2NvbXBvbmVudHMvU0VPJztcbmltcG9ydCBOYXZCYXIgZnJvbSAnY29udGFpbmVycy9OYXZCYXInO1xuaW1wb3J0IENoYW5uZWxMb2dpbkZvcm0gZnJvbSAnY29udGFpbmVycy9DaGFubmVsTG9naW5Gb3JtJztcbmltcG9ydCBDaGFubmVsQ3JlYXRlRm9ybSBmcm9tICdjb250YWluZXJzL0NoYW5uZWxDcmVhdGVGb3JtJztcblxuY2xhc3MgTG9naW5QYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAobmV3UHJvcHMpIHtcbiAgICAvLyByZS1yb3V0ZSB0aGUgdXNlciB0byB0aGUgaG9tZXBhZ2UgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkIGluXG4gICAgaWYgKG5ld1Byb3BzLmxvZ2dlZEluQ2hhbm5lbE5hbWUgIT09IHRoaXMucHJvcHMubG9nZ2VkSW5DaGFubmVsTmFtZSkge1xuICAgICAgdGhpcy5wcm9wcy5oaXN0b3J5LnB1c2goYC9gKTtcbiAgICB9XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgPFNFTyBwYWdlVGl0bGU9eydMb2dpbid9IHBhZ2VVcmk9eydsb2dpbid9IC8+XG4gICAgICAgIDxOYXZCYXIgLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCc+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTUgY29sdW1uLS1tZWQtMTAgYWxpZ24tY29udGVudC10b3AnPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTggY29sdW1uLS1tZWQtMTAnPlxuICAgICAgICAgICAgICA8cD5DaGFubmVscyBhbGxvdyB5b3UgdG8gcHVibGlzaCBhbmQgZ3JvdXAgY29udGVudCB1bmRlciBhbiBpZGVudGl0eS4gWW91IGNhbiBjcmVhdGUgYSBjaGFubmVsIGZvciB5b3Vyc2VsZiwgb3Igc2hhcmUgb25lIHdpdGggbGlrZS1taW5kZWQgZnJpZW5kcy4gIFlvdSBjYW4gY3JlYXRlIDEgY2hhbm5lbCwgb3IgMTAwLCBzbyB3aGV0aGVyIHlvdSdyZSA8YSBjbGFzc05hbWU9J2xpbmstLXByaW1hcnknIHRhcmdldD0nX2JsYW5rJyBocmVmPScvQGNhdGFsb25pYTIwMTc6NDNkY2Y0NzE2M2NhYTIxZDg0MDRkOWZlOWIzMGY3OGVmM2UxNDZhOCc+ZG9jdW1lbnRpbmcgaW1wb3J0YW50IGV2ZW50czwvYT4sIG9yIG1ha2luZyBhIHB1YmxpYyByZXBvc2l0b3J5IGZvciA8YSBjbGFzc05hbWU9J2xpbmstLXByaW1hcnknIHRhcmdldD0nX2JsYW5rJyBocmVmPScvQGNhdEdpZnMnPmNhdCBnaWZzPC9hPiAocGFzc3dvcmQ6ICcxMjM0JyksIHRyeSBjcmVhdGluZyBhIGNoYW5uZWwgZm9yIGl0ITwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PjxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS01IGNvbHVtbi0tbWVkLTEwIGFsaWduLWNvbnRlbnQtdG9wJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS04IGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT0naDMtLW5vLWJvdHRvbSc+TG9nIGluIHRvIGFuIGV4aXN0aW5nIGNoYW5uZWw6PC9oMz5cbiAgICAgICAgICAgICAgPENoYW5uZWxMb2dpbkZvcm0gLz5cbiAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT0naDMtLW5vLWJvdHRvbSc+Q3JlYXRlIGEgYnJhbmQgbmV3IGNoYW5uZWw6PC9oMz5cbiAgICAgICAgICAgICAgPENoYW5uZWxDcmVhdGVGb3JtIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKExvZ2luUGFnZSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvcGFnZXMvTG9naW5QYWdlL3ZpZXcuanN4IiwiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG9uSGFuZGxlU2hvd1BhZ2VVcmkgfSBmcm9tICdhY3Rpb25zL3Nob3cnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgc2hvdyB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgZXJyb3IgICAgICA6IHNob3cucmVxdWVzdC5lcnJvcixcbiAgICByZXF1ZXN0VHlwZTogc2hvdy5yZXF1ZXN0LnR5cGUsXG4gIH07XG59O1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSB7XG4gIG9uSGFuZGxlU2hvd1BhZ2VVcmksXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9wYWdlcy9TaG93UGFnZS9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRXJyb3JQYWdlIGZyb20gJ3BhZ2VzL0Vycm9yUGFnZSc7XG5pbXBvcnQgU2hvd0Fzc2V0TGl0ZSBmcm9tICdjb250YWluZXJzL1Nob3dBc3NldExpdGUnO1xuaW1wb3J0IFNob3dBc3NldERldGFpbHMgZnJvbSAnY29udGFpbmVycy9TaG93QXNzZXREZXRhaWxzJztcbmltcG9ydCBTaG93Q2hhbm5lbCBmcm9tICdjb250YWluZXJzL1Nob3dDaGFubmVsJztcblxuaW1wb3J0IHsgQ0hBTk5FTCwgQVNTRVRfTElURSwgQVNTRVRfREVUQUlMUyB9IGZyb20gJ2NvbnN0YW50cy9zaG93X3JlcXVlc3RfdHlwZXMnO1xuXG5jbGFzcyBTaG93UGFnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICB0aGlzLnByb3BzLm9uSGFuZGxlU2hvd1BhZ2VVcmkodGhpcy5wcm9wcy5tYXRjaC5wYXJhbXMpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgKG5leHRQcm9wcykge1xuICAgIGlmIChuZXh0UHJvcHMubWF0Y2gucGFyYW1zICE9PSB0aGlzLnByb3BzLm1hdGNoLnBhcmFtcykge1xuICAgICAgdGhpcy5wcm9wcy5vbkhhbmRsZVNob3dQYWdlVXJpKG5leHRQcm9wcy5tYXRjaC5wYXJhbXMpO1xuICAgIH1cbiAgfVxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHsgZXJyb3IsIHJlcXVlc3RUeXBlIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEVycm9yUGFnZSBlcnJvcj17ZXJyb3J9IC8+XG4gICAgICApO1xuICAgIH1cbiAgICBzd2l0Y2ggKHJlcXVlc3RUeXBlKSB7XG4gICAgICBjYXNlIENIQU5ORUw6XG4gICAgICAgIHJldHVybiA8U2hvd0NoYW5uZWwgLz47XG4gICAgICBjYXNlIEFTU0VUX0xJVEU6XG4gICAgICAgIHJldHVybiA8U2hvd0Fzc2V0TGl0ZSAvPjtcbiAgICAgIGNhc2UgQVNTRVRfREVUQUlMUzpcbiAgICAgICAgcmV0dXJuIDxTaG93QXNzZXREZXRhaWxzIC8+O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIDxwPmxvYWRpbmcuLi48L3A+O1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgU2hvd1BhZ2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvcGFnZXMvU2hvd1BhZ2Uvdmlldy5qc3giLCJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgc2hvdyB9KSA9PiB7XG4gIC8vIHNlbGVjdCByZXF1ZXN0IGluZm9cbiAgY29uc3QgcmVxdWVzdElkID0gc2hvdy5yZXF1ZXN0LmlkO1xuICAvLyBzZWxlY3QgYXNzZXQgaW5mb1xuICBsZXQgYXNzZXQ7XG4gIGNvbnN0IHJlcXVlc3QgPSBzaG93LnJlcXVlc3RMaXN0W3JlcXVlc3RJZF0gfHwgbnVsbDtcbiAgY29uc3QgYXNzZXRMaXN0ID0gc2hvdy5hc3NldExpc3Q7XG4gIGlmIChyZXF1ZXN0ICYmIGFzc2V0TGlzdCkge1xuICAgIGNvbnN0IGFzc2V0S2V5ID0gcmVxdWVzdC5rZXk7ICAvLyBub3RlOiBqdXN0IHN0b3JlIHRoaXMgaW4gdGhlIHJlcXVlc3RcbiAgICBhc3NldCA9IGFzc2V0TGlzdFthc3NldEtleV0gfHwgbnVsbDtcbiAgfTtcbiAgLy8gcmV0dXJuIHByb3BzXG4gIHJldHVybiB7XG4gICAgYXNzZXQsXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbnVsbCkoVmlldyk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9TaG93QXNzZXRMaXRlL2luZGV4LmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTRU8gZnJvbSAnY29tcG9uZW50cy9TRU8nO1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IEFzc2V0RGlzcGxheSBmcm9tICdjb250YWluZXJzL0Fzc2V0RGlzcGxheSc7XG5cbmNsYXNzIFNob3dMaXRlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7IGFzc2V0IH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChhc3NldCkge1xuICAgICAgY29uc3QgeyBuYW1lLCBjbGFpbUlkIH0gPSBhc3NldC5jbGFpbURhdGE7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tdGFsbCBmbGV4LWNvbnRhaW5lci0tY29sdW1uIGZsZXgtY29udGFpbmVyLS1jZW50ZXItY2VudGVyIHNob3ctbGl0ZS1jb250YWluZXInPlxuICAgICAgICAgIDxTRU8gcGFnZVRpdGxlPXtuYW1lfSBhc3NldD17YXNzZXR9IC8+XG4gICAgICAgICAgPEFzc2V0RGlzcGxheSAvPlxuICAgICAgICAgIDxMaW5rIGlkPSdhc3NldC1ib2lsZXJwYXRlJyBjbGFzc05hbWU9J2xpbmstLXByaW1hcnkgZmluZS1wcmludCcgdG89e2AvJHtjbGFpbUlkfS8ke25hbWV9YH0+aG9zdGVkXG4gICAgICAgICAgICB2aWEgU3BlZS5jaDwvTGluaz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXRhbGwgcm93LS1wYWRkZWQgZmxleC1jb250YWluZXItLWNvbHVtbiBmbGV4LWNvbnRhaW5lci0tY2VudGVyLWNlbnRlcic+XG4gICAgICAgIDxwPmxvYWRpbmcgYXNzZXQgZGF0YS4uLjwvcD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNob3dMaXRlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvU2hvd0Fzc2V0TGl0ZS92aWV3LmpzeCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvZ3Jlc3NCYXIgZnJvbSAnY29tcG9uZW50cy9Qcm9ncmVzc0Jhcic7XG5pbXBvcnQgeyBMT0NBTF9DSEVDSywgVU5BVkFJTEFCTEUsIEVSUk9SLCBBVkFJTEFCTEUgfSBmcm9tICdjb25zdGFudHMvYXNzZXRfZGlzcGxheV9zdGF0ZXMnO1xuXG5jbGFzcyBBc3NldERpc3BsYXkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgY29uc3QgeyBhc3NldDogeyBjbGFpbURhdGE6IHsgbmFtZSwgY2xhaW1JZCB9IH0gfSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy5wcm9wcy5vbkZpbGVSZXF1ZXN0KG5hbWUsIGNsYWltSWQpO1xuICB9XG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3QgeyBzdGF0dXMsIGVycm9yLCBhc3NldDogeyBjbGFpbURhdGE6IHsgbmFtZSwgY2xhaW1JZCwgY29udGVudFR5cGUsIGZpbGVFeHQsIHRodW1ibmFpbCB9IH0gfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgaWQ9J2Fzc2V0LWRpc3BsYXktY29tcG9uZW50Jz5cbiAgICAgICAgeyhzdGF0dXMgPT09IExPQ0FMX0NIRUNLKSAmJlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxwPkNoZWNraW5nIHRvIHNlZSBpZiBTcGVlLmNoIGhhcyB5b3VyIGFzc2V0IGxvY2FsbHkuLi48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIHsoc3RhdHVzID09PSBVTkFWQUlMQUJMRSkgJiZcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cD5TaXQgdGlnaHQsIHdlJ3JlIHNlYXJjaGluZyB0aGUgTEJSWSBibG9ja2NoYWluIGZvciB5b3VyIGFzc2V0ITwvcD5cbiAgICAgICAgICA8UHJvZ3Jlc3NCYXIgc2l6ZT17MTJ9IC8+XG4gICAgICAgICAgPHA+Q3VyaW91cyB3aGF0IG1hZ2ljIGlzIGhhcHBlbmluZyBoZXJlPyA8YSBjbGFzc05hbWU9J2xpbmstLXByaW1hcnknIHRhcmdldD0nYmxhbmsnIGhyZWY9J2h0dHBzOi8vbGJyeS5pby9mYXEvd2hhdC1pcy1sYnJ5Jz5MZWFybiBtb3JlLjwvYT48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIHsoc3RhdHVzID09PSBFUlJPUikgJiZcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cD5VbmZvcnR1bmF0ZWx5LCB3ZSBjb3VsZG4ndCBkb3dubG9hZCB5b3VyIGFzc2V0IGZyb20gTEJSWS4gIFlvdSBjYW4gaGVscCB1cyBvdXQgYnkgc2hhcmluZyB0aGUgYmVsb3cgZXJyb3IgbWVzc2FnZSBpbiB0aGUgPGEgY2xhc3NOYW1lPSdsaW5rLS1wcmltYXJ5JyBocmVmPSdodHRwczovL2Rpc2NvcmQuZ2cvWWpZYndoUycgdGFyZ2V0PSdfYmxhbmsnPkxCUlkgZGlzY29yZDwvYT4uPC9wPlxuICAgICAgICAgIDxpPjxwIGlkPSdlcnJvci1tZXNzYWdlJz57ZXJyb3J9PC9wPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgeyhzdGF0dXMgPT09IEFWQUlMQUJMRSkgJiZcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdpbWFnZS9qcGVnJzpcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlL2pwZyc6XG4gICAgICAgICAgICBjYXNlICdpbWFnZS9wbmcnOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nYXNzZXQnXG4gICAgICAgICAgICAgICAgICBzcmM9e2AvJHtjbGFpbUlkfS8ke25hbWV9LiR7ZmlsZUV4dH1gfVxuICAgICAgICAgICAgICAgICAgYWx0PXtuYW1lfSAvPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSAnaW1hZ2UvZ2lmJzpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9J2Fzc2V0J1xuICAgICAgICAgICAgICAgICAgc3JjPXtgLyR7Y2xhaW1JZH0vJHtuYW1lfS4ke2ZpbGVFeHR9YH1cbiAgICAgICAgICAgICAgICAgIGFsdD17bmFtZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSAndmlkZW8vbXA0JzpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dmlkZW8gY2xhc3NOYW1lPSdhc3NldCB2aWRlbycgY29udHJvbHMgcG9zdGVyPXt0aHVtYm5haWx9PlxuICAgICAgICAgICAgICAgICAgPHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICBzcmM9e2AvJHtjbGFpbUlkfS8ke25hbWV9LiR7ZmlsZUV4dH1gfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxwPllvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSA8Y29kZT52aWRlbzwvY29kZT4gZWxlbWVudC48L3A+XG4gICAgICAgICAgICAgICAgPC92aWRlbz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHA+VW5zdXBwb3J0ZWQgZmlsZSB0eXBlPC9wPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBc3NldERpc3BsYXk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9Bc3NldERpc3BsYXkvdmlldy5qc3giLCJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgc2hvdyB9KSA9PiB7XG4gIC8vIHNlbGVjdCByZXF1ZXN0IGluZm9cbiAgY29uc3QgcmVxdWVzdElkID0gc2hvdy5yZXF1ZXN0LmlkO1xuICAvLyBzZWxlY3QgYXNzZXQgaW5mb1xuICBsZXQgYXNzZXQ7XG4gIGNvbnN0IHJlcXVlc3QgPSBzaG93LnJlcXVlc3RMaXN0W3JlcXVlc3RJZF0gfHwgbnVsbDtcbiAgY29uc3QgYXNzZXRMaXN0ID0gc2hvdy5hc3NldExpc3Q7XG4gIGlmIChyZXF1ZXN0ICYmIGFzc2V0TGlzdCkge1xuICAgIGNvbnN0IGFzc2V0S2V5ID0gcmVxdWVzdC5rZXk7ICAvLyBub3RlOiBqdXN0IHN0b3JlIHRoaXMgaW4gdGhlIHJlcXVlc3RcbiAgICBhc3NldCA9IGFzc2V0TGlzdFthc3NldEtleV0gfHwgbnVsbDtcbiAgfTtcbiAgLy8gcmV0dXJuIHByb3BzXG4gIHJldHVybiB7XG4gICAgYXNzZXQsXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbnVsbCkoVmlldyk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9TaG93QXNzZXREZXRhaWxzL2luZGV4LmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTRU8gZnJvbSAnY29tcG9uZW50cy9TRU8nO1xuaW1wb3J0IE5hdkJhciBmcm9tICdjb250YWluZXJzL05hdkJhcic7XG5pbXBvcnQgRXJyb3JQYWdlIGZyb20gJ3BhZ2VzL0Vycm9yUGFnZSc7XG5pbXBvcnQgQXNzZXRUaXRsZSBmcm9tICdjb250YWluZXJzL0Fzc2V0VGl0bGUnO1xuaW1wb3J0IEFzc2V0RGlzcGxheSBmcm9tICdjb250YWluZXJzL0Fzc2V0RGlzcGxheSc7XG5pbXBvcnQgQXNzZXRJbmZvIGZyb20gJ2NvbnRhaW5lcnMvQXNzZXRJbmZvJztcblxuY2xhc3MgU2hvd0Fzc2V0RGV0YWlscyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3QgeyBhc3NldCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoYXNzZXQpIHtcbiAgICAgIGNvbnN0IHsgY2xhaW1EYXRhOiB7IG5hbWUgfSB9ID0gYXNzZXQ7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxTRU8gcGFnZVRpdGxlPXtgJHtuYW1lfSAtIGRldGFpbHNgfSBhc3NldD17YXNzZXR9IC8+XG4gICAgICAgICAgPE5hdkJhciAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS10YWxsIHJvdy0tcGFkZGVkJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0xMCc+XG4gICAgICAgICAgICAgIDxBc3NldFRpdGxlIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS01IGNvbHVtbi0tc21sLTEwIGFsaWduLWNvbnRlbnQtdG9wJz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCBzaG93LWRldGFpbHMtY29udGFpbmVyJz5cbiAgICAgICAgICAgICAgICA8QXNzZXREaXNwbGF5IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTUgY29sdW1uLS1zbWwtMTAgYWxpZ24tY29udGVudC10b3AnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tcGFkZGVkJz5cbiAgICAgICAgICAgICAgICA8QXNzZXRJbmZvIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICA8RXJyb3JQYWdlIGVycm9yPXsnbG9hZGluZyBhc3NldCBkYXRhLi4uJ30gLz5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTaG93QXNzZXREZXRhaWxzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvU2hvd0Fzc2V0RGV0YWlscy92aWV3LmpzeCIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuaW1wb3J0IHsgc2VsZWN0QXNzZXQgfSBmcm9tICdzZWxlY3RvcnMvc2hvdyc7XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9ICh7IHNob3cgfSkgPT4ge1xuICBjb25zdCB7IGNsYWltRGF0YTogeyB0aXRsZSB9IH0gPSBzZWxlY3RBc3NldChzaG93KTtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBudWxsKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0Fzc2V0VGl0bGUvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBBc3NldFRpdGxlID0gKHsgdGl0bGUgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9J3RleHQtLWxhcmdlJz57dGl0bGV9PC9zcGFuPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXNzZXRUaXRsZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0Fzc2V0VGl0bGUvdmlldy5qc3giLCJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcbmltcG9ydCB7IHNlbGVjdEFzc2V0IH0gZnJvbSAnc2VsZWN0b3JzL3Nob3cnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBzaG93IH0pID0+IHtcbiAgLy8gc2VsZWN0IGFzc2V0XG4gIGNvbnN0IGFzc2V0ID0gc2VsZWN0QXNzZXQoc2hvdyk7XG4gIC8vICByZXR1cm4gcHJvcHNcbiAgcmV0dXJuIHtcbiAgICBhc3NldCxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBudWxsKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0Fzc2V0SW5mby9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5cbmNsYXNzIEFzc2V0SW5mbyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNvcHlUb0NsaXBib2FyZCA9IHRoaXMuY29weVRvQ2xpcGJvYXJkLmJpbmQodGhpcyk7XG4gIH1cbiAgY29weVRvQ2xpcGJvYXJkIChldmVudCkge1xuICAgIHZhciBlbGVtZW50VG9Db3B5ID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuZWxlbWVudHRvY29weTtcbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRUb0NvcHkpO1xuICAgIGVsZW1lbnQuc2VsZWN0KCk7XG4gICAgdHJ5IHtcbiAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtlcnJvcjogJ09vcHMsIHVuYWJsZSB0byBjb3B5J30pO1xuICAgIH1cbiAgfVxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHsgYXNzZXQ6IHsgc2hvcnRJZCwgY2xhaW1EYXRhIDogeyBjaGFubmVsTmFtZSwgY2VydGlmaWNhdGVJZCwgZGVzY3JpcHRpb24sIG5hbWUsIGNsYWltSWQsIGZpbGVFeHQsIGNvbnRlbnRUeXBlLCB0aHVtYm5haWwsIGhvc3QgfSB9IH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2PlxuICAgICAgICB7Y2hhbm5lbE5hbWUgJiZcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCByb3ctLXdpZGUgcm93LS1uby10b3AnPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0yIGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ndGV4dCc+Q2hhbm5lbDo8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTggY29sdW1uLS1tZWQtMTAnPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSd0ZXh0Jz48TGluayB0bz17YC8ke2NoYW5uZWxOYW1lfToke2NlcnRpZmljYXRlSWR9YH0+e2NoYW5uZWxOYW1lfTwvTGluaz48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAge2Rlc2NyaXB0aW9uICYmXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS1wYWRkZWQgcm93LS13aWRlIHJvdy0tbm8tdG9wJz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J3RleHQnPntkZXNjcmlwdGlvbn08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiBpZD0nc2hvdy1zaGFyZS1idXR0b25zJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tcGFkZGVkIHJvdy0td2lkZSByb3ctLW5vLXRvcCc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tMiBjb2x1bW4tLW1lZC0xMCc+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ndGV4dCc+U2hhcmU6PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tOCBjb2x1bW4tLW1lZC0xMCc+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9J3JvdyByb3ctLXNob3J0IHJvdy0td2lkZSBmbGV4LWNvbnRhaW5lci0tcm93IGZsZXgtY29udGFpbmVyLS1zcGFjZS1iZXR3ZWVuLWJvdHRvbSBmbGV4LWNvbnRhaW5lci0td3JhcCc+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPSdsaW5rLS1wcmltYXJ5JyB0YXJnZXQ9J19ibGFuaycgaHJlZj17YGh0dHBzOi8vdHdpdHRlci5jb20vaW50ZW50L3R3ZWV0P3RleHQ9JHtob3N0fS8ke3Nob3J0SWR9LyR7bmFtZX1gfT50d2l0dGVyPC9hPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9e2BodHRwczovL3d3dy5mYWNlYm9vay5jb20vc2hhcmVyL3NoYXJlci5waHA/dT0ke2hvc3R9LyR7c2hvcnRJZH0vJHtuYW1lfWB9PmZhY2Vib29rPC9hPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9e2BodHRwOi8vdHVtYmxyLmNvbS93aWRnZXRzL3NoYXJlL3Rvb2w/Y2Fub25pY2FsVXJsPSR7aG9zdH0vJHtzaG9ydElkfS8ke25hbWV9YH0+dHVtYmxyPC9hPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9e2BodHRwczovL3d3dy5yZWRkaXQuY29tL3N1Ym1pdD91cmw9JHtob3N0fS8ke3Nob3J0SWR9LyR7bmFtZX0mdGl0bGU9JHtuYW1lfWB9PnJlZGRpdDwvYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCByb3ctLXdpZGUgcm93LS1uby10b3AnPlxuICAgICAgICAgIDxkaXYgaWQ9J3Nob3ctc2hvcnQtbGluayc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tMiBjb2x1bW4tLW1lZC0xMCc+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ndGV4dCc+TGluazo8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS04IGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXNob3J0IHJvdy0td2lkZSc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTcnPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2lucHV0LWVycm9yJyBpZD0naW5wdXQtZXJyb3ItY29weS1zaG9ydC1saW5rJyBoaWRkZW49J3RydWUnPmVycm9yIGhlcmU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nc2hvcnQtbGluaycgY2xhc3NOYW1lPSdpbnB1dC1kaXNhYmxlZCBpbnB1dC10ZXh0LS1mdWxsLXdpZHRoJyByZWFkT25seVxuICAgICAgICAgICAgICAgICAgICBzcGVsbENoZWNrPSdmYWxzZSdcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Ake2hvc3R9LyR7c2hvcnRJZH0vJHtuYW1lfS4ke2ZpbGVFeHR9YH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5zZWxlY3R9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTEnIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTInPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9J2J1dHRvbi0tcHJpbWFyeSBidXR0b24tLXdpZGUnIGRhdGEtZWxlbWVudHRvY29weT0nc2hvcnQtbGluaydcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5jb3B5VG9DbGlwYm9hcmR9PmNvcHlcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBpZD0nc2hvdy1lbWJlZC1jb2RlJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0yIGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSd0ZXh0Jz5FbWJlZDo8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS04IGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXNob3J0IHJvdy0td2lkZSc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTcnPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2lucHV0LWVycm9yJyBpZD0naW5wdXQtZXJyb3ItY29weS1lbWJlZC10ZXh0JyBoaWRkZW49J3RydWUnPmVycm9yIGhlcmU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIHsoY29udGVudFR5cGUgPT09ICd2aWRlby9tcDQnKSA/IChcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9J3RleHQnIGlkPSdlbWJlZC10ZXh0JyBjbGFzc05hbWU9J2lucHV0LWRpc2FibGVkIGlucHV0LXRleHQtLWZ1bGwtd2lkdGgnIHJlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5zZWxlY3R9IHNwZWxsQ2hlY2s9J2ZhbHNlJ1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtgPHZpZGVvIHdpZHRoPVwiMTAwJVwiIGNvbnRyb2xzIHBvc3Rlcj1cIiR7dGh1bWJuYWlsfVwiIHNyYz1cIiR7aG9zdH0vJHtjbGFpbUlkfS8ke25hbWV9LiR7ZmlsZUV4dH1cIi8+PC92aWRlbz5gfSAvPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9J3RleHQnIGlkPSdlbWJlZC10ZXh0JyBjbGFzc05hbWU9J2lucHV0LWRpc2FibGVkIGlucHV0LXRleHQtLWZ1bGwtd2lkdGgnIHJlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5zZWxlY3R9IHNwZWxsQ2hlY2s9J2ZhbHNlJ1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtgPGltZyBzcmM9XCIke2hvc3R9LyR7Y2xhaW1JZH0vJHtuYW1lfS4ke2ZpbGVFeHR9XCIvPmB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0xJyAvPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0yJz5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSdidXR0b24tLXByaW1hcnkgYnV0dG9uLS13aWRlJyBkYXRhLWVsZW1lbnR0b2NvcHk9J2VtYmVkLXRleHQnXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuY29weVRvQ2xpcGJvYXJkfT5jb3B5XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J2ZsZXgtY29udGFpbmVyLS1yb3cgZmxleC1jb250YWluZXItLXNwYWNlLWJldHdlZW4tYm90dG9tJz5cbiAgICAgICAgICA8TGluayBjbGFzc05hbWU9J2xpbmstLXByaW1hcnknIHRvPXtgLyR7c2hvcnRJZH0vJHtuYW1lfS4ke2ZpbGVFeHR9YH0+PHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT0ndGV4dCc+RGlyZWN0IExpbms8L3NwYW4+PC9MaW5rPlxuICAgICAgICAgIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgaHJlZj17YCR7aG9zdH0vJHtjbGFpbUlkfS8ke25hbWV9LiR7ZmlsZUV4dH1gfSBkb3dubG9hZD17bmFtZX0+RG93bmxvYWQ8L2E+XG4gICAgICAgICAgPGEgY2xhc3NOYW1lPSdsaW5rLS1wcmltYXJ5JyB0YXJnZXQ9J19ibGFuaycgaHJlZj0naHR0cHM6Ly9sYnJ5LmlvL2RtY2EnPlJlcG9ydDwvYT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFzc2V0SW5mbztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0Fzc2V0SW5mby92aWV3LmpzeCIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBzaG93IH0pID0+IHtcbiAgLy8gc2VsZWN0IHJlcXVlc3QgaW5mb1xuICBjb25zdCByZXF1ZXN0SWQgPSBzaG93LnJlcXVlc3QuaWQ7XG4gIC8vIHNlbGVjdCByZXF1ZXN0XG4gIGNvbnN0IHByZXZpb3VzUmVxdWVzdCA9IHNob3cucmVxdWVzdExpc3RbcmVxdWVzdElkXSB8fCBudWxsO1xuICAvLyBzZWxlY3QgY2hhbm5lbFxuICBsZXQgY2hhbm5lbDtcbiAgaWYgKHByZXZpb3VzUmVxdWVzdCkge1xuICAgIGNvbnN0IGNoYW5uZWxLZXkgPSBwcmV2aW91c1JlcXVlc3Qua2V5O1xuICAgIGNoYW5uZWwgPSBzaG93LmNoYW5uZWxMaXN0W2NoYW5uZWxLZXldIHx8IG51bGw7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjaGFubmVsLFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG51bGwpKFZpZXcpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvU2hvd0NoYW5uZWwvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNFTyBmcm9tICdjb21wb25lbnRzL1NFTyc7XG5pbXBvcnQgRXJyb3JQYWdlIGZyb20gJ3BhZ2VzL0Vycm9yUGFnZSc7XG5pbXBvcnQgTmF2QmFyIGZyb20gJ2NvbnRhaW5lcnMvTmF2QmFyJztcbmltcG9ydCBDaGFubmVsQ2xhaW1zRGlzcGxheSBmcm9tICdjb250YWluZXJzL0NoYW5uZWxDbGFpbXNEaXNwbGF5JztcblxuY2xhc3MgU2hvd0NoYW5uZWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHsgY2hhbm5lbCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgY29uc3QgeyBuYW1lLCBsb25nSWQsIHNob3J0SWQgfSA9IGNoYW5uZWw7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxTRU8gcGFnZVRpdGxlPXtuYW1lfSBjaGFubmVsPXtjaGFubmVsfSAvPlxuICAgICAgICAgIDxOYXZCYXIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tdGFsbCByb3ctLXBhZGRlZCc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tMTAnPlxuICAgICAgICAgICAgICA8aDI+Y2hhbm5lbCBuYW1lOiB7bmFtZX08L2gyPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9eydmaW5lLXByaW50J30+ZnVsbCBjaGFubmVsIGlkOiB7bG9uZ0lkfTwvcD5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXsnZmluZS1wcmludCd9PnNob3J0IGNoYW5uZWwgaWQ6IHtzaG9ydElkfTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTEwJz5cbiAgICAgICAgICAgICAgPENoYW5uZWxDbGFpbXNEaXNwbGF5IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxFcnJvclBhZ2UgZXJyb3I9eydsb2FkaW5nIGNoYW5uZWwgZGF0YS4uLid9IC8+XG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgU2hvd0NoYW5uZWw7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9TaG93Q2hhbm5lbC92aWV3LmpzeCIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBvblVwZGF0ZUNoYW5uZWxDbGFpbXMgfSBmcm9tICdhY3Rpb25zL3Nob3cnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgc2hvdyB9KSA9PiB7XG4gIC8vIHNlbGVjdCBjaGFubmVsIGtleVxuICBjb25zdCByZXF1ZXN0ID0gc2hvdy5yZXF1ZXN0TGlzdFtzaG93LnJlcXVlc3QuaWRdO1xuICBjb25zdCBjaGFubmVsS2V5ID0gcmVxdWVzdC5rZXk7XG4gIC8vIHNlbGVjdCBjaGFubmVsIGNsYWltc1xuICBjb25zdCBjaGFubmVsID0gc2hvdy5jaGFubmVsTGlzdFtjaGFubmVsS2V5XSB8fCBudWxsO1xuICAvLyByZXR1cm4gcHJvcHNcbiAgcmV0dXJuIHtcbiAgICBjaGFubmVsS2V5LFxuICAgIGNoYW5uZWwsXG4gIH07XG59O1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSB7XG4gIG9uVXBkYXRlQ2hhbm5lbENsYWltcyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMpKFZpZXcpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvQ2hhbm5lbENsYWltc0Rpc3BsYXkvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzc2V0UHJldmlldyBmcm9tICdjb21wb25lbnRzL0Fzc2V0UHJldmlldyc7XG5cbmNsYXNzIENoYW5uZWxDbGFpbXNEaXNwbGF5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc2hvd05leHRSZXN1bHRzUGFnZSA9IHRoaXMuc2hvd05leHRSZXN1bHRzUGFnZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc2hvd1ByZXZpb3VzUmVzdWx0c1BhZ2UgPSB0aGlzLnNob3dQcmV2aW91c1Jlc3VsdHNQYWdlLmJpbmQodGhpcyk7XG4gIH1cbiAgc2hvd1ByZXZpb3VzUmVzdWx0c1BhZ2UgKCkge1xuICAgIGNvbnN0IHsgY2hhbm5lbDogeyBjbGFpbXNEYXRhOiB7IGN1cnJlbnRQYWdlIH0gfSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwcmV2aW91c1BhZ2UgPSBwYXJzZUludChjdXJyZW50UGFnZSkgLSAxO1xuICAgIHRoaXMuc2hvd05ld1BhZ2UocHJldmlvdXNQYWdlKTtcbiAgfVxuICBzaG93TmV4dFJlc3VsdHNQYWdlICgpIHtcbiAgICBjb25zdCB7IGNoYW5uZWw6IHsgY2xhaW1zRGF0YTogeyBjdXJyZW50UGFnZSB9IH0gfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgbmV4dFBhZ2UgPSBwYXJzZUludChjdXJyZW50UGFnZSkgKyAxO1xuICAgIHRoaXMuc2hvd05ld1BhZ2UobmV4dFBhZ2UpO1xuICB9XG4gIHNob3dOZXdQYWdlIChwYWdlKSB7XG4gICAgY29uc3QgeyBjaGFubmVsS2V5LCBjaGFubmVsOiB7IG5hbWUsIGxvbmdJZCB9IH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMucHJvcHMub25VcGRhdGVDaGFubmVsQ2xhaW1zKGNoYW5uZWxLZXksIG5hbWUsIGxvbmdJZCwgcGFnZSk7XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7IGNoYW5uZWw6IHsgY2xhaW1zRGF0YTogeyBjbGFpbXMsIGN1cnJlbnRQYWdlLCB0b3RhbFBhZ2VzIH0gfSB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXRhbGwnPlxuICAgICAgICB7KGNsYWltcy5sZW5ndGggPiAwKSA/IChcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAge2NsYWltcy5tYXAoKGNsYWltLCBpbmRleCkgPT4gPEFzc2V0UHJldmlld1xuICAgICAgICAgICAgICBjbGFpbURhdGE9e2NsYWltfVxuICAgICAgICAgICAgICBrZXk9e2Ake2NsYWltLm5hbWV9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgIC8+KX1cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIHsoY3VycmVudFBhZ2UgPiAxKSAmJlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT17J2J1dHRvbi0tc2Vjb25kYXJ5J30gb25DbGljaz17dGhpcy5zaG93UHJldmlvdXNSZXN1bHRzUGFnZX0+UHJldmlvdXMgUGFnZTwvYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHsoY3VycmVudFBhZ2UgPCB0b3RhbFBhZ2VzKSAmJlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT17J2J1dHRvbi0tc2Vjb25kYXJ5J30gb25DbGljaz17dGhpcy5zaG93TmV4dFJlc3VsdHNQYWdlfT5OZXh0IFBhZ2U8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPHA+VGhlcmUgYXJlIG5vIGNsYWltcyBpbiB0aGlzIGNoYW5uZWw8L3A+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsQ2xhaW1zRGlzcGxheTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxDbGFpbXNEaXNwbGF5L3ZpZXcuanN4IiwiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBWaWV3IGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9ICh7c2l0ZToge2RlZmF1bHRzOiB7IGRlZmF1bHRUaHVtYm5haWwgfX19KSA9PiB7XG4gIHJldHVybiB7XG4gICAgZGVmYXVsdFRodW1ibmFpbCxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBudWxsKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb21wb25lbnRzL0Fzc2V0UHJldmlldy9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5cbmNvbnN0IEFzc2V0UHJldmlldyA9ICh7IGRlZmF1bHRUaHVtYm5haWwsIGNsYWltRGF0YTogeyBuYW1lLCBjbGFpbUlkLCBmaWxlRXh0LCBjb250ZW50VHlwZSwgdGh1bWJuYWlsIH0gfSkgPT4ge1xuICBjb25zdCBkaXJlY3RTb3VyY2VMaW5rID0gYCR7Y2xhaW1JZH0vJHtuYW1lfS4ke2ZpbGVFeHR9YDtcbiAgY29uc3Qgc2hvd1VybExpbmsgPSBgLyR7Y2xhaW1JZH0vJHtuYW1lfWA7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J2Fzc2V0LWhvbGRlcic+XG4gICAgICA8TGluayB0bz17c2hvd1VybExpbmt9ID5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnaW1hZ2UvanBlZyc6XG4gICAgICAgICAgICBjYXNlICdpbWFnZS9qcGcnOlxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlL2dpZic6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsnYXNzZXQtcHJldmlldyd9XG4gICAgICAgICAgICAgICAgICBzcmM9e2RpcmVjdFNvdXJjZUxpbmt9XG4gICAgICAgICAgICAgICAgICBhbHQ9e25hbWV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgJ3ZpZGVvL21wNCc6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsnYXNzZXQtcHJldmlldyB2aWRlbyd9XG4gICAgICAgICAgICAgICAgICBzcmM9e3RodW1ibmFpbCB8fCBkZWZhdWx0VGh1bWJuYWlsfVxuICAgICAgICAgICAgICAgICAgYWx0PXtuYW1lfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxwPnVuc3VwcG9ydGVkIGZpbGUgdHlwZTwvcD5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCl9XG4gICAgICA8L0xpbms+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBc3NldFByZXZpZXc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29tcG9uZW50cy9Bc3NldFByZXZpZXcvdmlldy5qc3giLCJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgc2l0ZTogeyBob3N0LCB0aXRsZSB9IH0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBob3N0LFxuICAgIHRpdGxlLFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG51bGwpKFZpZXcpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvRm91ck9oRm91clBhZ2UvaW5kZXguanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBOYXZCYXIgZnJvbSAnY29udGFpbmVycy9OYXZCYXInO1xuaW1wb3J0IEhlbG1ldCBmcm9tICdyZWFjdC1oZWxtZXQnO1xuXG5jbGFzcyBGb3VyT2hGb3JQYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7dGl0bGUsIGhvc3R9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgPEhlbG1ldD5cbiAgICAgICAgICA8dGl0bGU+e3RpdGxlfSAtIDQwNDwvdGl0bGU+XG4gICAgICAgICAgPGxpbmsgcmVsPSdjYW5vbmljYWwnIGhyZWY9e2Ake2hvc3R9LzQwNGB9IC8+XG4gICAgICAgIDwvSGVsbWV0PlxuICAgICAgICA8TmF2QmFyIC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS1wYWRkZWQnPlxuICAgICAgICAgIDxoMj40MDQ8L2gyPlxuICAgICAgICAgIDxwPlRoYXQgcGFnZSBkb2VzIG5vdCBleGlzdDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBGb3VyT2hGb3JQYWdlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvRm91ck9oRm91clBhZ2Uvdmlldy5qc3giLCJjb25zdCB7IHNlbmRHQVNlcnZlRXZlbnQgfSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvZ29vZ2xlQW5hbHl0aWNzJyk7XG5jb25zdCB7IGRldGVybWluZVJlc3BvbnNlVHlwZSwgZmxpcENsYWltTmFtZUFuZElkRm9yQmFja3dhcmRzQ29tcGF0aWJpbGl0eSwgbG9nUmVxdWVzdERhdGEsIGdldENsYWltSWRBbmRTZXJ2ZUFzc2V0IH0gPSByZXF1aXJlKCcuLi9oZWxwZXJzL3NlcnZlSGVscGVycy5qcycpO1xuY29uc3QgbGJyeVVyaSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbGJyeVVyaS5qcycpO1xuY29uc3QgaGFuZGxlU2hvd1JlbmRlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaGFuZGxlU2hvd1JlbmRlci5qc3gnKTtcbmNvbnN0IFNFUlZFID0gJ1NFUlZFJztcblxubW9kdWxlLmV4cG9ydHMgPSAoYXBwKSA9PiB7XG4gIC8vIHJvdXRlIHRvIHNlcnZlIGEgc3BlY2lmaWMgYXNzZXQgdXNpbmcgdGhlIGNoYW5uZWwgb3IgY2xhaW0gaWRcbiAgYXBwLmdldCgnLzppZGVudGlmaWVyLzpjbGFpbScsIChyZXEsIHJlcykgPT4ge1xuICAgIGNvbnN0IHsgaGVhZGVycywgaXAsIG9yaWdpbmFsVXJsLCBwYXJhbXMgfSA9IHJlcTtcbiAgICAvLyBkZWNpZGUgaWYgdGhpcyBpcyBhIHNob3cgcmVxdWVzdFxuICAgIGxldCBoYXNGaWxlRXh0ZW5zaW9uO1xuICAgIHRyeSB7XG4gICAgICAoeyBoYXNGaWxlRXh0ZW5zaW9uIH0gPSBsYnJ5VXJpLnBhcnNlTW9kaWZpZXIocGFyYW1zLmNsYWltKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbih7c3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2V9KTtcbiAgICB9XG4gICAgbGV0IHJlc3BvbnNlVHlwZSA9IGRldGVybWluZVJlc3BvbnNlVHlwZShoYXNGaWxlRXh0ZW5zaW9uLCBoZWFkZXJzKTtcbiAgICBpZiAocmVzcG9uc2VUeXBlICE9PSBTRVJWRSkge1xuICAgICAgcmV0dXJuIGhhbmRsZVNob3dSZW5kZXIocmVxLCByZXMpO1xuICAgIH1cbiAgICAvLyBoYW5kbGUgc2VydmUgcmVxdWVzdFxuICAgIC8vIHNlbmQgZ29vZ2xlIGFuYWx5dGljc1xuICAgIHNlbmRHQVNlcnZlRXZlbnQoaGVhZGVycywgaXAsIG9yaWdpbmFsVXJsKTtcbiAgICAvLyBwYXJzZSB0aGUgY2xhaW1cbiAgICBsZXQgY2xhaW1OYW1lO1xuICAgIHRyeSB7XG4gICAgICAoeyBjbGFpbU5hbWUgfSA9IGxicnlVcmkucGFyc2VDbGFpbShwYXJhbXMuY2xhaW0pKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAwKS5qc29uKHtzdWNjZXNzOiBmYWxzZSwgbWVzc2FnZTogZXJyb3IubWVzc2FnZX0pO1xuICAgIH1cbiAgICAvLyBwYXJzZSB0aGUgaWRlbnRpZmllclxuICAgIGxldCBpc0NoYW5uZWwsIGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCwgY2xhaW1JZDtcbiAgICB0cnkge1xuICAgICAgKHsgaXNDaGFubmVsLCBjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIGNsYWltSWQgfSA9IGxicnlVcmkucGFyc2VJZGVudGlmaWVyKHBhcmFtcy5pZGVudGlmaWVyKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbih7c3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2V9KTtcbiAgICB9XG4gICAgaWYgKCFpc0NoYW5uZWwpIHtcbiAgICAgIFtjbGFpbUlkLCBjbGFpbU5hbWVdID0gZmxpcENsYWltTmFtZUFuZElkRm9yQmFja3dhcmRzQ29tcGF0aWJpbGl0eShjbGFpbUlkLCBjbGFpbU5hbWUpO1xuICAgIH1cbiAgICAvLyBsb2cgdGhlIHJlcXVlc3QgZGF0YSBmb3IgZGVidWdnaW5nXG4gICAgbG9nUmVxdWVzdERhdGEocmVzcG9uc2VUeXBlLCBjbGFpbU5hbWUsIGNoYW5uZWxOYW1lLCBjbGFpbUlkKTtcbiAgICAvLyBnZXQgdGhlIGNsYWltIElkIGFuZCB0aGVuIHNlcnZlIHRoZSBhc3NldFxuICAgIGdldENsYWltSWRBbmRTZXJ2ZUFzc2V0KGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCwgY2xhaW1OYW1lLCBjbGFpbUlkLCBvcmlnaW5hbFVybCwgaXAsIHJlcyk7XG4gIH0pO1xuICAvLyByb3V0ZSB0byBzZXJ2ZSB0aGUgd2lubmluZyBhc3NldCBhdCBhIGNsYWltIG9yIGEgY2hhbm5lbCBwYWdlXG4gIGFwcC5nZXQoJy86Y2xhaW0nLCAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCB7IGhlYWRlcnMsIGlwLCBvcmlnaW5hbFVybCwgcGFyYW1zIH0gPSByZXE7XG4gICAgLy8gZGVjaWRlIGlmIHRoaXMgaXMgYSBzaG93IHJlcXVlc3RcbiAgICBsZXQgaGFzRmlsZUV4dGVuc2lvbjtcbiAgICB0cnkge1xuICAgICAgKHsgaGFzRmlsZUV4dGVuc2lvbiB9ID0gbGJyeVVyaS5wYXJzZU1vZGlmaWVyKHBhcmFtcy5jbGFpbSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oe3N1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgfVxuICAgIGxldCByZXNwb25zZVR5cGUgPSBkZXRlcm1pbmVSZXNwb25zZVR5cGUoaGFzRmlsZUV4dGVuc2lvbiwgaGVhZGVycyk7XG4gICAgaWYgKHJlc3BvbnNlVHlwZSAhPT0gU0VSVkUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVTaG93UmVuZGVyKHJlcSwgcmVzKTtcbiAgICB9XG4gICAgLy8gaGFuZGxlIHNlcnZlIHJlcXVlc3RcbiAgICAvLyBzZW5kIGdvb2dsZSBhbmFseXRpY3NcbiAgICBzZW5kR0FTZXJ2ZUV2ZW50KGhlYWRlcnMsIGlwLCBvcmlnaW5hbFVybCk7XG4gICAgLy8gcGFyc2UgdGhlIGNsYWltXG4gICAgbGV0IGNsYWltTmFtZTtcbiAgICB0cnkge1xuICAgICAgKHtjbGFpbU5hbWV9ID0gbGJyeVVyaS5wYXJzZUNsYWltKHBhcmFtcy5jbGFpbSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oe3N1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgfVxuICAgIC8vIGxvZyB0aGUgcmVxdWVzdCBkYXRhIGZvciBkZWJ1Z2dpbmdcbiAgICBsb2dSZXF1ZXN0RGF0YShyZXNwb25zZVR5cGUsIGNsYWltTmFtZSwgbnVsbCwgbnVsbCk7XG4gICAgLy8gZ2V0IHRoZSBjbGFpbSBJZCBhbmQgdGhlbiBzZXJ2ZSB0aGUgYXNzZXRcbiAgICBnZXRDbGFpbUlkQW5kU2VydmVBc3NldChudWxsLCBudWxsLCBjbGFpbU5hbWUsIG51bGwsIG9yaWdpbmFsVXJsLCBpcCwgcmVzKTtcbiAgfSk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL3JvdXRlcy9hc3NldC1yb3V0ZXMuanMiLCJjb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5jb25zdCB7IGdldENsYWltSWQsIGdldExvY2FsRmlsZVJlY29yZCB9ID0gcmVxdWlyZSgnLi4vY29udHJvbGxlcnMvc2VydmVDb250cm9sbGVyLmpzJyk7XG5jb25zdCB7IGhhbmRsZUVycm9yUmVzcG9uc2UgfSA9IHJlcXVpcmUoJy4vZXJyb3JIYW5kbGVycy5qcycpO1xuXG5jb25zdCBTRVJWRSA9ICdTRVJWRSc7XG5jb25zdCBTSE9XID0gJ1NIT1cnO1xuY29uc3QgTk9fRklMRSA9ICdOT19GSUxFJztcbmNvbnN0IE5PX0NIQU5ORUwgPSAnTk9fQ0hBTk5FTCc7XG5jb25zdCBOT19DTEFJTSA9ICdOT19DTEFJTSc7XG5cbmZ1bmN0aW9uIGNsaWVudEFjY2VwdHNIdG1sICh7YWNjZXB0fSkge1xuICByZXR1cm4gYWNjZXB0ICYmIGFjY2VwdC5tYXRjaCgvdGV4dFxcL2h0bWwvKTtcbn07XG5cbmZ1bmN0aW9uIHJlcXVlc3RJc0Zyb21Ccm93c2VyIChoZWFkZXJzKSB7XG4gIHJldHVybiBoZWFkZXJzWyd1c2VyLWFnZW50J10gJiYgaGVhZGVyc1sndXNlci1hZ2VudCddLm1hdGNoKC9Nb3ppbGxhLyk7XG59O1xuXG5mdW5jdGlvbiBjbGllbnRXYW50c0Fzc2V0ICh7YWNjZXB0LCByYW5nZX0pIHtcbiAgY29uc3QgaW1hZ2VJc1dhbnRlZCA9IGFjY2VwdCAmJiBhY2NlcHQubWF0Y2goL2ltYWdlXFwvLiovKSAmJiAhYWNjZXB0Lm1hdGNoKC90ZXh0XFwvaHRtbC8pICYmICFhY2NlcHQubWF0Y2goL3RleHRcXC9cXCovKTtcbiAgY29uc3QgdmlkZW9Jc1dhbnRlZCA9IGFjY2VwdCAmJiByYW5nZTtcbiAgcmV0dXJuIGltYWdlSXNXYW50ZWQgfHwgdmlkZW9Jc1dhbnRlZDtcbn07XG5cbmZ1bmN0aW9uIGlzVmFsaWRDbGFpbUlkIChjbGFpbUlkKSB7XG4gIHJldHVybiAoKGNsYWltSWQubGVuZ3RoID09PSA0MCkgJiYgIS9bXkEtWmEtejAtOV0vZy50ZXN0KGNsYWltSWQpKTtcbn07XG5cbmZ1bmN0aW9uIGlzVmFsaWRTaG9ydElkIChjbGFpbUlkKSB7XG4gIHJldHVybiBjbGFpbUlkLmxlbmd0aCA9PT0gMTsgIC8vIGl0IHNob3VsZCByZWFsbHkgZXZhbHVhdGUgdGhlIHNob3J0IHVybCBpdHNlbGZcbn07XG5cbmZ1bmN0aW9uIGlzVmFsaWRTaG9ydElkT3JDbGFpbUlkIChpbnB1dCkge1xuICByZXR1cm4gKGlzVmFsaWRDbGFpbUlkKGlucHV0KSB8fCBpc1ZhbGlkU2hvcnRJZChpbnB1dCkpO1xufTtcblxuZnVuY3Rpb24gc2VydmVBc3NldFRvQ2xpZW50IChjbGFpbUlkLCBuYW1lLCByZXMpIHtcbiAgcmV0dXJuIGdldExvY2FsRmlsZVJlY29yZChjbGFpbUlkLCBuYW1lKVxuICAgIC50aGVuKGZpbGVSZWNvcmQgPT4ge1xuICAgICAgLy8gY2hlY2sgdGhhdCBhIGxvY2FsIHJlY29yZCB3YXMgZm91bmRcbiAgICAgIGlmIChmaWxlUmVjb3JkID09PSBOT19GSUxFKSB7XG4gICAgICAgIHJldHVybiByZXMuc3RhdHVzKDMwNykucmVkaXJlY3QoYC9hcGkvY2xhaW0vZ2V0LyR7bmFtZX0vJHtjbGFpbUlkfWApO1xuICAgICAgfVxuICAgICAgLy8gc2VydmUgdGhlIGZpbGVcbiAgICAgIGNvbnN0IHtmaWxlUGF0aCwgZmlsZVR5cGV9ID0gZmlsZVJlY29yZDtcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBzZXJ2aW5nIGZpbGU6ICR7ZmlsZVBhdGh9YCk7XG4gICAgICBjb25zdCBzZW5kRmlsZU9wdGlvbnMgPSB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnWC1Db250ZW50LVR5cGUtT3B0aW9ucyc6ICdub3NuaWZmJyxcbiAgICAgICAgICAnQ29udGVudC1UeXBlJyAgICAgICAgICA6IGZpbGVUeXBlIHx8ICdpbWFnZS9qcGVnJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICByZXMuc3RhdHVzKDIwMCkuc2VuZEZpbGUoZmlsZVBhdGgsIHNlbmRGaWxlT3B0aW9ucyk7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q2xhaW1JZEFuZFNlcnZlQXNzZXQgKGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCwgY2xhaW1OYW1lLCBjbGFpbUlkLCBvcmlnaW5hbFVybCwgaXAsIHJlcykge1xuICAgIC8vIGdldCB0aGUgY2xhaW0gSWQgYW5kIHRoZW4gc2VydmUgdGhlIGFzc2V0XG4gICAgZ2V0Q2xhaW1JZChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIGNsYWltTmFtZSwgY2xhaW1JZClcbiAgICAgIC50aGVuKGZ1bGxDbGFpbUlkID0+IHtcbiAgICAgICAgaWYgKGZ1bGxDbGFpbUlkID09PSBOT19DTEFJTSkge1xuICAgICAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwNCkuanNvbih7c3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6ICdubyBjbGFpbSBpZCBjb3VsZCBiZSBmb3VuZCd9KTtcbiAgICAgICAgfSBlbHNlIGlmIChmdWxsQ2xhaW1JZCA9PT0gTk9fQ0hBTk5FTCkge1xuICAgICAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwNCkuanNvbih7c3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6ICdubyBjaGFubmVsIGlkIGNvdWxkIGJlIGZvdW5kJ30pO1xuICAgICAgICB9XG4gICAgICAgIHNlcnZlQXNzZXRUb0NsaWVudChmdWxsQ2xhaW1JZCwgY2xhaW1OYW1lLCByZXMpO1xuICAgICAgICAvLyBwb3N0VG9TdGF0cyhyZXNwb25zZVR5cGUsIG9yaWdpbmFsVXJsLCBpcCwgY2xhaW1OYW1lLCBmdWxsQ2xhaW1JZCwgJ3N1Y2Nlc3MnKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBoYW5kbGVFcnJvclJlc3BvbnNlKG9yaWdpbmFsVXJsLCBpcCwgZXJyb3IsIHJlcyk7XG4gICAgICAgIC8vIHBvc3RUb1N0YXRzKHJlc3BvbnNlVHlwZSwgb3JpZ2luYWxVcmwsIGlwLCBjbGFpbU5hbWUsIGZ1bGxDbGFpbUlkLCAnZmFpbCcpO1xuICAgICAgfSk7XG4gIH0sXG4gIGRldGVybWluZVJlc3BvbnNlVHlwZSAoaGFzRmlsZUV4dGVuc2lvbiwgaGVhZGVycykge1xuICAgIGxldCByZXNwb25zZVR5cGU7XG4gICAgaWYgKGhhc0ZpbGVFeHRlbnNpb24pIHtcbiAgICAgIHJlc3BvbnNlVHlwZSA9IFNFUlZFOyAgLy8gYXNzdW1lIGEgc2VydmUgcmVxdWVzdCBpZiBmaWxlIGV4dGVuc2lvbiBpcyBwcmVzZW50XG4gICAgICBpZiAoY2xpZW50QWNjZXB0c0h0bWwoaGVhZGVycykpIHsgIC8vIGlmIHRoZSByZXF1ZXN0IGNvbWVzIGZyb20gYSBicm93c2VyLCBjaGFuZ2UgaXQgdG8gYSBzaG93IHJlcXVlc3RcbiAgICAgICAgcmVzcG9uc2VUeXBlID0gU0hPVztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzcG9uc2VUeXBlID0gU0hPVztcbiAgICAgIGlmIChjbGllbnRXYW50c0Fzc2V0KGhlYWRlcnMpICYmIHJlcXVlc3RJc0Zyb21Ccm93c2VyKGhlYWRlcnMpKSB7ICAvLyB0aGlzIGlzIGluIGNhc2Ugc29tZW9uZSBlbWJlZHMgYSBzaG93IHVybFxuICAgICAgICBsb2dnZXIuZGVidWcoJ1Nob3cgcmVxdWVzdCBjYW1lIGZyb20gYnJvd3NlciBidXQgd2FudHMgYW4gaW1hZ2UvdmlkZW8uIENoYW5naW5nIHJlc3BvbnNlIHRvIHNlcnZlLi4uJyk7XG4gICAgICAgIHJlc3BvbnNlVHlwZSA9IFNFUlZFO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2VUeXBlO1xuICB9LFxuICBmbGlwQ2xhaW1OYW1lQW5kSWRGb3JCYWNrd2FyZHNDb21wYXRpYmlsaXR5IChpZGVudGlmaWVyLCBuYW1lKSB7XG4gICAgLy8gdGhpcyBpcyBhIHBhdGNoIGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSB3aXRoICcvbmFtZS9jbGFpbV9pZCcgdXJsIGZvcm1hdFxuICAgIGlmIChpc1ZhbGlkU2hvcnRJZE9yQ2xhaW1JZChuYW1lKSAmJiAhaXNWYWxpZFNob3J0SWRPckNsYWltSWQoaWRlbnRpZmllcikpIHtcbiAgICAgIGNvbnN0IHRlbXBOYW1lID0gbmFtZTtcbiAgICAgIG5hbWUgPSBpZGVudGlmaWVyO1xuICAgICAgaWRlbnRpZmllciA9IHRlbXBOYW1lO1xuICAgIH1cbiAgICByZXR1cm4gW2lkZW50aWZpZXIsIG5hbWVdO1xuICB9LFxuICBsb2dSZXF1ZXN0RGF0YSAocmVzcG9uc2VUeXBlLCBjbGFpbU5hbWUsIGNoYW5uZWxOYW1lLCBjbGFpbUlkKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdyZXNwb25zZVR5cGUgPT09JywgcmVzcG9uc2VUeXBlKTtcbiAgICBsb2dnZXIuZGVidWcoJ2NsYWltIG5hbWUgPT09ICcsIGNsYWltTmFtZSk7XG4gICAgbG9nZ2VyLmRlYnVnKCdjaGFubmVsIG5hbWUgPT09JywgY2hhbm5lbE5hbWUpO1xuICAgIGxvZ2dlci5kZWJ1ZygnY2xhaW0gaWQgPT09JywgY2xhaW1JZCk7XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvc2VydmVIZWxwZXJzLmpzIiwiY29uc3QgbG9nZ2VyID0gcmVxdWlyZSgnd2luc3RvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgUkVHRVhQX0lOVkFMSURfQ0xBSU0gIDogL1teQS1aYS16MC05LV0vZyxcbiAgUkVHRVhQX0lOVkFMSURfQ0hBTk5FTDogL1teQS1aYS16MC05LUBdL2csXG4gIFJFR0VYUF9BRERSRVNTICAgICAgICA6IC9eYig/PVteME9JbF17MzIsMzN9KVswLTlBLVphLXpdezMyLDMzfSQvLFxuICBDSEFOTkVMX0NIQVIgICAgICAgICAgOiAnQCcsXG4gIHBhcnNlSWRlbnRpZmllciAgICAgICA6IGZ1bmN0aW9uIChpZGVudGlmaWVyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdwYXJzaW5nIGlkZW50aWZpZXI6JywgaWRlbnRpZmllcik7XG4gICAgY29uc3QgY29tcG9uZW50c1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICcoW146JCMvXSopJyArIC8vIHZhbHVlIChzdG9wcyBhdCB0aGUgZmlyc3Qgc2VwYXJhdG9yIG9yIGVuZClcbiAgICAgICcoWzokI10/KShbXi9dKiknIC8vIG1vZGlmaWVyIHNlcGFyYXRvciwgbW9kaWZpZXIgKHN0b3BzIGF0IHRoZSBmaXJzdCBwYXRoIHNlcGFyYXRvciBvciBlbmQpXG4gICAgKTtcbiAgICBjb25zdCBbcHJvdG8sIHZhbHVlLCBtb2RpZmllclNlcGVyYXRvciwgbW9kaWZpZXJdID0gY29tcG9uZW50c1JlZ2V4XG4gICAgICAuZXhlYyhpZGVudGlmaWVyKVxuICAgICAgLm1hcChtYXRjaCA9PiBtYXRjaCB8fCBudWxsKTtcbiAgICBsb2dnZXIuZGVidWcoYCR7cHJvdG99LCAke3ZhbHVlfSwgJHttb2RpZmllclNlcGVyYXRvcn0sICR7bW9kaWZpZXJ9YCk7XG5cbiAgICAvLyBWYWxpZGF0ZSBhbmQgcHJvY2VzcyBuYW1lXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaGVjayB5b3VyIHVybC4gIE5vIGNoYW5uZWwgbmFtZSBwcm92aWRlZCBiZWZvcmUgXCIke21vZGlmaWVyU2VwZXJhdG9yfVwiYCk7XG4gICAgfVxuICAgIGNvbnN0IGlzQ2hhbm5lbCA9IHZhbHVlLnN0YXJ0c1dpdGgobW9kdWxlLmV4cG9ydHMuQ0hBTk5FTF9DSEFSKTtcbiAgICBjb25zdCBjaGFubmVsTmFtZSA9IGlzQ2hhbm5lbCA/IHZhbHVlIDogbnVsbDtcbiAgICBsZXQgY2xhaW1JZDtcbiAgICBpZiAoaXNDaGFubmVsKSB7XG4gICAgICBpZiAoIWNoYW5uZWxOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY2hhbm5lbCBuYW1lIGFmdGVyIEAuJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lQmFkQ2hhcnMgPSAoY2hhbm5lbE5hbWUpLm1hdGNoKG1vZHVsZS5leHBvcnRzLlJFR0VYUF9JTlZBTElEX0NIQU5ORUwpO1xuICAgICAgaWYgKG5hbWVCYWRDaGFycykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2hhcmFjdGVycyBpbiBjaGFubmVsIG5hbWU6ICR7bmFtZUJhZENoYXJzLmpvaW4oJywgJyl9LmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjbGFpbUlkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgYW5kIHByb2Nlc3MgbW9kaWZpZXJcbiAgICBsZXQgY2hhbm5lbENsYWltSWQ7XG4gICAgaWYgKG1vZGlmaWVyU2VwZXJhdG9yKSB7XG4gICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gbW9kaWZpZXIgcHJvdmlkZWQgYWZ0ZXIgc2VwYXJhdG9yIFwiJHttb2RpZmllclNlcGVyYXRvcn1cImApO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kaWZpZXJTZXBlcmF0b3IgPT09ICc6Jykge1xuICAgICAgICBjaGFubmVsQ2xhaW1JZCA9IG1vZGlmaWVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgXCIke21vZGlmaWVyU2VwZXJhdG9yfVwiIG1vZGlmaWVyIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkYCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc0NoYW5uZWwsXG4gICAgICBjaGFubmVsTmFtZSxcbiAgICAgIGNoYW5uZWxDbGFpbUlkLFxuICAgICAgY2xhaW1JZCxcbiAgICB9O1xuICB9LFxuICBwYXJzZUNsYWltOiBmdW5jdGlvbiAoY2xhaW0pIHtcbiAgICBsb2dnZXIuZGVidWcoJ3BhcnNpbmcgbmFtZTonLCBjbGFpbSk7XG4gICAgY29uc3QgY29tcG9uZW50c1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICcoW146JCMvLl0qKScgKyAvLyBuYW1lIChzdG9wcyBhdCB0aGUgZmlyc3QgbW9kaWZpZXIpXG4gICAgICAnKFs6JCMuXT8pKFteL10qKScgLy8gbW9kaWZpZXIgc2VwYXJhdG9yLCBtb2RpZmllciAoc3RvcHMgYXQgdGhlIGZpcnN0IHBhdGggc2VwYXJhdG9yIG9yIGVuZClcbiAgICApO1xuICAgIGNvbnN0IFtwcm90bywgY2xhaW1OYW1lLCBtb2RpZmllclNlcGVyYXRvciwgbW9kaWZpZXJdID0gY29tcG9uZW50c1JlZ2V4XG4gICAgICAuZXhlYyhjbGFpbSlcbiAgICAgIC5tYXAobWF0Y2ggPT4gbWF0Y2ggfHwgbnVsbCk7XG4gICAgbG9nZ2VyLmRlYnVnKGAke3Byb3RvfSwgJHtjbGFpbU5hbWV9LCAke21vZGlmaWVyU2VwZXJhdG9yfSwgJHttb2RpZmllcn1gKTtcblxuICAgIC8vIFZhbGlkYXRlIGFuZCBwcm9jZXNzIG5hbWVcbiAgICBpZiAoIWNsYWltTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjbGFpbSBuYW1lIHByb3ZpZGVkIGJlZm9yZSAuJyk7XG4gICAgfVxuICAgIGNvbnN0IG5hbWVCYWRDaGFycyA9IChjbGFpbU5hbWUpLm1hdGNoKG1vZHVsZS5leHBvcnRzLlJFR0VYUF9JTlZBTElEX0NMQUlNKTtcbiAgICBpZiAobmFtZUJhZENoYXJzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2hhcmFjdGVycyBpbiBjbGFpbSBuYW1lOiAke25hbWVCYWRDaGFycy5qb2luKCcsICcpfS5gKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgYW5kIHByb2Nlc3MgbW9kaWZpZXJcbiAgICBpZiAobW9kaWZpZXJTZXBlcmF0b3IpIHtcbiAgICAgIGlmICghbW9kaWZpZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBmaWxlIGV4dGVuc2lvbiBwcm92aWRlZCBhZnRlciBzZXBhcmF0b3IgJHttb2RpZmllclNlcGVyYXRvcn0uYCk7XG4gICAgICB9XG4gICAgICBpZiAobW9kaWZpZXJTZXBlcmF0b3IgIT09ICcuJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAke21vZGlmaWVyU2VwZXJhdG9yfSBtb2RpZmllciBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBjbGFpbSBuYW1lYCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybiByZXN1bHRzXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsYWltTmFtZSxcbiAgICB9O1xuICB9LFxuICBwYXJzZU1vZGlmaWVyOiBmdW5jdGlvbiAoY2xhaW0pIHtcbiAgICBsb2dnZXIuZGVidWcoJ3BhcnNpbmcgbW9kaWZpZXI6JywgY2xhaW0pO1xuICAgIGNvbnN0IGNvbXBvbmVudHNSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAnKFteOiQjLy5dKiknICsgLy8gbmFtZSAoc3RvcHMgYXQgdGhlIGZpcnN0IG1vZGlmaWVyKVxuICAgICAgJyhbOiQjLl0/KShbXi9dKiknIC8vIG1vZGlmaWVyIHNlcGFyYXRvciwgbW9kaWZpZXIgKHN0b3BzIGF0IHRoZSBmaXJzdCBwYXRoIHNlcGFyYXRvciBvciBlbmQpXG4gICAgKTtcbiAgICBjb25zdCBbcHJvdG8sIGNsYWltTmFtZSwgbW9kaWZpZXJTZXBlcmF0b3IsIG1vZGlmaWVyXSA9IGNvbXBvbmVudHNSZWdleFxuICAgICAgLmV4ZWMoY2xhaW0pXG4gICAgICAubWFwKG1hdGNoID0+IG1hdGNoIHx8IG51bGwpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgJHtwcm90b30sICR7Y2xhaW1OYW1lfSwgJHttb2RpZmllclNlcGVyYXRvcn0sICR7bW9kaWZpZXJ9YCk7XG4gICAgLy8gVmFsaWRhdGUgYW5kIHByb2Nlc3MgbW9kaWZpZXJcbiAgICBsZXQgaGFzRmlsZUV4dGVuc2lvbiA9IGZhbHNlO1xuICAgIGlmIChtb2RpZmllclNlcGVyYXRvcikge1xuICAgICAgaGFzRmlsZUV4dGVuc2lvbiA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBoYXNGaWxlRXh0ZW5zaW9uLFxuICAgIH07XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvbGJyeVVyaS5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXJUb1N0cmluZyB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuaW1wb3J0IHsgY3JlYXRlU3RvcmUsIGFwcGx5TWlkZGxld2FyZSB9IGZyb20gJ3JlZHV4JztcbmltcG9ydCBSZWR1Y2VyIGZyb20gJy4uLy4uL2NsaWVudC9yZWR1Y2Vycy9pbmRleCc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IFN0YXRpY1JvdXRlciB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IEdBTGlzdGVuZXIgZnJvbSAnLi4vLi4vY2xpZW50L2NvbXBvbmVudHMvR0FMaXN0ZW5lci9pbmRleCc7XG5pbXBvcnQgQXBwIGZyb20gJy4uLy4uL2NsaWVudC9hcHAnO1xuaW1wb3J0IHJlbmRlckZ1bGxQYWdlIGZyb20gJy4vcmVuZGVyRnVsbFBhZ2UnO1xuaW1wb3J0IGNyZWF0ZVNhZ2FNaWRkbGV3YXJlIGZyb20gJ3JlZHV4LXNhZ2EnO1xuaW1wb3J0IHsgY2FsbCB9IGZyb20gJ3JlZHV4LXNhZ2EvZWZmZWN0cyc7XG5pbXBvcnQgeyBoYW5kbGVTaG93UGFnZVVyaSB9IGZyb20gJy4uLy4uL2NsaWVudC9zYWdhcy9zaG93X3VyaSc7XG5pbXBvcnQgeyBvbkhhbmRsZVNob3dQYWdlVXJpIH0gZnJvbSAnLi4vLi4vY2xpZW50L2FjdGlvbnMvc2hvdyc7XG5cbmltcG9ydCBIZWxtZXQgZnJvbSAncmVhY3QtaGVsbWV0JztcblxuY29uc3QgcmV0dXJuU2FnYVdpdGhQYXJhbXMgPSAoc2FnYSwgcGFyYW1zKSA9PiB7XG4gIHJldHVybiBmdW5jdGlvbiAqICgpIHtcbiAgICB5aWVsZCBjYWxsKHNhZ2EsIHBhcmFtcyk7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IChyZXEsIHJlcykgPT4ge1xuICBsZXQgY29udGV4dCA9IHt9O1xuXG4gIC8vIGNyZWF0ZSBhbmQgYXBwbHkgbWlkZGxld2FyZVxuICBjb25zdCBzYWdhTWlkZGxld2FyZSA9IGNyZWF0ZVNhZ2FNaWRkbGV3YXJlKCk7XG4gIGNvbnN0IG1pZGRsZXdhcmUgPSBhcHBseU1pZGRsZXdhcmUoc2FnYU1pZGRsZXdhcmUpO1xuXG4gIC8vIGNyZWF0ZSBhIG5ldyBSZWR1eCBzdG9yZSBpbnN0YW5jZVxuICBjb25zdCBzdG9yZSA9IGNyZWF0ZVN0b3JlKFJlZHVjZXIsIG1pZGRsZXdhcmUpO1xuXG4gIC8vIGNyZWF0ZSBzYWdhXG4gIGNvbnN0IGFjdGlvbiA9IG9uSGFuZGxlU2hvd1BhZ2VVcmkocmVxLnBhcmFtcyk7XG4gIGNvbnN0IHNhZ2EgPSByZXR1cm5TYWdhV2l0aFBhcmFtcyhoYW5kbGVTaG93UGFnZVVyaSwgYWN0aW9uKTtcblxuICAvLyBydW4gdGhlIHNhZ2EgbWlkZGxld2FyZVxuICBzYWdhTWlkZGxld2FyZVxuICAgIC5ydW4oc2FnYSlcbiAgICAuZG9uZVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIC8vIHJlbmRlciBjb21wb25lbnQgdG8gYSBzdHJpbmdcbiAgICAgIGNvbnN0IGh0bWwgPSByZW5kZXJUb1N0cmluZyhcbiAgICAgICAgPFByb3ZpZGVyIHN0b3JlPXtzdG9yZX0+XG4gICAgICAgICAgPFN0YXRpY1JvdXRlciBsb2NhdGlvbj17cmVxLnVybH0gY29udGV4dD17Y29udGV4dH0+XG4gICAgICAgICAgICA8R0FMaXN0ZW5lcj5cbiAgICAgICAgICAgICAgPEFwcCAvPlxuICAgICAgICAgICAgPC9HQUxpc3RlbmVyPlxuICAgICAgICAgIDwvU3RhdGljUm91dGVyPlxuICAgICAgICA8L1Byb3ZpZGVyPlxuICAgICAgKTtcblxuICAgICAgLy8gZ2V0IGhlYWQgdGFncyBmcm9tIGhlbG1ldFxuICAgICAgY29uc3QgaGVsbWV0ID0gSGVsbWV0LnJlbmRlclN0YXRpYygpO1xuXG4gICAgICAvLyBjaGVjayBmb3IgYSByZWRpcmVjdFxuICAgICAgaWYgKGNvbnRleHQudXJsKSB7XG4gICAgICAgIHJldHVybiByZXMucmVkaXJlY3QoMzAxLCBjb250ZXh0LnVybCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCB0aGUgaW5pdGlhbCBzdGF0ZSBmcm9tIG91ciBSZWR1eCBzdG9yZVxuICAgICAgY29uc3QgcHJlbG9hZGVkU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuXG4gICAgICAvLyBzZW5kIHRoZSByZW5kZXJlZCBwYWdlIGJhY2sgdG8gdGhlIGNsaWVudFxuICAgICAgcmVzLnNlbmQocmVuZGVyRnVsbFBhZ2UoaGVsbWV0LCBodG1sLCBwcmVsb2FkZWRTdGF0ZSkpO1xuICAgIH0pO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9oZWxwZXJzL2hhbmRsZVNob3dSZW5kZXIuanN4IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVkdXgtc2FnYVwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInJlZHV4LXNhZ2FcIlxuLy8gbW9kdWxlIGlkID0gMTUxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCB7IGNhbGwsIHB1dCwgdGFrZUxhdGVzdCB9IGZyb20gJ3JlZHV4LXNhZ2EvZWZmZWN0cyc7XG5pbXBvcnQgKiBhcyBhY3Rpb25zIGZyb20gJ2NvbnN0YW50cy9zaG93X2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgeyBvblJlcXVlc3RFcnJvciwgb25OZXdDaGFubmVsUmVxdWVzdCwgb25OZXdBc3NldFJlcXVlc3QgfSBmcm9tICdhY3Rpb25zL3Nob3cnO1xuaW1wb3J0IHsgbmV3QXNzZXRSZXF1ZXN0IH0gZnJvbSAnc2FnYXMvc2hvd19hc3NldCc7XG5pbXBvcnQgeyBuZXdDaGFubmVsUmVxdWVzdCB9IGZyb20gJ3NhZ2FzL3Nob3dfY2hhbm5lbCc7XG5pbXBvcnQgbGJyeVVyaSBmcm9tICd1dGlscy9sYnJ5VXJpJztcblxuZnVuY3Rpb24gKiBwYXJzZUFuZFVwZGF0ZUlkZW50aWZpZXJBbmRDbGFpbSAobW9kaWZpZXIsIGNsYWltKSB7XG4gIC8vIHRoaXMgaXMgYSByZXF1ZXN0IGZvciBhbiBhc3NldFxuICAvLyBjbGFpbSB3aWxsIGJlIGFuIGFzc2V0IGNsYWltXG4gIC8vIHRoZSBpZGVudGlmaWVyIGNvdWxkIGJlIGEgY2hhbm5lbCBvciBhIGNsYWltIGlkXG4gIGxldCBpc0NoYW5uZWwsIGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCwgY2xhaW1JZCwgY2xhaW1OYW1lLCBleHRlbnNpb247XG4gIHRyeSB7XG4gICAgKHsgaXNDaGFubmVsLCBjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIGNsYWltSWQgfSA9IGxicnlVcmkucGFyc2VJZGVudGlmaWVyKG1vZGlmaWVyKSk7XG4gICAgKHsgY2xhaW1OYW1lLCBleHRlbnNpb24gfSA9IGxicnlVcmkucGFyc2VDbGFpbShjbGFpbSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB5aWVsZCBwdXQob25SZXF1ZXN0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICB9XG4gIC8vIHRyaWdnZXIgYW4gbmV3IGFjdGlvbiB0byB1cGRhdGUgdGhlIHN0b3JlXG4gIGlmIChpc0NoYW5uZWwpIHtcbiAgICByZXR1cm4geWllbGQgY2FsbChuZXdBc3NldFJlcXVlc3QsIG9uTmV3QXNzZXRSZXF1ZXN0KGNsYWltTmFtZSwgbnVsbCwgY2hhbm5lbE5hbWUsIGNoYW5uZWxDbGFpbUlkLCBleHRlbnNpb24pKTtcbiAgfTtcbiAgeWllbGQgY2FsbChuZXdBc3NldFJlcXVlc3QsIG9uTmV3QXNzZXRSZXF1ZXN0KGNsYWltTmFtZSwgY2xhaW1JZCwgbnVsbCwgbnVsbCwgZXh0ZW5zaW9uKSk7XG59XG5mdW5jdGlvbiAqIHBhcnNlQW5kVXBkYXRlQ2xhaW1Pbmx5IChjbGFpbSkge1xuICAvLyB0aGlzIGNvdWxkIGJlIGEgcmVxdWVzdCBmb3IgYW4gYXNzZXQgb3IgYSBjaGFubmVsIHBhZ2VcbiAgLy8gY2xhaW0gY291bGQgYmUgYW4gYXNzZXQgY2xhaW0gb3IgYSBjaGFubmVsIGNsYWltXG4gIGxldCBpc0NoYW5uZWwsIGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZDtcbiAgdHJ5IHtcbiAgICAoeyBpc0NoYW5uZWwsIGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCB9ID0gbGJyeVVyaS5wYXJzZUlkZW50aWZpZXIoY2xhaW0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geWllbGQgcHV0KG9uUmVxdWVzdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuICAvLyB0cmlnZ2VyIGFuIG5ldyBhY3Rpb24gdG8gdXBkYXRlIHRoZSBzdG9yZVxuICAvLyByZXR1cm4gZWFybHkgaWYgdGhpcyByZXF1ZXN0IGlzIGZvciBhIGNoYW5uZWxcbiAgaWYgKGlzQ2hhbm5lbCkge1xuICAgIHJldHVybiB5aWVsZCBjYWxsKG5ld0NoYW5uZWxSZXF1ZXN0LCBvbk5ld0NoYW5uZWxSZXF1ZXN0KGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCkpO1xuICB9XG4gIC8vIGlmIG5vdCBmb3IgYSBjaGFubmVsLCBwYXJzZSB0aGUgY2xhaW0gcmVxdWVzdFxuICBsZXQgY2xhaW1OYW1lLCBleHRlbnNpb247XG4gIHRyeSB7XG4gICAgKHtjbGFpbU5hbWUsIGV4dGVuc2lvbn0gPSBsYnJ5VXJpLnBhcnNlQ2xhaW0oY2xhaW0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geWllbGQgcHV0KG9uUmVxdWVzdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuICB5aWVsZCBjYWxsKG5ld0Fzc2V0UmVxdWVzdCwgb25OZXdBc3NldFJlcXVlc3QoY2xhaW1OYW1lLCBudWxsLCBudWxsLCBudWxsLCBleHRlbnNpb24pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uICogaGFuZGxlU2hvd1BhZ2VVcmkgKGFjdGlvbikge1xuICBjb25zdCB7IGlkZW50aWZpZXIsIGNsYWltIH0gPSBhY3Rpb24uZGF0YTtcbiAgaWYgKGlkZW50aWZpZXIpIHtcbiAgICByZXR1cm4geWllbGQgY2FsbChwYXJzZUFuZFVwZGF0ZUlkZW50aWZpZXJBbmRDbGFpbSwgaWRlbnRpZmllciwgY2xhaW0pO1xuICB9XG4gIHlpZWxkIGNhbGwocGFyc2VBbmRVcGRhdGVDbGFpbU9ubHksIGNsYWltKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiAqIHdhdGNoSGFuZGxlU2hvd1BhZ2VVcmkgKCkge1xuICB5aWVsZCB0YWtlTGF0ZXN0KGFjdGlvbnMuSEFORExFX1NIT1dfVVJJLCBoYW5kbGVTaG93UGFnZVVyaSk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3NhZ2FzL3Nob3dfdXJpLmpzIiwiaW1wb3J0IHsgY2FsbCwgcHV0LCBzZWxlY3QsIHRha2VMYXRlc3QgfSBmcm9tICdyZWR1eC1zYWdhL2VmZmVjdHMnO1xuaW1wb3J0ICogYXMgYWN0aW9ucyBmcm9tICdjb25zdGFudHMvc2hvd19hY3Rpb25fdHlwZXMnO1xuaW1wb3J0IHsgYWRkUmVxdWVzdFRvUmVxdWVzdExpc3QsIG9uUmVxdWVzdEVycm9yLCBvblJlcXVlc3RVcGRhdGUsIGFkZEFzc2V0VG9Bc3NldExpc3QgfSBmcm9tICdhY3Rpb25zL3Nob3cnO1xuaW1wb3J0IHsgZ2V0TG9uZ0NsYWltSWQsIGdldFNob3J0SWQsIGdldENsYWltRGF0YSB9IGZyb20gJ2FwaS9hc3NldEFwaSc7XG5pbXBvcnQgeyBzZWxlY3RTaG93U3RhdGUgfSBmcm9tICdzZWxlY3RvcnMvc2hvdyc7XG5pbXBvcnQgeyBzZWxlY3RTaXRlSG9zdCB9IGZyb20gJ3NlbGVjdG9ycy9zaXRlJztcblxuZXhwb3J0IGZ1bmN0aW9uICogbmV3QXNzZXRSZXF1ZXN0IChhY3Rpb24pIHtcbiAgY29uc3QgeyByZXF1ZXN0VHlwZSwgcmVxdWVzdElkLCBuYW1lLCBtb2RpZmllciB9ID0gYWN0aW9uLmRhdGE7XG4gIC8vIHB1dCBhbiBhY3Rpb24gdG8gdXBkYXRlIHRoZSByZXF1ZXN0IGluIHJlZHV4XG4gIHlpZWxkIHB1dChvblJlcXVlc3RVcGRhdGUocmVxdWVzdFR5cGUsIHJlcXVlc3RJZCkpO1xuICAvLyBpcyB0aGlzIGFuIGV4aXN0aW5nIHJlcXVlc3Q/XG4gIC8vIElmIHRoaXMgdXJpIGlzIGluIHRoZSByZXF1ZXN0IGxpc3QsIGl0J3MgYWxyZWFkeSBiZWVuIGZldGNoZWRcbiAgY29uc3Qgc3RhdGUgPSB5aWVsZCBzZWxlY3Qoc2VsZWN0U2hvd1N0YXRlKTtcbiAgY29uc3QgaG9zdCA9IHlpZWxkIHNlbGVjdChzZWxlY3RTaXRlSG9zdCk7XG4gIGlmIChzdGF0ZS5yZXF1ZXN0TGlzdFtyZXF1ZXN0SWRdKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gZ2V0IGxvbmcgaWQgJiYgYWRkIHJlcXVlc3QgdG8gcmVxdWVzdCBsaXN0XG4gIGxldCBsb25nSWQ7XG4gIHRyeSB7XG4gICAgKHtkYXRhOiBsb25nSWR9ID0geWllbGQgY2FsbChnZXRMb25nQ2xhaW1JZCwgaG9zdCwgbmFtZSwgbW9kaWZpZXIpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geWllbGQgcHV0KG9uUmVxdWVzdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuICBjb25zdCBhc3NldEtleSA9IGBhIyR7bmFtZX0jJHtsb25nSWR9YDtcbiAgeWllbGQgcHV0KGFkZFJlcXVlc3RUb1JlcXVlc3RMaXN0KHJlcXVlc3RJZCwgbnVsbCwgYXNzZXRLZXkpKTtcbiAgLy8gaXMgdGhpcyBhbiBleGlzdGluZyBhc3NldD9cbiAgLy8gSWYgdGhpcyBhc3NldCBpcyBpbiB0aGUgYXNzZXQgbGlzdCwgaXQncyBhbHJlYWR5IGJlZW4gZmV0Y2hlZFxuICBpZiAoc3RhdGUuYXNzZXRMaXN0W2Fzc2V0S2V5XSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIGdldCBzaG9ydCBJZFxuICBsZXQgc2hvcnRJZDtcbiAgdHJ5IHtcbiAgICAoe2RhdGE6IHNob3J0SWR9ID0geWllbGQgY2FsbChnZXRTaG9ydElkLCBob3N0LCBuYW1lLCBsb25nSWQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geWllbGQgcHV0KG9uUmVxdWVzdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuICAvLyBnZXQgYXNzZXQgY2xhaW0gZGF0YVxuICBsZXQgY2xhaW1EYXRhO1xuICB0cnkge1xuICAgICh7ZGF0YTogY2xhaW1EYXRhfSA9IHlpZWxkIGNhbGwoZ2V0Q2xhaW1EYXRhLCBob3N0LCBuYW1lLCBsb25nSWQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geWllbGQgcHV0KG9uUmVxdWVzdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuICAvLyBhZGQgYXNzZXQgdG8gYXNzZXQgbGlzdFxuICB5aWVsZCBwdXQoYWRkQXNzZXRUb0Fzc2V0TGlzdChhc3NldEtleSwgbnVsbCwgbmFtZSwgbG9uZ0lkLCBzaG9ydElkLCBjbGFpbURhdGEpKTtcbiAgLy8gY2xlYXIgYW55IGVycm9ycyBpbiByZXF1ZXN0IGVycm9yXG4gIHlpZWxkIHB1dChvblJlcXVlc3RFcnJvcihudWxsKSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gKiB3YXRjaE5ld0Fzc2V0UmVxdWVzdCAoKSB7XG4gIHlpZWxkIHRha2VMYXRlc3QoYWN0aW9ucy5BU1NFVF9SRVFVRVNUX05FVywgbmV3QXNzZXRSZXF1ZXN0KTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvc2FnYXMvc2hvd19hc3NldC5qcyIsImltcG9ydCBSZXF1ZXN0IGZyb20gJ3V0aWxzL3JlcXVlc3QnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9uZ0NsYWltSWQgKGhvc3QsIG5hbWUsIG1vZGlmaWVyKSB7XG4gIGxldCBib2R5ID0ge307XG4gIC8vIGNyZWF0ZSByZXF1ZXN0IHBhcmFtc1xuICBpZiAobW9kaWZpZXIpIHtcbiAgICBpZiAobW9kaWZpZXIuaWQpIHtcbiAgICAgIGJvZHlbJ2NsYWltSWQnXSA9IG1vZGlmaWVyLmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICBib2R5WydjaGFubmVsTmFtZSddID0gbW9kaWZpZXIuY2hhbm5lbC5uYW1lO1xuICAgICAgYm9keVsnY2hhbm5lbENsYWltSWQnXSA9IG1vZGlmaWVyLmNoYW5uZWwuaWQ7XG4gICAgfVxuICB9XG4gIGJvZHlbJ2NsYWltTmFtZSddID0gbmFtZTtcbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIG1ldGhvZCA6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICBib2R5ICAgOiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgfTtcbiAgLy8gY3JlYXRlIHVybFxuICBjb25zdCB1cmwgPSBgJHtob3N0fS9hcGkvY2xhaW0vbG9uZy1pZGA7XG4gIC8vIHJldHVybiB0aGUgcmVxdWVzdCBwcm9taXNlXG4gIHJldHVybiBSZXF1ZXN0KHVybCwgcGFyYW1zKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaG9ydElkIChob3N0LCBuYW1lLCBjbGFpbUlkKSB7XG4gIGNvbnN0IHVybCA9IGAke2hvc3R9L2FwaS9jbGFpbS9zaG9ydC1pZC8ke2NsYWltSWR9LyR7bmFtZX1gO1xuICByZXR1cm4gUmVxdWVzdCh1cmwpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsYWltRGF0YSAoaG9zdCwgbmFtZSwgY2xhaW1JZCkge1xuICBjb25zdCB1cmwgPSBgJHtob3N0fS9hcGkvY2xhaW0vZGF0YS8ke25hbWV9LyR7Y2xhaW1JZH1gO1xuICByZXR1cm4gUmVxdWVzdCh1cmwpO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9hcGkvYXNzZXRBcGkuanMiLCJpbXBvcnQge2NhbGwsIHB1dCwgc2VsZWN0LCB0YWtlTGF0ZXN0fSBmcm9tICdyZWR1eC1zYWdhL2VmZmVjdHMnO1xuaW1wb3J0ICogYXMgYWN0aW9ucyBmcm9tICdjb25zdGFudHMvc2hvd19hY3Rpb25fdHlwZXMnO1xuaW1wb3J0IHsgYWRkTmV3Q2hhbm5lbFRvQ2hhbm5lbExpc3QsIGFkZFJlcXVlc3RUb1JlcXVlc3RMaXN0LCBvblJlcXVlc3RFcnJvciwgb25SZXF1ZXN0VXBkYXRlLCB1cGRhdGVDaGFubmVsQ2xhaW1zIH0gZnJvbSAnYWN0aW9ucy9zaG93JztcbmltcG9ydCB7IGdldENoYW5uZWxDbGFpbXMsIGdldENoYW5uZWxEYXRhIH0gZnJvbSAnYXBpL2NoYW5uZWxBcGknO1xuaW1wb3J0IHsgc2VsZWN0U2hvd1N0YXRlIH0gZnJvbSAnc2VsZWN0b3JzL3Nob3cnO1xuaW1wb3J0IHsgc2VsZWN0U2l0ZUhvc3QgfSBmcm9tICdzZWxlY3RvcnMvc2l0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiAqIG5ld0NoYW5uZWxSZXF1ZXN0IChhY3Rpb24pIHtcbiAgY29uc3QgeyByZXF1ZXN0VHlwZSwgcmVxdWVzdElkLCBjaGFubmVsTmFtZSwgY2hhbm5lbElkIH0gPSBhY3Rpb24uZGF0YTtcbiAgLy8gcHV0IGFuIGFjdGlvbiB0byB1cGRhdGUgdGhlIHJlcXVlc3QgaW4gcmVkdXhcbiAgeWllbGQgcHV0KG9uUmVxdWVzdFVwZGF0ZShyZXF1ZXN0VHlwZSwgcmVxdWVzdElkKSk7XG4gIC8vIGlzIHRoaXMgYW4gZXhpc3RpbmcgcmVxdWVzdD9cbiAgLy8gSWYgdGhpcyB1cmkgaXMgaW4gdGhlIHJlcXVlc3QgbGlzdCwgaXQncyBhbHJlYWR5IGJlZW4gZmV0Y2hlZFxuICBjb25zdCBzdGF0ZSA9IHlpZWxkIHNlbGVjdChzZWxlY3RTaG93U3RhdGUpO1xuICBjb25zdCBob3N0ID0geWllbGQgc2VsZWN0KHNlbGVjdFNpdGVIb3N0KTtcbiAgaWYgKHN0YXRlLnJlcXVlc3RMaXN0W3JlcXVlc3RJZF0pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBnZXQgY2hhbm5lbCBsb25nIGlkXG4gIGxldCBsb25nSWQsIHNob3J0SWQ7XG4gIHRyeSB7XG4gICAgKHsgZGF0YToge2xvbmdDaGFubmVsQ2xhaW1JZDogbG9uZ0lkLCBzaG9ydENoYW5uZWxDbGFpbUlkOiBzaG9ydElkfSB9ID0geWllbGQgY2FsbChnZXRDaGFubmVsRGF0YSwgaG9zdCwgY2hhbm5lbE5hbWUsIGNoYW5uZWxJZCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB5aWVsZCBwdXQob25SZXF1ZXN0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICB9XG4gIC8vIHN0b3JlIHRoZSByZXF1ZXN0IGluIHRoZSBjaGFubmVsIHJlcXVlc3RzIGxpc3RcbiAgY29uc3QgY2hhbm5lbEtleSA9IGBjIyR7Y2hhbm5lbE5hbWV9IyR7bG9uZ0lkfWA7XG4gIHlpZWxkIHB1dChhZGRSZXF1ZXN0VG9SZXF1ZXN0TGlzdChyZXF1ZXN0SWQsIG51bGwsIGNoYW5uZWxLZXkpKTtcbiAgLy8gaXMgdGhpcyBhbiBleGlzdGluZyBjaGFubmVsP1xuICAvLyBJZiB0aGlzIGNoYW5uZWwgaXMgaW4gdGhlIGNoYW5uZWwgbGlzdCwgaXQncyBhbHJlYWR5IGJlZW4gZmV0Y2hlZFxuICBpZiAoc3RhdGUuY2hhbm5lbExpc3RbY2hhbm5lbEtleV0pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBnZXQgY2hhbm5lbCBjbGFpbXMgZGF0YVxuICBsZXQgY2xhaW1zRGF0YTtcbiAgdHJ5IHtcbiAgICAoeyBkYXRhOiBjbGFpbXNEYXRhIH0gPSB5aWVsZCBjYWxsKGdldENoYW5uZWxDbGFpbXMsIGhvc3QsIGxvbmdJZCwgY2hhbm5lbE5hbWUsIDEpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geWllbGQgcHV0KG9uUmVxdWVzdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuICAvLyBzdG9yZSB0aGUgY2hhbm5lbCBkYXRhIGluIHRoZSBjaGFubmVsIGxpc3RcbiAgeWllbGQgcHV0KGFkZE5ld0NoYW5uZWxUb0NoYW5uZWxMaXN0KGNoYW5uZWxLZXksIGNoYW5uZWxOYW1lLCBzaG9ydElkLCBsb25nSWQsIGNsYWltc0RhdGEpKTtcbiAgLy8gY2xlYXIgYW55IHJlcXVlc3QgZXJyb3JzXG4gIHlpZWxkIHB1dChvblJlcXVlc3RFcnJvcihudWxsKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiAqIHdhdGNoTmV3Q2hhbm5lbFJlcXVlc3QgKCkge1xuICB5aWVsZCB0YWtlTGF0ZXN0KGFjdGlvbnMuQ0hBTk5FTF9SRVFVRVNUX05FVywgbmV3Q2hhbm5lbFJlcXVlc3QpO1xufTtcblxuZnVuY3Rpb24gKiBnZXROZXdDbGFpbXNBbmRVcGRhdGVDaGFubmVsIChhY3Rpb24pIHtcbiAgY29uc3QgeyBjaGFubmVsS2V5LCBuYW1lLCBsb25nSWQsIHBhZ2UgfSA9IGFjdGlvbi5kYXRhO1xuICBjb25zdCBob3N0ID0geWllbGQgc2VsZWN0KHNlbGVjdFNpdGVIb3N0KTtcbiAgbGV0IGNsYWltc0RhdGE7XG4gIHRyeSB7XG4gICAgKHsgZGF0YTogY2xhaW1zRGF0YSB9ID0geWllbGQgY2FsbChnZXRDaGFubmVsQ2xhaW1zLCBob3N0LCBsb25nSWQsIG5hbWUsIHBhZ2UpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geWllbGQgcHV0KG9uUmVxdWVzdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuICB5aWVsZCBwdXQodXBkYXRlQ2hhbm5lbENsYWltcyhjaGFubmVsS2V5LCBjbGFpbXNEYXRhKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiAqIHdhdGNoVXBkYXRlQ2hhbm5lbENsYWltcyAoKSB7XG4gIHlpZWxkIHRha2VMYXRlc3QoYWN0aW9ucy5DSEFOTkVMX0NMQUlNU19VUERBVEVfQVNZTkMsIGdldE5ld0NsYWltc0FuZFVwZGF0ZUNoYW5uZWwpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3NhZ2FzL3Nob3dfY2hhbm5lbC5qcyIsImltcG9ydCBSZXF1ZXN0IGZyb20gJ3V0aWxzL3JlcXVlc3QnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbm5lbERhdGEgKGhvc3QsIGlkLCBuYW1lKSB7XG4gIGlmICghaWQpIGlkID0gJ25vbmUnO1xuICBjb25zdCB1cmwgPSBgJHtob3N0fS9hcGkvY2hhbm5lbC9kYXRhLyR7bmFtZX0vJHtpZH1gO1xuICByZXR1cm4gUmVxdWVzdCh1cmwpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoYW5uZWxDbGFpbXMgKGhvc3QsIGxvbmdJZCwgbmFtZSwgcGFnZSkge1xuICBpZiAoIXBhZ2UpIHBhZ2UgPSAxO1xuICBjb25zdCB1cmwgPSBgJHtob3N0fS9hcGkvY2hhbm5lbC9jbGFpbXMvJHtuYW1lfS8ke2xvbmdJZH0vJHtwYWdlfWA7XG4gIHJldHVybiBSZXF1ZXN0KHVybCk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2FwaS9jaGFubmVsQXBpLmpzIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIFJFR0VYUF9JTlZBTElEX0NMQUlNICA6IC9bXkEtWmEtejAtOS1dL2csXG4gIFJFR0VYUF9JTlZBTElEX0NIQU5ORUw6IC9bXkEtWmEtejAtOS1AXS9nLFxuICBSRUdFWFBfQUREUkVTUyAgICAgICAgOiAvXmIoPz1bXjBPSWxdezMyLDMzfSlbMC05QS1aYS16XXszMiwzM30kLyxcbiAgQ0hBTk5FTF9DSEFSICAgICAgICAgIDogJ0AnLFxuICBwYXJzZUlkZW50aWZpZXIgICAgICAgOiBmdW5jdGlvbiAoaWRlbnRpZmllcikge1xuICAgIGNvbnN0IGNvbXBvbmVudHNSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAnKFteOiQjL10qKScgKyAvLyB2YWx1ZSAoc3RvcHMgYXQgdGhlIGZpcnN0IHNlcGFyYXRvciBvciBlbmQpXG4gICAgICAnKFs6JCNdPykoW14vXSopJyAvLyBtb2RpZmllciBzZXBhcmF0b3IsIG1vZGlmaWVyIChzdG9wcyBhdCB0aGUgZmlyc3QgcGF0aCBzZXBhcmF0b3Igb3IgZW5kKVxuICAgICk7XG4gICAgY29uc3QgW3Byb3RvLCB2YWx1ZSwgbW9kaWZpZXJTZXBlcmF0b3IsIG1vZGlmaWVyXSA9IGNvbXBvbmVudHNSZWdleCAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgLmV4ZWMoaWRlbnRpZmllcilcbiAgICAgIC5tYXAobWF0Y2ggPT4gbWF0Y2ggfHwgbnVsbCk7XG5cbiAgICAvLyBWYWxpZGF0ZSBhbmQgcHJvY2VzcyBuYW1lXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaGVjayB5b3VyIFVSTC4gIE5vIGNoYW5uZWwgbmFtZSBwcm92aWRlZCBiZWZvcmUgXCIke21vZGlmaWVyU2VwZXJhdG9yfVwiYCk7XG4gICAgfVxuICAgIGNvbnN0IGlzQ2hhbm5lbCA9IHZhbHVlLnN0YXJ0c1dpdGgobW9kdWxlLmV4cG9ydHMuQ0hBTk5FTF9DSEFSKTtcbiAgICBjb25zdCBjaGFubmVsTmFtZSA9IGlzQ2hhbm5lbCA/IHZhbHVlIDogbnVsbDtcbiAgICBsZXQgY2xhaW1JZDtcbiAgICBpZiAoaXNDaGFubmVsKSB7XG4gICAgICBpZiAoIWNoYW5uZWxOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hlY2sgeW91ciBVUkwuICBObyBjaGFubmVsIG5hbWUgYWZ0ZXIgXCJAXCIuJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lQmFkQ2hhcnMgPSAoY2hhbm5lbE5hbWUpLm1hdGNoKG1vZHVsZS5leHBvcnRzLlJFR0VYUF9JTlZBTElEX0NIQU5ORUwpO1xuICAgICAgaWYgKG5hbWVCYWRDaGFycykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENoZWNrIHlvdXIgVVJMLiAgSW52YWxpZCBjaGFyYWN0ZXJzIGluIGNoYW5uZWwgbmFtZTogXCIke25hbWVCYWRDaGFycy5qb2luKCcsICcpfVwiLmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjbGFpbUlkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgYW5kIHByb2Nlc3MgbW9kaWZpZXJcbiAgICBsZXQgY2hhbm5lbENsYWltSWQ7XG4gICAgaWYgKG1vZGlmaWVyU2VwZXJhdG9yKSB7XG4gICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2hlY2sgeW91ciBVUkwuICBObyBtb2RpZmllciBwcm92aWRlZCBhZnRlciBzZXBhcmF0b3IgXCIke21vZGlmaWVyU2VwZXJhdG9yfVwiYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RpZmllclNlcGVyYXRvciA9PT0gJzonKSB7XG4gICAgICAgIGNoYW5uZWxDbGFpbUlkID0gbW9kaWZpZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENoZWNrIHlvdXIgVVJMLiAgVGhlIFwiJHttb2RpZmllclNlcGVyYXRvcn1cIiBtb2RpZmllciBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZGApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaXNDaGFubmVsLFxuICAgICAgY2hhbm5lbE5hbWUsXG4gICAgICBjaGFubmVsQ2xhaW1JZDogY2hhbm5lbENsYWltSWQgfHwgbnVsbCxcbiAgICAgIGNsYWltSWQgICAgICAgOiBjbGFpbUlkIHx8IG51bGwsXG4gICAgfTtcbiAgfSxcbiAgcGFyc2VDbGFpbTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBjb25zdCBjb21wb25lbnRzUmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgJyhbXjokIy8uXSopJyArIC8vIG5hbWUgKHN0b3BzIGF0IHRoZSBmaXJzdCBleHRlbnNpb24pXG4gICAgICAnKFs6JCMuXT8pKFteL10qKScgLy8gZXh0ZW5zaW9uIHNlcGFyYXRvciwgZXh0ZW5zaW9uIChzdG9wcyBhdCB0aGUgZmlyc3QgcGF0aCBzZXBhcmF0b3Igb3IgZW5kKVxuICAgICk7XG4gICAgY29uc3QgW3Byb3RvLCBjbGFpbU5hbWUsIGV4dGVuc2lvblNlcGVyYXRvciwgZXh0ZW5zaW9uXSA9IGNvbXBvbmVudHNSZWdleCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICAuZXhlYyhuYW1lKVxuICAgICAgLm1hcChtYXRjaCA9PiBtYXRjaCB8fCBudWxsKTtcblxuICAgIC8vIFZhbGlkYXRlIGFuZCBwcm9jZXNzIG5hbWVcbiAgICBpZiAoIWNsYWltTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGVjayB5b3VyIFVSTC4gIE5vIGNsYWltIG5hbWUgcHJvdmlkZWQgYmVmb3JlIFwiLlwiJyk7XG4gICAgfVxuICAgIGNvbnN0IG5hbWVCYWRDaGFycyA9IChjbGFpbU5hbWUpLm1hdGNoKG1vZHVsZS5leHBvcnRzLlJFR0VYUF9JTlZBTElEX0NMQUlNKTtcbiAgICBpZiAobmFtZUJhZENoYXJzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENoZWNrIHlvdXIgVVJMLiAgSW52YWxpZCBjaGFyYWN0ZXJzIGluIGNsYWltIG5hbWU6IFwiJHtuYW1lQmFkQ2hhcnMuam9pbignLCAnKX1cIi5gKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgYW5kIHByb2Nlc3MgZXh0ZW5zaW9uXG4gICAgaWYgKGV4dGVuc2lvblNlcGVyYXRvcikge1xuICAgICAgaWYgKCFleHRlbnNpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaGVjayB5b3VyIFVSTC4gIE5vIGZpbGUgZXh0ZW5zaW9uIHByb3ZpZGVkIGFmdGVyIHNlcGFyYXRvciBcIiR7ZXh0ZW5zaW9uU2VwZXJhdG9yfVwiLmApO1xuICAgICAgfVxuICAgICAgaWYgKGV4dGVuc2lvblNlcGVyYXRvciAhPT0gJy4nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2hlY2sgeW91ciBVUkwuICBUaGUgXCIke2V4dGVuc2lvblNlcGVyYXRvcn1cIiBzZXBhcmF0b3IgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgY2xhaW0gbmFtZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsYWltTmFtZSxcbiAgICAgIGV4dGVuc2lvbjogZXh0ZW5zaW9uIHx8IG51bGwsXG4gICAgfTtcbiAgfSxcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvdXRpbHMvbGJyeVVyaS5qcyIsImNvbnN0IGhhbmRsZVBhZ2VSZW5kZXIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2hhbmRsZVBhZ2VSZW5kZXIuanN4Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwID0+IHtcbiAgLy8gYSBjYXRjaC1hbGwgcm91dGUgaWYgc29tZW9uZSB2aXNpdHMgYSBwYWdlIHRoYXQgZG9lcyBub3QgZXhpc3RcbiAgYXBwLnVzZSgnKicsIChyZXEsIHJlcykgPT4ge1xuICAgIC8vIHNlbmQgcmVzcG9uc2VcbiAgICBoYW5kbGVQYWdlUmVuZGVyKHJlcSwgcmVzKTtcbiAgfSk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL3JvdXRlcy9mYWxsYmFjay1yb3V0ZXMuanMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/index.js.map b/index.js.map index 43f154dd..a44c415d 100644 --- a/index.js.map +++ b/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///index.js","webpack:///webpack/bootstrap fdb26764a439838e892e","webpack:///external \"react\"","webpack:///external \"react-redux\"","webpack:///external \"winston\"","webpack:///external \"react-router-dom\"","webpack:///./client/actions/publish.js","webpack:///./config/siteConfig.js","webpack:///./server/models/index.js","webpack:///./client/containers/NavBar/index.js","webpack:///./client/actions/show.js","webpack:///./client/components/SEO/index.js","webpack:///external \"prop-types\"","webpack:///./client/utils/request.js","webpack:///./client/constants/show_action_types.js","webpack:///./client/selectors/show.js","webpack:///external \"react-helmet\"","webpack:///external \"redux-saga/effects\"","webpack:///./server/helpers/lbryApi.js","webpack:///./server/helpers/googleAnalytics.js","webpack:///external \"redux\"","webpack:///./client/actions/channel.js","webpack:///./client/components/ProgressBar/index.jsx","webpack:///./client/pages/ErrorPage/index.jsx","webpack:///external \"passport\"","webpack:///./config/mysqlConfig.js","webpack:///./config/slackConfig.js","webpack:///external \"passport-local\"","webpack:///external \"sequelize\"","webpack:///./server/helpers/sequelizeHelpers.js","webpack:///./server/helpers/publishHelpers.js","webpack:///./server/helpers/errorHandlers.js","webpack:///./server/controllers/serveController.js","webpack:///./server/helpers/handlePageRender.jsx","webpack:///external \"react-dom/server\"","webpack:///./client/reducers/index.js","webpack:///./client/constants/publish_action_types.js","webpack:///./client/constants/publish_channel_select_states.js","webpack:///./client/constants/channel_action_types.js","webpack:///./client/constants/asset_display_states.js","webpack:///./client/components/GAListener/index.jsx","webpack:///./client/app.js","webpack:///./client/containers/Dropzone/index.js","webpack:///./client/containers/ChannelLoginForm/index.js","webpack:///./client/containers/ChannelCreateForm/index.js","webpack:///./client/constants/show_request_types.js","webpack:///./client/containers/AssetDisplay/index.js","webpack:///./server/helpers/renderFullPage.js","webpack:///./client/selectors/site.js","webpack:///external \"babel-polyfill\"","webpack:///external \"whatwg-fetch\"","webpack:///./server.js","webpack:///external \"express\"","webpack:///external \"body-parser\"","webpack:///external \"express-handlebars\"","webpack:///external \"handlebars\"","webpack:///external \"helmet\"","webpack:///./server/helpers/authHelpers.js","webpack:///external \"cookie-session\"","webpack:///external \"http\"","webpack:///./server/passport/local-signup.js","webpack:///external \"axios\"","webpack:///./config/lbryConfig.js","webpack:///external \"universal-analytics\"","webpack:///./server/models/certificate.js","webpack:///./server/models/channel.js","webpack:///./server/models/claim.js","webpack:///./server/models/file.js","webpack:///./server/models/request.js","webpack:///./server/models/user.js","webpack:///external \"bcrypt\"","webpack:///./server/passport/local-login.js","webpack:///./server/routes/auth-routes.js","webpack:///./server/routes/api-routes.js","webpack:///external \"connect-multiparty\"","webpack:///./server/controllers/publishController.js","webpack:///external \"fs\"","webpack:///./server/auth/authentication.js","webpack:///./server/helpers/channelPagination.js","webpack:///./server/routes/page-routes.js","webpack:///./client/reducers/publish.js","webpack:///./client/reducers/channel.js","webpack:///./client/reducers/show.js","webpack:///./client/reducers/site.js","webpack:///external \"react-ga\"","webpack:///./client/pages/HomePage/index.jsx","webpack:///./client/components/SEO/view.jsx","webpack:///./client/utils/pageTitle.js","webpack:///./client/utils/metaTags.js","webpack:///./client/utils/canonicalLink.js","webpack:///./client/containers/NavBar/view.jsx","webpack:///./client/components/Logo/index.jsx","webpack:///./client/components/NavBarChannelOptionsDropdown/index.jsx","webpack:///external \"cross-fetch/polyfill\"","webpack:///./client/containers/PublishTool/index.js","webpack:///./client/containers/PublishTool/view.jsx","webpack:///./client/containers/Dropzone/view.jsx","webpack:///./client/utils/file.js","webpack:///./client/components/PublishPreview/index.jsx","webpack:///./client/containers/PublishDetails/index.js","webpack:///./client/containers/PublishDetails/view.jsx","webpack:///./client/containers/PublishTitleInput/index.js","webpack:///./client/containers/PublishTitleInput/view.jsx","webpack:///./client/containers/PublishUrlInput/index.js","webpack:///./client/containers/PublishUrlInput/view.jsx","webpack:///./client/components/PublishUrlMiddleDisplay/index.jsx","webpack:///./client/containers/PublishThumbnailInput/index.js","webpack:///./client/containers/PublishThumbnailInput/view.jsx","webpack:///./client/containers/PublishMetadataInputs/index.js","webpack:///./client/containers/PublishMetadataInputs/view.jsx","webpack:///./client/components/ExpandingTextArea/index.jsx","webpack:///./client/containers/ChannelSelect/index.js","webpack:///./client/containers/ChannelSelect/view.jsx","webpack:///./client/containers/ChannelLoginForm/view.jsx","webpack:///./client/containers/ChannelCreateForm/view.jsx","webpack:///./client/components/ActiveStatusBar/index.jsx","webpack:///./client/components/InactiveStatusBar/index.jsx","webpack:///./client/containers/PublishStatus/index.js","webpack:///./client/containers/PublishStatus/view.jsx","webpack:///./client/constants/publish_claim_states.js","webpack:///./client/containers/PublishDisabledMessage/index.js","webpack:///./client/containers/PublishDisabledMessage/view.jsx","webpack:///./client/pages/AboutPage/index.jsx","webpack:///./client/pages/LoginPage/index.js","webpack:///./client/pages/LoginPage/view.jsx","webpack:///./client/pages/ShowPage/index.js","webpack:///./client/pages/ShowPage/view.jsx","webpack:///./client/containers/ShowAssetLite/index.js","webpack:///./client/containers/ShowAssetLite/view.jsx","webpack:///./client/containers/AssetDisplay/view.jsx","webpack:///./client/containers/ShowAssetDetails/index.js","webpack:///./client/containers/ShowAssetDetails/view.jsx","webpack:///./client/containers/AssetTitle/index.js","webpack:///./client/containers/AssetTitle/view.jsx","webpack:///./client/containers/AssetInfo/index.js","webpack:///./client/containers/AssetInfo/view.jsx","webpack:///./client/containers/ShowChannel/index.js","webpack:///./client/containers/ShowChannel/view.jsx","webpack:///./client/containers/ChannelClaimsDisplay/index.js","webpack:///./client/containers/ChannelClaimsDisplay/view.jsx","webpack:///./client/components/AssetPreview/index.js","webpack:///./client/components/AssetPreview/view.jsx","webpack:///./client/containers/FourOhFourPage/index.jsx","webpack:///./client/containers/FourOhFourPage/view.jsx","webpack:///./server/routes/asset-routes.js","webpack:///./server/helpers/serveHelpers.js","webpack:///./server/helpers/lbryUri.js","webpack:///./server/helpers/handleShowRender.jsx","webpack:///external \"redux-saga\"","webpack:///./client/sagas/show_uri.js","webpack:///./client/sagas/show_asset.js","webpack:///./client/api/assetApi.js","webpack:///./client/sagas/show_channel.js","webpack:///./client/api/channelApi.js","webpack:///./client/utils/lbryUri.js","webpack:///./server/routes/fallback-routes.js","webpack:///./server/helpers/configureLogger.js","webpack:///./config/loggerConfig.js","webpack:///./server/helpers/configureSlack.js","webpack:///external \"winston-slack-webhook\""],"names":["module","exports","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","require","selectFile","file","type","actions","FILE_SELECTED","data","clearFile","FILE_CLEAR","updateMetadata","value","METADATA_UPDATE","updateClaim","CLAIM_UPDATE","setPublishInChannel","channel","SET_PUBLISH_IN_CHANNEL","updatePublishStatus","status","message","PUBLISH_STATUS_UPDATE","updateError","ERROR_UPDATE","updateSelectedChannel","channelName","SELECTED_CHANNEL_UPDATE","toggleMetadataInputs","showMetadataInputs","TOGGLE_METADATA_INPUTS","onNewThumbnail","THUMBNAIL_NEW","startPublish","history","PUBLISH_START","_publish_action_types","obj","newObj","key","default","SiteConfig","_this","this","analytics","googleId","assetDefaults","description","thumbnail","title","auth","sessionKey","details","host","port","twitter","publishing","additionalClaimAddresses","disabled","disabledMessage","primaryClaimAddress","thumbnailChannel","thumbnailChannelId","uploadDirectory","configure","config","console","log","Sequelize","logger","_require","database","username","password","db","sequelize","dialect","dialectOptions","decimalNumbers","logging","pool","max","min","idle","acquire","authenticate","then","info","catch","err","error","Certificate","Channel","Claim","File","Request","User","import","keys","forEach","modelName","associate","upsert","Model","values","condition","tableName","findOne","where","debug","update","create","_reactRedux","_channel","_publish","_view","_view2","mapStateToProps","_ref","site","loggedInChannel","channelShortId","shortId","channelLongId","longId","siteDescription","mapDispatchToProps","dispatch","onChannelLogin","updateLoggedInChannel","onChannelLogout","connect","onHandleShowPageUri","params","HANDLE_SHOW_URI","onRequestError","REQUEST_ERROR","onNewChannelRequest","channelId","requestType","requestId","CHANNEL_REQUEST_NEW","onNewAssetRequest","id","extension","ASSET_REQUEST_NEW","modifier","onRequestUpdate","REQUEST_UPDATE","addRequestToRequestList","REQUEST_LIST_ADD","addAssetToAssetList","claimId","claimData","ASSET_ADD","addNewChannelToChannelList","claimsData","CHANNEL_ADD","onUpdateChannelClaims","channelKey","page","CHANNEL_CLAIMS_UPDATE_ASYNC","updateChannelClaims","channelListId","CHANNEL_CLAIMS_UPDATE_SUCCESS","fileRequested","FILE_REQUESTED","updateFileAvailability","FILE_AVAILABILITY_UPDATE","updateDisplayAssetError","DISPLAY_ASSET_ERROR","_show_action_types","_show_request_types","defaultDescription","defaultThumbnail","siteHost","siteTitle","siteTwitter","parseJSON","response","json","checkStatus","jsonResponse","Error","request","url","options","fetch","Promise","all","_ref2","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","length","Array","isArray","TypeError","selectAsset","show","requestList","assetKey","assetList","selectShowState","state","axios","_require$api","api","apiHost","apiPort","lbryApiUri","_require2","chooseGaLbrynetPublishLabel","sendGATimingEvent","handleLbrynetResponse","resolve","reject","result","JSON","stringify","publishClaim","publishParams","gaStartTime","Date","now","post","method","getClaim","uri","timeout","getClaimList","claimName","resolveUri","getDownloadDirectory","_ref3","download_directory","createChannel","channel_name","amount","createServeEventParams","headers","ip","originalUrl","eventCategory","eventAction","eventLabel","ipOverride","userAgentOverride","createPublishTimingEventParams","category","variable","label","startTime","endTime","userTimingCategory","userTimingVariableName","userTimingTime","userTimingLabel","sendGoogleAnalyticsEvent","visitorId","replace","ua","strictCidFormat","https","event","sendGoogleAnalyticsTiming","timing","sendGAServeEvent","channel_id","CHANNEL_UPDATE","_channel_action_types","_interopRequireDefault","_classCallCheck","instance","Constructor","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","constructor","writable","setPrototypeOf","__proto__","_createClass","defineProperties","target","props","descriptor","protoProps","staticProps","_react","_react2","_propTypes","_propTypes2","_ActiveStatusBar","_ActiveStatusBar2","_InactiveStatusBar","_InactiveStatusBar2","ProgressBar","_React$Component","getPrototypeOf","bars","index","incrementer","createBars","bind","startProgressBar","updateProgressBar","stopProgressBar","size","isActive","setState","updateInterval","setInterval","clearInterval","createElement","map","bar","Component","propTypes","number","isRequired","_NavBar","_NavBar2","ErrorPage","apply","arguments","className","string","MysqlConfig","SlackConfig","slackWebHook","slackErrorChannel","slackInfoChannel","returnShortId","claimsArray","claimIndex","substring","shortIdLength","findIndex","element","possibleMatches","slice","filter","fs","parsePublishApiRequestBody","nsfw","license","exec","parsePublishApiRequestFiles","path","test","validateFileTypeAndSize","fileName","filePath","fileType","thumbnailFileName","thumbnailFilePath","thumbnailFileType","createBasicPublishParams","trim","file_path","bid","metadata","author","language","claim_address","createThumbnailPublishParams","deleteTemporaryFile","unlink","addGetResultsToFileData","fileInfo","getResult","file_name","download_path","createFileData","outpoint","height","address","contentType","handleErrorResponse","res","useObjectPropertiesIfNoKeys","_module$exports$retur","returnErrorMessageAndStatus","_module$exports$retur2","createErrorResponsePayload","code","newErrorObject","getOwnPropertyNames","success","returnPaginatedChannelClaims","getClaimId","channelClaimId","getClaimIdByChannel","getClaimIdByClaim","getLongClaimId","longClaimId","getLongChannelId","longChannelId","getClaimIdByLongChannelId","getChannelData","longChannelClaimId","getShortChannelIdFromLongChannelId","_ref4","shortChannelClaimId","getChannelClaims","getAllChannelClaims","_ref5","_ref6","channelClaimsArray","paginatedChannelViewData","getLocalFileRecord","dataValues","_server","_redux","_index","_index2","_reactRouterDom","_index3","_index4","_app","_app2","_renderFullPage","_renderFullPage2","_reactHelmet","_reactHelmet2","req","context","store","createStore","html","renderToString","Provider","StaticRouter","location","helmet","renderStatic","redirect","preloadedState","getState","send","_publish2","_channel2","_show","_show2","_site","_site2","combineReducers","publish","LOGIN","CREATE","LOCAL_CHECK","UNAVAILABLE","ERROR","AVAILABLE","_reactGa","_reactGa2","initialize","GAListener","sendPageView","listen","set","pathname","pageview","children","withRouter","_HomePage","_HomePage2","_AboutPage","_AboutPage2","_LoginPage","_LoginPage2","_ShowPage","_ShowPage2","_FourOhFourPage","_FourOhFourPage2","App","Switch","Route","exact","component","fileError","setFileError","CHANNEL","ASSET_LITE","ASSET_DETAILS","displayAsset","asset","onFileRequest","toString","meta","link","selectSiteState","selectSiteHost","SpeechServer","configureMysql","mysqlConfig","configureSite","siteConfig","PORT","configureSlack","slackConfig","createApp","app","express","enable","use","static","__dirname","bodyParser","urlencoded","extended","verbose","passport","serializeUser","serializeSpeechUser","deserializeUser","deserializeSpeechUser","localSignupStrategy","localLoginStrategy","cookieSession","maxAge","session","hbs","expressHandlebars","defaultLayout","handlebars","Handlebars","engine","server","http","Server","start","sync","user","PassportLocalStrategy","Strategy","lbryApi","usernameField","passwordField","userInfo","tx","userData","userName","channelData","claim_id","certificateData","newUser","newChannel","newCertificate","setChannel","setUser","shortChannelId","lbryConfig","STRING","BOOLEAN","INTEGER","TEXT","DECIMAL","define","claimSequence","decodedClaim","depth","effectiveAmount","hasSignature","hex","nout","txid","validAtHeight","valueVersion","claimType","certificateVersion","keyType","publicKey","freezeTableName","belongsTo","foreignKey","allowNull","findAll","order","getLongChannelIdFromShortChannelId","_this2","$like","getLongChannelIdFromChannelName","_this3","validateLongChannelId","_this4","hasOne","determineFileExtensionFromContentType","determineThumbnail","storedThumbnail","prepareClaimData","claim","certificateId","licenseUrl","preview","metadataVersion","source","sourceType","sourceVersion","streamVersion","getShortClaimIdFromLongClaimId","raw","getLongClaimIdFromShortClaimId","getTopFreeClaimIdByClaimName","_this5","validateLongClaimId","_this6","resolveClaim","_this7","claimArray","defaultValue","trendingEligible","hasMany","getRecentClaims","limit","action","ipAddress","bcrypt","comparePassword","compare","changePassword","newPassword","genSalt","saltError","salt","hash","hashError","hook","returnUserAndChannelInfo","userInstance","getChannel","isMatch","logIn","logout","multipart","multipartMiddleware","uploadDir","claimNameIsAvailable","checkChannelAvailability","_require3","_require4","errorHandlers","_require5","_require6","authenticateUser","_require7","availableName","body","claimsList","resolveResult","fileData","_ref7","_ref8","_ref9","_ref10","_ref10$","completed","_ref11","_ref12","resolvedUri","_ref13","files","channelPassword","_parsePublishApiReque","_parsePublishApiReque2","_ref14","_ref15","_ref15$","thumbnailPublishParams","lbryTx","_ref16","_ref17","_ref18","claimInfo","_ref19","_defineProperty","publishHelpers","_require$publishing","Op","publishResults","fileRecord","claimRecord","upsertCriteria","setClaim","setFile","claimAddresses","attributes","or","authenticateChannelCredentials","userPassword","channelFindParams","claims","totalPages","determineTotalPages","paginationPage","getPageFromQuery","extractPageFromClaims","previousPage","determinePreviousPage","currentPage","nextPage","determineNextPage","totalResults","determineTotalClaims","parseInt","pageNumber","claimStartIndex","claimEndIndex","totalClaims","fullPages","Math","floor","handlePageRender","render","layout","initialState","assign","publishInChannel","selectedChannel","_publish_channel_select_states","publishSubmit","channelList","_asset_display_states","googleAnalyticsId","_siteConfig$assetDefa","_siteConfig$details","_SEO","_SEO2","_PublishTool","_PublishTool2","HomePage","_pageTitle","_metaTags","_canonicalLink","SEO","_props","_props2","pageUri","pageTitle","createPageTitle","metaTags","createMetaTags","canonicalLink","createCanonicalLink","rel","href","determineOgThumbnailContentType","lastIndexOf","createBasicMetaTags","content","createChannelMetaTags","createAssetMetaTags","embedUrl","showUrl","fileExt","ogTitle","ogDescription","ogThumbnailContentType","ogThumbnail","createBasicCanonicalLink","createAssetCanonicalLink","_asset$claimData","createChannelCanonicalLink","_Logo","_Logo2","_NavBarChannelOptionsDropdown","_NavBarChannelOptionsDropdown2","_request","_request2","NavBar","checkForLoggedInUser","logoutUser","handleSelection","credentials","selectedOptions","NavLink","activeClassName","to","defaultSelection","VIEW","LOGOUT","Logo","version","x","y","viewBox","enableBackground","Link","transform","fontSize","fontFamily","fill","stroke","strokeWidth","strokeLinecap","NavBarChannelDropdown","onChange","_Dropzone","_Dropzone2","_PublishDetails","_PublishDetails2","_PublishStatus","_PublishStatus2","_PublishDisabledMessage","_PublishDisabledMessage2","PublishTool","_file","_PublishPreview","_PublishPreview2","Dropzone","dragOver","mouseOver","dimPreview","handleDrop","handleDragOver","handleDragEnd","handleDragEnter","handleDragLeave","handleMouseEnter","handleMouseLeave","handleClick","handleFileInput","chooseFile","preventDefault","dt","dataTransfer","items","kind","droppedFile","getAsFile","remove","clearData","document","getElementById","click","fileList","validateFile","accept","encType","onDrop","onDragOver","onDragEnd","onDragEnter","onDragLeave","onMouseEnter","onMouseLeave","onClick","PublishPreview","imgSource","setPreviewImageSource","newProps","setPreviewImageSourceFromFile","previewReader","FileReader","readAsDataURL","onloadend","src","alt","bool","_PublishTitleInput","_PublishTitleInput2","_PublishUrlInput","_PublishUrlInput2","_PublishThumbnailInput","_PublishThumbnailInput2","_PublishMetadataInputs","_PublishMetadataInputs2","_ChannelSelect","_ChannelSelect2","PublishDetails","onPublishSubmit","onMetadataChange","PublishTitleInput","handleInput","e","placeholder","loggedInChannelName","loggedInChannelShortId","urlError","onClaimChange","onUrlError","_PublishUrlMiddleDisplay","_PublishUrlMiddleDisplay2","PublishUrlInput","setClaimName","validateClaim","cleanseInput","input","fileNameWithoutEnding","cleanClaimName","UrlMiddle","dataURItoBlob","dataURI","byteString","atob","split","mimeString","ia","Uint8Array","charCodeAt","Blob","PublishThumbnailInput","videoSource","sliderMinRange","sliderMaxRange","sliderValue","handleVideoLoadedData","handleSliderChange","createThumbnail","setVideoSource","nextProps","dataUri","blob","URL","createObjectURL","duration","totalMinutes","totalSeconds","currentTime","video","canvas","width","videoWidth","videoHeight","getContext","drawImage","dataUrl","toDataURL","snapshot","_state","preload","muted","style","display","playsInline","onLoadedData","onSeeked","onToggleMetadataInputs","_ExpandingTextArea","_ExpandingTextArea2","PublishMetadataInputs","toggleShowInputs","handleSelect","checked","selectedOption","htmlFor","rows","maxLength","maxHeight","_objectWithoutProperties","indexOf","_extends","ExpandingTextarea","_Component","_handleChange","adjustTextarea","_ref$target","el","scrollHeight","rest","ref","func","channelError","onPublishInChannelChange","onChannelSelect","_ChannelLoginForm","_ChannelLoginForm2","_ChannelCreateForm","_ChannelCreateForm2","states","ChannelSelect","toggleAnonymousPublish","ChannelLoginForm","loginToChannel","Headers","Content-Type","_ProgressBar","_ProgressBar2","ChannelCreateForm","handleChannelInput","cleanseChannelInput","updateIsChannelAvailable","channelWithAtSymbol","checkIsPasswordProvided","checkIsChannelAvailable","makePublishChannelRequest","ActiveStatusBar","InactiveStatusBar","_publish_claim_states","publishStates","PublishStatus","LOAD_START","LOADING","PUBLISHING","SUCCESS","FAILED","PublishDisabledMessage","AboutPage","LoginPage","_ErrorPage","_ErrorPage2","_ShowAssetLite","_ShowAssetLite2","_ShowAssetDetails","_ShowAssetDetails2","_ShowChannel","_ShowChannel2","ShowPage","match","_AssetDisplay","_AssetDisplay2","ShowLite","AssetDisplay","_props$asset$claimDat","_props$asset$claimDat2","controls","poster","_AssetTitle","_AssetTitle2","_AssetInfo","_AssetInfo2","ShowAssetDetails","AssetTitle","AssetInfo","copyToClipboard","elementToCopy","dataset","elementtocopy","select","execCommand","_props$asset","hidden","readOnly","spellCheck","data-elementtocopy","download","previousRequest","_ChannelClaimsDisplay","_ChannelClaimsDisplay2","ShowChannel","_AssetPreview","_AssetPreview2","ChannelClaimsDisplay","showNextResultsPage","showPreviousResultsPage","showNewPage","_props$channel","_props$channel$claims","defaults","AssetPreview","_ref$claimData","directSourceLink","showUrlLink","_ref$site","FourOhForPage","determineResponseType","flipClaimNameAndIdForBackwardsCompatibility","logRequestData","getClaimIdAndServeAsset","lbryUri","handleShowRender","hasFileExtension","parseModifier","responseType","parseClaim","isChannel","_lbryUri$parseIdentif","parseIdentifier","identifier","_flipClaimNameAndIdFo","_flipClaimNameAndIdFo2","clientAcceptsHtml","requestIsFromBrowser","clientWantsAsset","range","imageIsWanted","videoIsWanted","isValidClaimId","isValidShortId","isValidShortIdOrClaimId","serveAssetToClient","NO_FILE","sendFileOptions","X-Content-Type-Options","sendFile","fullClaimId","tempName","REGEXP_INVALID_CLAIM","REGEXP_INVALID_CHANNEL","REGEXP_ADDRESS","CHANNEL_CHAR","componentsRegex","RegExp","_componentsRegex$exec","_componentsRegex$exec2","proto","modifierSeperator","startsWith","nameBadChars","join","_componentsRegex$exec3","_componentsRegex$exec4","_componentsRegex$exec5","_componentsRegex$exec6","_reduxSaga","_reduxSaga2","_effects","_show_uri","returnSagaWithParams","saga","regeneratorRuntime","mark","_callee","wrap","_context","prev","stop","sagaMiddleware","middleware","applyMiddleware","run","parseAndUpdateIdentifierAndClaim","_lbryUri$parseClaim","_lbryUri2","t0","put","abrupt","sent","_show_asset","newAssetRequest","_marked","parseAndUpdateClaimOnly","_lbryUri$parseIdentif2","_lbryUri$parseClaim2","_context2","_show_channel","newChannelRequest","t1","_marked2","handleShowPageUri","_action$data","_context3","_marked3","watchHandleShowPageUri","_context4","takeLatest","_marked4","_lbryUri","_assetApi","getShortId","getClaimData","t2","watchNewAssetRequest","_ref$data","_channelApi","watchNewChannelRequest","getNewClaimsAndUpdateChannel","_action$data2","watchUpdateChannelClaims","extensionSeperator","logLevel","winston","transports","Console","level","timestamp","colorize","prettyPrint","handleExceptions","humanReadableUnhandledException","warn","silly","loggerConfig","winstonSlackWebHook","SlackWebHook","add","webhookUrl","iconEmoji"],"mappings":"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","file":"index.js","sourcesContent":["module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 47);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react\");\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-redux\");\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"winston\");\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-router-dom\");\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.selectFile = selectFile;\nexports.clearFile = clearFile;\nexports.updateMetadata = updateMetadata;\nexports.updateClaim = updateClaim;\nexports.setPublishInChannel = setPublishInChannel;\nexports.updatePublishStatus = updatePublishStatus;\nexports.updateError = updateError;\nexports.updateSelectedChannel = updateSelectedChannel;\nexports.toggleMetadataInputs = toggleMetadataInputs;\nexports.onNewThumbnail = onNewThumbnail;\nexports.startPublish = startPublish;\n\nvar _publish_action_types = __webpack_require__(34);\n\nvar actions = _interopRequireWildcard(_publish_action_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// export action creators\nfunction selectFile(file) {\n return {\n type: actions.FILE_SELECTED,\n data: file\n };\n};\n\nfunction clearFile() {\n return {\n type: actions.FILE_CLEAR\n };\n};\n\nfunction updateMetadata(name, value) {\n return {\n type: actions.METADATA_UPDATE,\n data: {\n name: name,\n value: value\n }\n };\n};\n\nfunction updateClaim(value) {\n return {\n type: actions.CLAIM_UPDATE,\n data: value\n };\n};\n\nfunction setPublishInChannel(channel) {\n return {\n type: actions.SET_PUBLISH_IN_CHANNEL,\n channel: channel\n };\n};\n\nfunction updatePublishStatus(status, message) {\n return {\n type: actions.PUBLISH_STATUS_UPDATE,\n data: {\n status: status,\n message: message\n }\n };\n};\n\nfunction updateError(name, value) {\n return {\n type: actions.ERROR_UPDATE,\n data: {\n name: name,\n value: value\n }\n };\n};\n\nfunction updateSelectedChannel(channelName) {\n return {\n type: actions.SELECTED_CHANNEL_UPDATE,\n data: channelName\n };\n};\n\nfunction toggleMetadataInputs(showMetadataInputs) {\n return {\n type: actions.TOGGLE_METADATA_INPUTS,\n data: showMetadataInputs\n };\n};\n\nfunction onNewThumbnail(file) {\n return {\n type: actions.THUMBNAIL_NEW,\n data: file\n };\n};\n\nfunction startPublish(history) {\n return {\n type: actions.PUBLISH_START,\n data: { history: history }\n };\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction SiteConfig() {\n var _this = this;\n\n this.analytics = {\n googleId: 'default'\n };\n this.assetDefaults = {\n description: 'An asset published on Spee.ch',\n thumbnail: 'https://spee.ch/assets/img/video_thumb_default.png',\n title: 'Spee.ch'\n };\n this.auth = {\n sessionKey: 'default'\n };\n this.details = {\n description: 'Open-source, decentralized image and video sharing.',\n host: 'default',\n port: 3000,\n title: 'Spee.ch',\n twitter: '@spee_ch'\n };\n this.publishing = {\n additionalClaimAddresses: [],\n disabled: false,\n disabledMessage: 'Please check back soon.',\n primaryClaimAddress: 'default',\n thumbnailChannel: 'default',\n thumbnailChannelId: 'default',\n uploadDirectory: '/home/lbry/Uploads'\n };\n this.configure = function (config) {\n if (!config) {\n return console.log('No site config received.');\n }\n var analytics = config.analytics,\n assetDefaults = config.assetDefaults,\n auth = config.auth,\n details = config.details,\n publishing = config.publishing;\n\n _this.analytics = analytics;\n _this.assetDefaults = assetDefaults;\n _this.auth = auth;\n _this.details = details;\n _this.publishing = publishing;\n };\n};\n\nmodule.exports = new SiteConfig();\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Sequelize = __webpack_require__(26);\nvar logger = __webpack_require__(2);\n\nconsole.log('exporting sequelize models');\n\nvar _require = __webpack_require__(23),\n database = _require.database,\n username = _require.username,\n password = _require.password;\n\nvar db = {};\n// set sequelize options\nvar sequelize = new Sequelize(database, username, password, {\n host: 'localhost',\n dialect: 'mysql',\n dialectOptions: { decimalNumbers: true }, // fix to ensure DECIMAL will not be stored as a string\n logging: false,\n pool: {\n max: 5,\n min: 0,\n idle: 10000,\n acquire: 10000\n }\n});\n\n// establish mysql connection\nsequelize.authenticate().then(function () {\n logger.info('Sequelize has established mysql connection successfully.');\n}).catch(function (err) {\n logger.error('Sequelize was unable to connect to the database:', err);\n});\n\n// manually add each model to the db object\nvar Certificate = __webpack_require__(63);\nvar Channel = __webpack_require__(64);\nvar Claim = __webpack_require__(65);\nvar File = __webpack_require__(66);\nvar Request = __webpack_require__(67);\nvar User = __webpack_require__(68);\ndb['Certificate'] = sequelize.import('Certificate', Certificate);\ndb['Channel'] = sequelize.import('Channel', Channel);\ndb['Claim'] = sequelize.import('Claim', Claim);\ndb['File'] = sequelize.import('File', File);\ndb['Request'] = sequelize.import('Request', Request);\ndb['User'] = sequelize.import('User', User);\n\n// run model.association for each model in the db object that has an association\nObject.keys(db).forEach(function (modelName) {\n if (db[modelName].associate) {\n logger.info('Associating model:', modelName);\n db[modelName].associate(db);\n }\n});\n\ndb.sequelize = sequelize;\ndb.Sequelize = Sequelize;\n\n// add an 'upsert' method to the db object\ndb.upsert = function (Model, values, condition, tableName) {\n return Model.findOne({\n where: condition\n }).then(function (obj) {\n if (obj) {\n // update\n logger.debug('updating record in db.' + tableName);\n return obj.update(values);\n } else {\n // insert\n logger.debug('creating record in db.' + tableName);\n return Model.create(values);\n }\n }).catch(function (error) {\n logger.error(tableName + '.upsert error', error);\n throw error;\n });\n};\n\nmodule.exports = db;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _channel = __webpack_require__(19);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(89);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n site = _ref.site;\n\n return {\n channelName: channel.loggedInChannel.name,\n channelShortId: channel.loggedInChannel.shortId,\n channelLongId: channel.loggedInChannel.longId,\n siteDescription: site.description\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onChannelLogin: function onChannelLogin(name, shortId, longId) {\n dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));\n dispatch((0, _publish.updateSelectedChannel)(name));\n },\n onChannelLogout: function onChannelLogout() {\n dispatch((0, _channel.updateLoggedInChannel)(null, null, null));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.onHandleShowPageUri = onHandleShowPageUri;\nexports.onRequestError = onRequestError;\nexports.onNewChannelRequest = onNewChannelRequest;\nexports.onNewAssetRequest = onNewAssetRequest;\nexports.onRequestUpdate = onRequestUpdate;\nexports.addRequestToRequestList = addRequestToRequestList;\nexports.addAssetToAssetList = addAssetToAssetList;\nexports.addNewChannelToChannelList = addNewChannelToChannelList;\nexports.onUpdateChannelClaims = onUpdateChannelClaims;\nexports.updateChannelClaims = updateChannelClaims;\nexports.fileRequested = fileRequested;\nexports.updateFileAvailability = updateFileAvailability;\nexports.updateDisplayAssetError = updateDisplayAssetError;\n\nvar _show_action_types = __webpack_require__(12);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show_request_types = __webpack_require__(43);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// basic request parsing\nfunction onHandleShowPageUri(params) {\n return {\n type: actions.HANDLE_SHOW_URI,\n data: params\n };\n};\n\nfunction onRequestError(error) {\n return {\n type: actions.REQUEST_ERROR,\n data: error\n };\n};\n\nfunction onNewChannelRequest(channelName, channelId) {\n var requestType = _show_request_types.CHANNEL;\n var requestId = 'cr#' + channelName + '#' + channelId;\n return {\n type: actions.CHANNEL_REQUEST_NEW,\n data: { requestType: requestType, requestId: requestId, channelName: channelName, channelId: channelId }\n };\n};\n\nfunction onNewAssetRequest(name, id, channelName, channelId, extension) {\n var requestType = extension ? _show_request_types.ASSET_LITE : _show_request_types.ASSET_DETAILS;\n var requestId = 'ar#' + name + '#' + id + '#' + channelName + '#' + channelId;\n return {\n type: actions.ASSET_REQUEST_NEW,\n data: {\n requestType: requestType,\n requestId: requestId,\n name: name,\n modifier: {\n id: id,\n channel: {\n name: channelName,\n id: channelId\n }\n }\n }\n };\n};\n\nfunction onRequestUpdate(requestType, requestId) {\n return {\n type: actions.REQUEST_UPDATE,\n data: {\n requestType: requestType,\n requestId: requestId\n }\n };\n};\n\nfunction addRequestToRequestList(id, error, key) {\n return {\n type: actions.REQUEST_LIST_ADD,\n data: { id: id, error: error, key: key }\n };\n};\n\n// asset actions\n\nfunction addAssetToAssetList(id, error, name, claimId, shortId, claimData) {\n return {\n type: actions.ASSET_ADD,\n data: { id: id, error: error, name: name, claimId: claimId, shortId: shortId, claimData: claimData }\n };\n}\n\n// channel actions\n\nfunction addNewChannelToChannelList(id, name, shortId, longId, claimsData) {\n return {\n type: actions.CHANNEL_ADD,\n data: { id: id, name: name, shortId: shortId, longId: longId, claimsData: claimsData }\n };\n};\n\nfunction onUpdateChannelClaims(channelKey, name, longId, page) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_ASYNC,\n data: { channelKey: channelKey, name: name, longId: longId, page: page }\n };\n};\n\nfunction updateChannelClaims(channelListId, claimsData) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_SUCCESS,\n data: { channelListId: channelListId, claimsData: claimsData }\n };\n};\n\n// display a file\n\nfunction fileRequested(name, claimId) {\n return {\n type: actions.FILE_REQUESTED,\n data: { name: name, claimId: claimId }\n };\n};\n\nfunction updateFileAvailability(status) {\n return {\n type: actions.FILE_AVAILABILITY_UPDATE,\n data: status\n };\n};\n\nfunction updateDisplayAssetError(error) {\n return {\n type: actions.DISPLAY_ASSET_ERROR,\n data: error\n };\n};\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(85);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var site = _ref.site;\n var defaultDescription = site.defaultDescription,\n defaultThumbnail = site.defaultThumbnail,\n siteDescription = site.description,\n siteHost = site.host,\n siteTitle = site.title,\n siteTwitter = site.twitter;\n\n return {\n defaultDescription: defaultDescription,\n defaultThumbnail: defaultThumbnail,\n siteDescription: siteDescription,\n siteHost: siteHost,\n siteTitle: siteTitle,\n siteTwitter: siteTwitter\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"prop-types\");\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = request;\n\n__webpack_require__(92);\n\n/**\n * Parses the JSON returned by a network request\n *\n * @param {object} response A response from a network request\n *\n * @return {object} The parsed JSON from the request\n */\nfunction parseJSON(response) {\n if (response.status === 204 || response.status === 205) {\n return null;\n }\n return response.json();\n}\n\n/**\n * Parses the status returned by a network request\n *\n * @param {object} response A response from a network request\n * @param {object} response The parsed JSON from the network request\n *\n * @return {object | undefined} Returns object with status and statusText, or undefined\n */\nfunction checkStatus(response, jsonResponse) {\n if (response.status >= 200 && response.status < 300) {\n return jsonResponse;\n }\n var error = new Error(jsonResponse.message);\n error.response = response;\n throw error;\n}\n\n/**\n * Requests a URL, returning a promise\n *\n * @param {string} url The URL we want to request\n * @param {object} [options] The options we want to pass to \"fetch\"\n *\n * @return {object} The response data\n */\n\nfunction request(url, options) {\n return fetch(url, options).then(function (response) {\n return Promise.all([response, parseJSON(response)]);\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n response = _ref2[0],\n jsonResponse = _ref2[1];\n\n return checkStatus(response, jsonResponse);\n });\n}\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// request actions\nvar HANDLE_SHOW_URI = exports.HANDLE_SHOW_URI = 'HANDLE_SHOW_URI';\nvar REQUEST_ERROR = exports.REQUEST_ERROR = 'REQUEST_ERROR';\nvar REQUEST_UPDATE = exports.REQUEST_UPDATE = 'REQUEST_UPDATE';\nvar ASSET_REQUEST_NEW = exports.ASSET_REQUEST_NEW = 'ASSET_REQUEST_NEW';\nvar CHANNEL_REQUEST_NEW = exports.CHANNEL_REQUEST_NEW = 'CHANNEL_REQUEST_NEW';\nvar REQUEST_LIST_ADD = exports.REQUEST_LIST_ADD = 'REQUEST_LIST_ADD';\n\n// asset actions\nvar ASSET_ADD = exports.ASSET_ADD = 'ASSET_ADD';\n\n// channel actions\nvar CHANNEL_ADD = exports.CHANNEL_ADD = 'CHANNEL_ADD';\n\nvar CHANNEL_CLAIMS_UPDATE_ASYNC = exports.CHANNEL_CLAIMS_UPDATE_ASYNC = 'CHANNEL_CLAIMS_UPDATE_ASYNC';\nvar CHANNEL_CLAIMS_UPDATE_SUCCESS = exports.CHANNEL_CLAIMS_UPDATE_SUCCESS = 'CHANNEL_CLAIMS_UPDATE_SUCCESS';\n\n// asset/file display actions\nvar FILE_REQUESTED = exports.FILE_REQUESTED = 'FILE_REQUESTED';\nvar FILE_AVAILABILITY_UPDATE = exports.FILE_AVAILABILITY_UPDATE = 'FILE_AVAILABILITY_UPDATE';\nvar DISPLAY_ASSET_ERROR = exports.DISPLAY_ASSET_ERROR = 'DISPLAY_ASSET_ERROR';\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar selectAsset = exports.selectAsset = function selectAsset(show) {\n var request = show.requestList[show.request.id];\n var assetKey = request.key;\n return show.assetList[assetKey];\n};\n\nvar selectShowState = exports.selectShowState = function selectShowState(state) {\n return state.show;\n};\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-helmet\");\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"redux-saga/effects\");\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar axios = __webpack_require__(60);\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(61),\n _require$api = _require.api,\n apiHost = _require$api.apiHost,\n apiPort = _require$api.apiPort;\n\nvar lbryApiUri = 'http://' + apiHost + ':' + apiPort;\n\nvar _require2 = __webpack_require__(17),\n chooseGaLbrynetPublishLabel = _require2.chooseGaLbrynetPublishLabel,\n sendGATimingEvent = _require2.sendGATimingEvent;\n\nvar handleLbrynetResponse = function handleLbrynetResponse(_ref, resolve, reject) {\n var data = _ref.data;\n\n logger.debug('lbry api data:', data);\n if (data.result) {\n // check for an error\n if (data.result.error) {\n logger.debug('Lbrynet api error:', data.result.error);\n reject(new Error(data.result.error));\n return;\n };\n resolve(data.result);\n return;\n }\n // fallback in case it just timed out\n reject(JSON.stringify(data));\n};\n\nmodule.exports = {\n publishClaim: function publishClaim(publishParams) {\n logger.debug('lbryApi >> Publishing claim to \"' + publishParams.name + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'publish',\n params: publishParams\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'publish', chooseGaLbrynetPublishLabel(publishParams), gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getClaim: function getClaim(uri) {\n logger.debug('lbryApi >> Getting Claim for \"' + uri + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'get',\n params: { uri: uri, timeout: 20 }\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'getClaim', 'GET', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getClaimList: function getClaimList(claimName) {\n logger.debug('lbryApi >> Getting claim_list for \"' + claimName + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'claim_list',\n params: { name: claimName }\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'getClaimList', 'CLAIM_LIST', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n resolveUri: function resolveUri(uri) {\n logger.debug('lbryApi >> Resolving URI for \"' + uri + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'resolve',\n params: { uri: uri }\n }).then(function (_ref2) {\n var data = _ref2.data;\n\n sendGATimingEvent('lbrynet', 'resolveUri', 'RESOLVE', gaStartTime, Date.now());\n if (data.result[uri].error) {\n // check for errors\n reject(data.result[uri].error);\n } else {\n // if no errors, resolve\n resolve(data.result[uri]);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getDownloadDirectory: function getDownloadDirectory() {\n logger.debug('lbryApi >> Retrieving the download directory path from lbry daemon...');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'settings_get'\n }).then(function (_ref3) {\n var data = _ref3.data;\n\n sendGATimingEvent('lbrynet', 'getDownloadDirectory', 'SETTINGS_GET', gaStartTime, Date.now());\n if (data.result) {\n resolve(data.result.download_directory);\n } else {\n return new Error('Successfully connected to lbry daemon, but unable to retrieve the download directory.');\n }\n }).catch(function (error) {\n logger.error('Lbrynet Error:', error);\n resolve('/home/lbry/Downloads/');\n });\n });\n },\n createChannel: function createChannel(name) {\n logger.debug('lbryApi >> Creating channel for ' + name + '...');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'channel_new',\n params: {\n channel_name: name,\n amount: 0.1\n }\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'createChannel', 'CHANNEL_NEW', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n }\n};\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\nvar ua = __webpack_require__(62);\n\nvar _require = __webpack_require__(5),\n googleId = _require.analytics.googleId,\n title = _require.details.title;\n\nfunction createServeEventParams(headers, ip, originalUrl) {\n return {\n eventCategory: 'client requests',\n eventAction: 'serve request',\n eventLabel: originalUrl,\n ipOverride: ip,\n userAgentOverride: headers['user-agent']\n };\n};\n\nfunction createPublishTimingEventParams(category, variable, label, startTime, endTime) {\n var duration = endTime - startTime;\n return {\n userTimingCategory: category,\n userTimingVariableName: variable,\n userTimingTime: duration,\n userTimingLabel: label\n };\n};\n\nfunction sendGoogleAnalyticsEvent(ip, params) {\n var visitorId = ip.replace(/\\./g, '-');\n var visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.event(params, function (err) {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n });\n};\n\nfunction sendGoogleAnalyticsTiming(visitorId, params) {\n var visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.timing(params, function (err) {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n logger.debug('Timing event successfully sent to google analytics');\n });\n};\n\nmodule.exports = {\n sendGAServeEvent: function sendGAServeEvent(headers, ip, originalUrl) {\n var params = createServeEventParams(headers, ip, originalUrl);\n sendGoogleAnalyticsEvent(ip, params);\n },\n sendGATimingEvent: function sendGATimingEvent(category, variable, label, startTime, endTime) {\n var params = createPublishTimingEventParams(category, variable, label, startTime, endTime);\n sendGoogleAnalyticsTiming(title, params);\n },\n chooseGaLbrynetPublishLabel: function chooseGaLbrynetPublishLabel(_ref) {\n var channelName = _ref.channel_name,\n channelId = _ref.channel_id;\n\n return channelName || channelId ? 'PUBLISH_IN_CHANNEL_CLAIM' : 'PUBLISH_ANONYMOUS_CLAIM';\n }\n};\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"redux\");\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.updateLoggedInChannel = updateLoggedInChannel;\n\nvar _channel_action_types = __webpack_require__(36);\n\nvar actions = _interopRequireWildcard(_channel_action_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// export action creators\n\nfunction updateLoggedInChannel(name, shortId, longId) {\n return {\n type: actions.CHANNEL_UPDATE,\n data: {\n name: name,\n shortId: shortId,\n longId: longId\n }\n };\n};\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _ActiveStatusBar = __webpack_require__(114);\n\nvar _ActiveStatusBar2 = _interopRequireDefault(_ActiveStatusBar);\n\nvar _InactiveStatusBar = __webpack_require__(115);\n\nvar _InactiveStatusBar2 = _interopRequireDefault(_InactiveStatusBar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ProgressBar = function (_React$Component) {\n _inherits(ProgressBar, _React$Component);\n\n function ProgressBar(props) {\n _classCallCheck(this, ProgressBar);\n\n var _this = _possibleConstructorReturn(this, (ProgressBar.__proto__ || Object.getPrototypeOf(ProgressBar)).call(this, props));\n\n _this.state = {\n bars: [],\n index: 0,\n incrementer: 1\n };\n _this.createBars = _this.createBars.bind(_this);\n _this.startProgressBar = _this.startProgressBar.bind(_this);\n _this.updateProgressBar = _this.updateProgressBar.bind(_this);\n _this.stopProgressBar = _this.stopProgressBar.bind(_this);\n return _this;\n }\n\n _createClass(ProgressBar, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.createBars();\n this.startProgressBar();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.stopProgressBar();\n }\n }, {\n key: 'createBars',\n value: function createBars() {\n var bars = [];\n for (var i = 0; i <= this.props.size; i++) {\n bars.push({ isActive: false });\n }\n this.setState({ bars: bars });\n }\n }, {\n key: 'startProgressBar',\n value: function startProgressBar() {\n this.updateInterval = setInterval(this.updateProgressBar.bind(this), 300);\n }\n }, {\n key: 'updateProgressBar',\n value: function updateProgressBar() {\n var index = this.state.index;\n var incrementer = this.state.incrementer;\n var bars = this.state.bars;\n // flip incrementer if necessary, to stay in bounds\n if (index < 0 || index > this.props.size) {\n incrementer = incrementer * -1;\n index += incrementer;\n }\n // update the indexed bar\n if (incrementer > 0) {\n bars[index].isActive = true;\n } else {\n bars[index].isActive = false;\n };\n // increment index\n index += incrementer;\n // update state\n this.setState({\n bars: bars,\n incrementer: incrementer,\n index: index\n });\n }\n }, {\n key: 'stopProgressBar',\n value: function stopProgressBar() {\n clearInterval(this.updateInterval);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n this.state.bars.map(function (bar, index) {\n return bar.isActive ? _react2.default.createElement(_ActiveStatusBar2.default, { key: index }) : _react2.default.createElement(_InactiveStatusBar2.default, { key: index });\n })\n );\n }\n }]);\n\n return ProgressBar;\n}(_react2.default.Component);\n\n;\n\nProgressBar.propTypes = {\n size: _propTypes2.default.number.isRequired\n};\n\nexports.default = ProgressBar;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ErrorPage = function (_React$Component) {\n _inherits(ErrorPage, _React$Component);\n\n function ErrorPage() {\n _classCallCheck(this, ErrorPage);\n\n return _possibleConstructorReturn(this, (ErrorPage.__proto__ || Object.getPrototypeOf(ErrorPage)).apply(this, arguments));\n }\n\n _createClass(ErrorPage, [{\n key: 'render',\n value: function render() {\n var error = this.props.error;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'p',\n null,\n error\n )\n )\n );\n }\n }]);\n\n return ErrorPage;\n}(_react2.default.Component);\n\n;\n\nErrorPage.propTypes = {\n error: _propTypes2.default.string.isRequired\n};\n\nexports.default = ErrorPage;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"passport\");\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction MysqlConfig() {\n var _this = this;\n\n this.database = 'default';\n this.username = 'default';\n this.password = 'default';\n this.configure = function (config) {\n if (!config) {\n return console.log('No MySQL config received.');\n }\n var database = config.database,\n username = config.username,\n password = config.password;\n\n _this.database = database;\n _this.username = username;\n _this.password = password;\n };\n};\n\nmodule.exports = new MysqlConfig();\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction SlackConfig() {\n var _this = this;\n\n this.slackWebHook = 'default';\n this.slackErrorChannel = 'default';\n this.slackInfoChannel = 'default';\n this.configure = function (config) {\n if (!config) {\n return console.log('No slack config received.');\n }\n var slackWebHook = config.slackWebHook,\n slackErrorChannel = config.slackErrorChannel,\n slackInfoChannel = config.slackInfoChannel;\n\n _this.slackWebHook = slackWebHook;\n _this.slackErrorChannel = slackErrorChannel;\n _this.slackInfoChannel = slackInfoChannel;\n };\n};\n\nmodule.exports = new SlackConfig();\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"passport-local\");\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"sequelize\");\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = {\n returnShortId: function returnShortId(claimsArray, longId) {\n var claimIndex = void 0;\n var shortId = longId.substring(0, 1); // default short id is the first letter\n var shortIdLength = 0;\n // find the index of this claim id\n claimIndex = claimsArray.findIndex(function (element) {\n return element.claimId === longId;\n });\n if (claimIndex < 0) {\n throw new Error('claim id not found in claims list');\n }\n // get an array of all claims with lower height\n var possibleMatches = claimsArray.slice(0, claimIndex);\n // remove certificates with the same prefixes until none are left.\n while (possibleMatches.length > 0) {\n shortIdLength += 1;\n shortId = longId.substring(0, shortIdLength);\n possibleMatches = possibleMatches.filter(function (element) {\n return element.claimId && element.claimId.substring(0, shortIdLength) === shortId;\n });\n }\n return shortId;\n }\n};\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\nvar fs = __webpack_require__(75);\n\nvar _require = __webpack_require__(5),\n details = _require.details,\n publishing = _require.publishing;\n\nmodule.exports = {\n parsePublishApiRequestBody: function parsePublishApiRequestBody(_ref) {\n var name = _ref.name,\n nsfw = _ref.nsfw,\n license = _ref.license,\n title = _ref.title,\n description = _ref.description,\n thumbnail = _ref.thumbnail;\n\n // validate name\n if (!name) {\n throw new Error('no name field found in request');\n }\n var invalidNameCharacters = /[^A-Za-z0-9,-]/.exec(name);\n if (invalidNameCharacters) {\n throw new Error('The claim name you provided is not allowed. Only the following characters are allowed: A-Z, a-z, 0-9, and \"-\"');\n }\n // optional parameters\n nsfw = nsfw === 'true';\n license = license || null;\n title = title || null;\n description = description || null;\n thumbnail = thumbnail || null;\n // return results\n return {\n name: name,\n nsfw: nsfw,\n license: license,\n title: title,\n description: description,\n thumbnail: thumbnail\n };\n },\n parsePublishApiRequestFiles: function parsePublishApiRequestFiles(_ref2) {\n var file = _ref2.file,\n thumbnail = _ref2.thumbnail;\n\n // make sure a file was provided\n if (!file) {\n throw new Error('no file with key of [file] found in request');\n }\n if (!file.path) {\n throw new Error('no file path found');\n }\n if (!file.type) {\n throw new Error('no file type found');\n }\n if (!file.size) {\n throw new Error('no file type found');\n }\n // validate the file name\n if (/'/.test(file.name)) {\n throw new Error('apostrophes are not allowed in the file name');\n }\n // validate the file\n module.exports.validateFileTypeAndSize(file);\n // return results\n return {\n fileName: file.name,\n filePath: file.path,\n fileType: file.type,\n thumbnailFileName: thumbnail ? thumbnail.name : null,\n thumbnailFilePath: thumbnail ? thumbnail.path : null,\n thumbnailFileType: thumbnail ? thumbnail.type : null\n };\n },\n validateFileTypeAndSize: function validateFileTypeAndSize(file) {\n // check file type and size\n switch (file.type) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n if (file.size > 10000000) {\n logger.debug('publish > file validation > .jpeg/.jpg/.png was too big');\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .gif was too big');\n throw new Error('Sorry, .gifs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .mp4 was too big');\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n logger.debug('publish > file validation > unrecognized file type');\n throw new Error('The ' + file.type + ' content type is not supported. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n return file;\n },\n createBasicPublishParams: function createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail) {\n logger.debug('Creating Publish Parameters');\n // provide defaults for title\n if (title === null || title.trim() === '') {\n title = name;\n }\n // provide default for description\n if (description === null || description.trim() === '') {\n description = '';\n }\n // provide default for license\n if (license === null || license.trim() === '') {\n license = ' '; // default to empty string\n }\n // create the publish params\n var publishParams = {\n name: name,\n file_path: filePath,\n bid: 0.01,\n metadata: {\n description: description,\n title: title,\n author: details.title,\n language: 'en',\n license: license,\n nsfw: nsfw\n },\n claim_address: publishing.primaryClaimAddress\n };\n // add thumbnail to channel if video\n if (thumbnail) {\n publishParams['metadata']['thumbnail'] = thumbnail;\n }\n return publishParams;\n },\n createThumbnailPublishParams: function createThumbnailPublishParams(thumbnailFilePath, claimName, license, nsfw) {\n if (!thumbnailFilePath) {\n return;\n }\n logger.debug('Creating Thumbnail Publish Parameters');\n // create the publish params\n return {\n name: claimName + '-thumb',\n file_path: thumbnailFilePath,\n bid: 0.01,\n metadata: {\n title: claimName + ' thumbnail',\n description: 'a thumbnail for ' + claimName,\n author: details.title,\n language: 'en',\n license: license,\n nsfw: nsfw\n },\n claim_address: publishing.primaryClaimAddress,\n channel_name: publishing.thumbnailChannel,\n channel_id: publishing.thumbnailChannelId\n };\n },\n deleteTemporaryFile: function deleteTemporaryFile(filePath) {\n fs.unlink(filePath, function (err) {\n if (err) {\n logger.error('error deleting temporary file ' + filePath);\n throw err;\n }\n logger.debug('successfully deleted ' + filePath);\n });\n },\n addGetResultsToFileData: function addGetResultsToFileData(fileInfo, getResult) {\n fileInfo.fileName = getResult.file_name;\n fileInfo.filePath = getResult.download_path;\n return fileInfo;\n },\n createFileData: function createFileData(_ref3) {\n var name = _ref3.name,\n claimId = _ref3.claimId,\n outpoint = _ref3.outpoint,\n height = _ref3.height,\n address = _ref3.address,\n nsfw = _ref3.nsfw,\n contentType = _ref3.contentType;\n\n return {\n name: name,\n claimId: claimId,\n outpoint: outpoint,\n height: height,\n address: address,\n fileName: '',\n filePath: '',\n fileType: contentType,\n nsfw: nsfw\n };\n }\n};\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n handleErrorResponse: function handleErrorResponse(originalUrl, ip, error, res) {\n logger.error('Error on ' + originalUrl, module.exports.useObjectPropertiesIfNoKeys(error));\n\n var _module$exports$retur = module.exports.returnErrorMessageAndStatus(error),\n _module$exports$retur2 = _slicedToArray(_module$exports$retur, 2),\n status = _module$exports$retur2[0],\n message = _module$exports$retur2[1];\n\n res.status(status).json(module.exports.createErrorResponsePayload(status, message));\n },\n returnErrorMessageAndStatus: function returnErrorMessageAndStatus(error) {\n var status = void 0,\n message = void 0;\n // check for daemon being turned off\n if (error.code === 'ECONNREFUSED') {\n status = 503;\n message = 'Connection refused. The daemon may not be running.';\n // fallback for everything else\n } else {\n status = 400;\n if (error.message) {\n message = error.message;\n } else {\n message = error;\n };\n };\n return [status, message];\n },\n useObjectPropertiesIfNoKeys: function useObjectPropertiesIfNoKeys(err) {\n if (Object.keys(err).length === 0) {\n var newErrorObject = {};\n Object.getOwnPropertyNames(err).forEach(function (key) {\n newErrorObject[key] = err[key];\n });\n return newErrorObject;\n }\n return err;\n },\n createErrorResponsePayload: function createErrorResponsePayload(status, message) {\n return {\n status: status,\n success: false,\n message: message\n };\n }\n};\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar db = __webpack_require__(6);\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(77),\n returnPaginatedChannelClaims = _require.returnPaginatedChannelClaims;\n\nvar NO_CHANNEL = 'NO_CHANNEL';\nvar NO_CLAIM = 'NO_CLAIM';\nvar NO_FILE = 'NO_FILE';\n\nmodule.exports = {\n getClaimId: function getClaimId(channelName, channelClaimId, name, claimId) {\n if (channelName) {\n return module.exports.getClaimIdByChannel(channelName, channelClaimId, name);\n } else {\n return module.exports.getClaimIdByClaim(name, claimId);\n }\n },\n getClaimIdByClaim: function getClaimIdByClaim(claimName, claimId) {\n logger.debug('getClaimIdByClaim(' + claimName + ', ' + claimId + ')');\n return new Promise(function (resolve, reject) {\n db.Claim.getLongClaimId(claimName, claimId).then(function (longClaimId) {\n if (!longClaimId) {\n resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getClaimIdByChannel: function getClaimIdByChannel(channelName, channelClaimId, claimName) {\n logger.debug('getClaimIdByChannel(' + channelName + ', ' + channelClaimId + ', ' + claimName + ')');\n return new Promise(function (resolve, reject) {\n db.Certificate.getLongChannelId(channelName, channelClaimId) // 1. get the long channel id\n .then(function (longChannelId) {\n if (!longChannelId) {\n return [null, null];\n }\n return Promise.all([longChannelId, db.Claim.getClaimIdByLongChannelId(longChannelId, claimName)]); // 2. get the long claim id\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n longChannelId = _ref2[0],\n longClaimId = _ref2[1];\n\n if (!longChannelId) {\n return resolve(NO_CHANNEL);\n }\n if (!longClaimId) {\n return resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getChannelData: function getChannelData(channelName, channelClaimId, page) {\n return new Promise(function (resolve, reject) {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId).then(function (longChannelClaimId) {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Certificate.getShortChannelIdFromLongChannelId(longChannelClaimId, channelName)]);\n }).then(function (_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n longChannelClaimId = _ref4[0],\n shortChannelClaimId = _ref4[1];\n\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. return all the channel information\n resolve({\n channelName: channelName,\n longChannelClaimId: longChannelClaimId,\n shortChannelClaimId: shortChannelClaimId\n });\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getChannelClaims: function getChannelClaims(channelName, channelClaimId, page) {\n return new Promise(function (resolve, reject) {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId).then(function (longChannelClaimId) {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Claim.getAllChannelClaims(longChannelClaimId)]);\n }).then(function (_ref5) {\n var _ref6 = _slicedToArray(_ref5, 2),\n longChannelClaimId = _ref6[0],\n channelClaimsArray = _ref6[1];\n\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. format the data for the view, including pagination\n var paginatedChannelViewData = returnPaginatedChannelClaims(channelName, longChannelClaimId, channelClaimsArray, page);\n // 4. return all the channel information and contents\n resolve(paginatedChannelViewData);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getLocalFileRecord: function getLocalFileRecord(claimId, name) {\n return db.File.findOne({ where: { claimId: claimId, name: name } }).then(function (file) {\n if (!file) {\n return NO_FILE;\n }\n return file.dataValues;\n });\n }\n};\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _server = __webpack_require__(32);\n\nvar _redux = __webpack_require__(18);\n\nvar _index = __webpack_require__(33);\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _index3 = __webpack_require__(38);\n\nvar _index4 = _interopRequireDefault(_index3);\n\nvar _app = __webpack_require__(39);\n\nvar _app2 = _interopRequireDefault(_app);\n\nvar _renderFullPage = __webpack_require__(45);\n\nvar _renderFullPage2 = _interopRequireDefault(_renderFullPage);\n\nvar _reactHelmet = __webpack_require__(14);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = function (req, res) {\n var context = {};\n\n // create a new Redux store instance\n var store = (0, _redux.createStore)(_index2.default);\n\n // render component to a string\n var html = (0, _server.renderToString)(_react2.default.createElement(\n _reactRedux.Provider,\n { store: store },\n _react2.default.createElement(\n _reactRouterDom.StaticRouter,\n { location: req.url, context: context },\n _react2.default.createElement(\n _index4.default,\n null,\n _react2.default.createElement(_app2.default, null)\n )\n )\n ));\n\n // get head tags from helmet\n var helmet = _reactHelmet2.default.renderStatic();\n\n // check for a redirect\n if (context.url) {\n // Somewhere a `` was rendered\n return res.redirect(301, context.url);\n } else {}\n // we're good, send the response\n\n\n // get the initial state from our Redux store\n var preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send((0, _renderFullPage2.default)(helmet, html, preloadedState));\n};\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-dom/server\");\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _redux = __webpack_require__(18);\n\nvar _publish = __webpack_require__(79);\n\nvar _publish2 = _interopRequireDefault(_publish);\n\nvar _channel = __webpack_require__(80);\n\nvar _channel2 = _interopRequireDefault(_channel);\n\nvar _show = __webpack_require__(81);\n\nvar _show2 = _interopRequireDefault(_show);\n\nvar _site = __webpack_require__(82);\n\nvar _site2 = _interopRequireDefault(_site);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = (0, _redux.combineReducers)({\n channel: _channel2.default,\n publish: _publish2.default,\n show: _show2.default,\n site: _site2.default\n});\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar FILE_SELECTED = exports.FILE_SELECTED = 'FILE_SELECTED';\nvar FILE_CLEAR = exports.FILE_CLEAR = 'FILE_CLEAR';\nvar METADATA_UPDATE = exports.METADATA_UPDATE = 'METADATA_UPDATE';\nvar CLAIM_UPDATE = exports.CLAIM_UPDATE = 'CLAIM_UPDATE';\nvar SET_PUBLISH_IN_CHANNEL = exports.SET_PUBLISH_IN_CHANNEL = 'SET_PUBLISH_IN_CHANNEL';\nvar PUBLISH_STATUS_UPDATE = exports.PUBLISH_STATUS_UPDATE = 'PUBLISH_STATUS_UPDATE';\nvar ERROR_UPDATE = exports.ERROR_UPDATE = 'ERROR_UPDATE';\nvar SELECTED_CHANNEL_UPDATE = exports.SELECTED_CHANNEL_UPDATE = 'SELECTED_CHANNEL_UPDATE';\nvar TOGGLE_METADATA_INPUTS = exports.TOGGLE_METADATA_INPUTS = 'TOGGLE_METADATA_INPUTS';\nvar THUMBNAIL_NEW = exports.THUMBNAIL_NEW = 'THUMBNAIL_NEW';\nvar PUBLISH_START = exports.PUBLISH_START = 'PUBLISH_START';\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LOGIN = exports.LOGIN = 'Existing';\nvar CREATE = exports.CREATE = 'New';\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CHANNEL_UPDATE = exports.CHANNEL_UPDATE = 'CHANNEL_UPDATE';\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LOCAL_CHECK = exports.LOCAL_CHECK = 'LOCAL_CHECK';\nvar UNAVAILABLE = exports.UNAVAILABLE = 'UNAVAILABLE';\nvar ERROR = exports.ERROR = 'ERROR';\nvar AVAILABLE = exports.AVAILABLE = 'AVAILABLE';\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactGa = __webpack_require__(83);\n\nvar _reactGa2 = _interopRequireDefault(_reactGa);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(5),\n googleId = _require.analytics.googleId;\n\n_reactGa2.default.initialize(googleId);\n\nvar GAListener = function (_React$Component) {\n _inherits(GAListener, _React$Component);\n\n function GAListener() {\n _classCallCheck(this, GAListener);\n\n return _possibleConstructorReturn(this, (GAListener.__proto__ || Object.getPrototypeOf(GAListener)).apply(this, arguments));\n }\n\n _createClass(GAListener, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.sendPageView(this.props.history.location);\n this.props.history.listen(this.sendPageView);\n }\n }, {\n key: 'sendPageView',\n value: function sendPageView(location) {\n _reactGa2.default.set({ page: location.pathname });\n _reactGa2.default.pageview(location.pathname);\n }\n }, {\n key: 'render',\n value: function render() {\n return this.props.children;\n }\n }]);\n\n return GAListener;\n}(_react2.default.Component);\n\nexports.default = (0, _reactRouterDom.withRouter)(GAListener);\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _HomePage = __webpack_require__(84);\n\nvar _HomePage2 = _interopRequireDefault(_HomePage);\n\nvar _AboutPage = __webpack_require__(121);\n\nvar _AboutPage2 = _interopRequireDefault(_AboutPage);\n\nvar _LoginPage = __webpack_require__(122);\n\nvar _LoginPage2 = _interopRequireDefault(_LoginPage);\n\nvar _ShowPage = __webpack_require__(124);\n\nvar _ShowPage2 = _interopRequireDefault(_ShowPage);\n\nvar _FourOhFourPage = __webpack_require__(141);\n\nvar _FourOhFourPage2 = _interopRequireDefault(_FourOhFourPage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// or use the provided local homepage\nvar App = function App() {\n return _react2.default.createElement(\n _reactRouterDom.Switch,\n null,\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/', component: _HomePage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/about', component: _AboutPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/login', component: _LoginPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/:identifier/:claim', component: _ShowPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/:claim', component: _ShowPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { component: _FourOhFourPage2.default })\n );\n};\n\nexports.default = App;\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(95);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n file: publish.file,\n thumbnail: publish.thumbnail,\n fileError: publish.error.file\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n selectFile: function selectFile(file) {\n dispatch((0, _publish.selectFile)(file));\n },\n setFileError: function setFileError(value) {\n dispatch((0, _publish.clearFile)());\n dispatch((0, _publish.updateError)('file', value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _channel = __webpack_require__(19);\n\nvar _view = __webpack_require__(112);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _publish = __webpack_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onChannelLogin: function onChannelLogin(name, shortId, longId) {\n dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));\n dispatch((0, _publish.updateSelectedChannel)(name));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(null, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _channel = __webpack_require__(19);\n\nvar _view = __webpack_require__(113);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _publish = __webpack_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onChannelLogin: function onChannelLogin(name, shortId, longId) {\n dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));\n dispatch((0, _publish.updateSelectedChannel)(name));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(null, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CHANNEL = exports.CHANNEL = 'CHANNEL';\nvar ASSET_LITE = exports.ASSET_LITE = 'ASSET_LITE';\nvar ASSET_DETAILS = exports.ASSET_DETAILS = 'ASSET_DETAILS';\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(128);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _show = __webpack_require__(8);\n\nvar _show2 = __webpack_require__(13);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select error and status\n var error = show.displayAsset.error;\n var status = show.displayAsset.status;\n // select asset\n var asset = (0, _show2.selectAsset)(show);\n // return props\n return {\n error: error,\n status: status,\n asset: asset\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onFileRequest: function onFileRequest(name, claimId) {\n dispatch((0, _show.fileRequested)(name, claimId));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (helmet, html, preloadedState) {\n // take the html and preloadedState and return the full page\n return '\\n \\n \\n \\n \\n \\n \\n \\n ' + helmet.title.toString() + '\\n ' + helmet.meta.toString() + '\\n ' + helmet.link.toString() + '\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
' + html + '
\\n
\\n \\n \\n \\n \\n ';\n};\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar selectSiteState = exports.selectSiteState = function selectSiteState(state) {\n return state.site;\n};\n\nvar selectSiteHost = exports.selectSiteHost = function selectSiteHost(state) {\n return state.site.host;\n};\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(48);\n__webpack_require__(49);\nmodule.exports = __webpack_require__(50);\n\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"babel-polyfill\");\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"whatwg-fetch\");\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// app dependencies\nvar express = __webpack_require__(51);\nvar bodyParser = __webpack_require__(52);\nvar expressHandlebars = __webpack_require__(53);\nvar Handlebars = __webpack_require__(54);\nvar helmet = __webpack_require__(55);\nvar passport = __webpack_require__(22);\n\nvar _require = __webpack_require__(56),\n serializeSpeechUser = _require.serializeSpeechUser,\n deserializeSpeechUser = _require.deserializeSpeechUser;\n\nvar cookieSession = __webpack_require__(57);\nvar http = __webpack_require__(58);\n// logging dependencies\nvar logger = __webpack_require__(2);\n\nfunction SpeechServer() {\n var _this = this;\n\n this.configureMysql = function (mysqlConfig) {\n __webpack_require__(23).configure(mysqlConfig);\n };\n this.configureSite = function (siteConfig) {\n __webpack_require__(5).configure(siteConfig);\n _this.sessionKey = siteConfig.auth.sessionKey;\n _this.PORT = siteConfig.details.port;\n };\n this.configureSlack = function (slackConfig) {\n __webpack_require__(24).configure(slackConfig);\n };\n this.createApp = function () {\n // create an Express application\n var app = express();\n\n // trust the proxy to get ip address for us\n app.enable('trust proxy');\n\n // add middleware\n app.use(helmet()); // set HTTP headers to protect against well-known web vulnerabilties\n app.use(express.static(__dirname + '/public')); // 'express.static' to serve static files from public directory\n app.use(bodyParser.json()); // 'body parser' for parsing application/json\n app.use(bodyParser.urlencoded({ extended: true })); // 'body parser' for parsing application/x-www-form-urlencoded\n app.use(function (req, res, next) {\n // custom logging middleware to log all incoming http requests\n logger.verbose('Request on ' + req.originalUrl + ' from ' + req.ip);\n next();\n });\n\n // configure passport\n passport.serializeUser(serializeSpeechUser);\n passport.deserializeUser(deserializeSpeechUser);\n var localSignupStrategy = __webpack_require__(59);\n var localLoginStrategy = __webpack_require__(70);\n passport.use('local-signup', localSignupStrategy);\n passport.use('local-login', localLoginStrategy);\n // initialize passport\n app.use(cookieSession({\n name: 'session',\n keys: [_this.sessionKey],\n maxAge: 24 * 60 * 60 * 1000 // i.e. 24 hours\n }));\n app.use(passport.initialize());\n app.use(passport.session());\n\n // configure handlebars & register it with express app\n var hbs = expressHandlebars.create({\n defaultLayout: 'embed',\n handlebars: Handlebars\n });\n app.engine('handlebars', hbs.engine);\n app.set('view engine', 'handlebars');\n\n // set the routes on the app\n __webpack_require__(71)(app);\n __webpack_require__(72)(app);\n __webpack_require__(78)(app);\n __webpack_require__(143)(app);\n __webpack_require__(154)(app);\n\n _this.app = app;\n };\n this.initialize = function () {\n __webpack_require__(155)(logger);\n __webpack_require__(157)(logger);\n _this.createApp();\n _this.server = http.Server(_this.app);\n };\n this.start = function () {\n var db = __webpack_require__(6);\n // sync sequelize\n db.sequelize.sync()\n // start the server\n .then(function () {\n _this.server.listen(_this.PORT, function () {\n logger.info('Server is listening on PORT ' + _this.PORT);\n });\n }).catch(function (error) {\n logger.error('Startup Error:', error);\n });\n };\n};\n\nmodule.exports = SpeechServer;\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"express\");\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"body-parser\");\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"express-handlebars\");\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"handlebars\");\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"helmet\");\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n serializeSpeechUser: function serializeSpeechUser(user, done) {\n // returns user data to be serialized into session\n logger.debug('serializing user');\n done(null, user);\n },\n deserializeSpeechUser: function deserializeSpeechUser(user, done) {\n // deserializes session and populates additional info to req.user\n logger.debug('deserializing user');\n done(null, user);\n }\n};\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"cookie-session\");\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"http\");\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar PassportLocalStrategy = __webpack_require__(25).Strategy;\nvar lbryApi = __webpack_require__(16);\nvar logger = __webpack_require__(2);\nvar db = __webpack_require__(6);\n\nmodule.exports = new PassportLocalStrategy({\n usernameField: 'username',\n passwordField: 'password'\n}, function (username, password, done) {\n logger.verbose('new channel signup request. user: ' + username + ' pass: ' + password + ' .');\n var userInfo = {};\n // server-side validaton of inputs (username, password)\n\n // create the channel and retrieve the metadata\n return lbryApi.createChannel('@' + username).then(function (tx) {\n // create user record\n var userData = {\n userName: username,\n password: password\n };\n logger.verbose('userData >', userData);\n // create user record\n var channelData = {\n channelName: '@' + username,\n channelClaimId: tx.claim_id\n };\n logger.verbose('channelData >', channelData);\n // create certificate record\n var certificateData = {\n claimId: tx.claim_id,\n name: '@' + username\n // address,\n };\n logger.verbose('certificateData >', certificateData);\n // save user and certificate to db\n return Promise.all([db.User.create(userData), db.Channel.create(channelData), db.Certificate.create(certificateData)]);\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 3),\n newUser = _ref2[0],\n newChannel = _ref2[1],\n newCertificate = _ref2[2];\n\n logger.verbose('user and certificate successfully created');\n // store the relevant newUser info to be passed back for req.User\n userInfo['id'] = newUser.id;\n userInfo['userName'] = newUser.userName;\n userInfo['channelName'] = newChannel.channelName;\n userInfo['channelClaimId'] = newChannel.channelClaimId;\n // associate the instances\n return Promise.all([newCertificate.setChannel(newChannel), newChannel.setUser(newUser)]);\n }).then(function () {\n logger.verbose('user and certificate successfully associated');\n return db.Certificate.getShortChannelIdFromLongChannelId(userInfo.channelClaimId, userInfo.channelName);\n }).then(function (shortChannelId) {\n userInfo['shortChannelId'] = shortChannelId;\n return done(null, userInfo);\n }).catch(function (error) {\n logger.error('signup error', error);\n return done(error);\n });\n});\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"axios\");\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar lbryConfig = {\n api: {\n apiHost: 'localhost',\n apiPort: '5279'\n }\n};\n\nmodule.exports = lbryConfig;\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"universal-analytics\");\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(27),\n returnShortId = _require.returnShortId;\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n INTEGER = _ref.INTEGER,\n TEXT = _ref.TEXT,\n DECIMAL = _ref.DECIMAL;\n\n var Certificate = sequelize.define('Certificate', {\n address: {\n type: STRING,\n default: null\n },\n amount: {\n type: DECIMAL(19, 8),\n default: null\n },\n claimId: {\n type: STRING,\n default: null\n },\n claimSequence: {\n type: INTEGER,\n default: null\n },\n decodedClaim: {\n type: BOOLEAN,\n default: null\n },\n depth: {\n type: INTEGER,\n default: null\n },\n effectiveAmount: {\n type: DECIMAL(19, 8),\n default: null\n },\n hasSignature: {\n type: BOOLEAN,\n default: null\n },\n height: {\n type: INTEGER,\n default: null\n },\n hex: {\n type: TEXT('long'),\n default: null\n },\n name: {\n type: STRING,\n default: null\n },\n nout: {\n type: INTEGER,\n default: null\n },\n txid: {\n type: STRING,\n default: null\n },\n validAtHeight: {\n type: INTEGER,\n default: null\n },\n outpoint: {\n type: STRING,\n default: null\n },\n valueVersion: {\n type: STRING,\n default: null\n },\n claimType: {\n type: STRING,\n default: null\n },\n certificateVersion: {\n type: STRING,\n default: null\n },\n keyType: {\n type: STRING,\n default: null\n },\n publicKey: {\n type: TEXT('long'),\n default: null\n }\n }, {\n freezeTableName: true\n });\n\n Certificate.associate = function (db) {\n Certificate.belongsTo(db.Channel, {\n foreignKey: {\n allowNull: true\n }\n });\n };\n\n Certificate.getShortChannelIdFromLongChannelId = function (longChannelId, channelName) {\n var _this = this;\n\n logger.debug('getShortChannelIdFromLongChannelId ' + channelName + ':' + longChannelId);\n return new Promise(function (resolve, reject) {\n _this.findAll({\n where: { name: channelName },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n throw new Error('No channel(s) found with that channel name');\n default:\n return resolve(returnShortId(result, longChannelId));\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromShortChannelId = function (channelName, channelClaimId) {\n var _this2 = this;\n\n logger.debug('getLongChannelIdFromShortChannelId(' + channelName + ', ' + channelClaimId + ')');\n return new Promise(function (resolve, reject) {\n _this2.findAll({\n where: {\n name: channelName,\n claimId: {\n $like: channelClaimId + '%'\n }\n },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n // note results must be sorted\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromChannelName = function (channelName) {\n var _this3 = this;\n\n logger.debug('getLongChannelIdFromChannelName(' + channelName + ')');\n return new Promise(function (resolve, reject) {\n _this3.findAll({\n where: { name: channelName },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.validateLongChannelId = function (name, claimId) {\n var _this4 = this;\n\n logger.debug('validateLongChannelId(' + name + ', ' + claimId + ')');\n return new Promise(function (resolve, reject) {\n _this4.findOne({\n where: { name: name, claimId: claimId }\n }).then(function (result) {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelId = function (channelName, channelClaimId) {\n logger.debug('getLongChannelId(' + channelName + ', ' + channelClaimId + ')');\n if (channelClaimId && channelClaimId.length === 40) {\n // if a full channel id is provided\n return this.validateLongChannelId(channelName, channelClaimId);\n } else if (channelClaimId && channelClaimId.length < 40) {\n // if a short channel id is provided\n return this.getLongChannelIdFromShortChannelId(channelName, channelClaimId);\n } else {\n return this.getLongChannelIdFromChannelName(channelName); // if no channel id provided\n }\n };\n\n return Certificate;\n};\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING;\n\n var Channel = sequelize.define('Channel', {\n channelName: {\n type: STRING,\n allowNull: false\n },\n channelClaimId: {\n type: STRING,\n allowNull: false\n }\n }, {\n freezeTableName: true\n });\n\n Channel.associate = function (db) {\n Channel.belongsTo(db.User);\n Channel.hasOne(db.Certificate);\n };\n\n return Channel;\n};\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(27),\n returnShortId = _require.returnShortId;\n\nvar _require2 = __webpack_require__(5),\n defaultThumbnail = _require2.assetDefaults.thumbnail,\n host = _require2.details.host;\n\nfunction determineFileExtensionFromContentType(contentType) {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n return 'jpeg';\n case 'image/png':\n return 'png';\n case 'image/gif':\n return 'gif';\n case 'video/mp4':\n return 'mp4';\n default:\n logger.debug('setting unknown file type as file extension jpeg');\n return 'jpeg';\n }\n};\n\nfunction determineThumbnail(storedThumbnail, defaultThumbnail) {\n if (storedThumbnail === '') {\n return defaultThumbnail;\n }\n return storedThumbnail;\n};\n\nfunction prepareClaimData(claim) {\n // logger.debug('preparing claim data based on resolved data:', claim);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['host'] = host;\n return claim;\n};\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n INTEGER = _ref.INTEGER,\n TEXT = _ref.TEXT,\n DECIMAL = _ref.DECIMAL;\n\n var Claim = sequelize.define('Claim', {\n address: {\n type: STRING,\n default: null\n },\n amount: {\n type: DECIMAL(19, 8),\n default: null\n },\n claimId: {\n type: STRING,\n default: null\n },\n claimSequence: {\n type: INTEGER,\n default: null\n },\n decodedClaim: {\n type: BOOLEAN,\n default: null\n },\n depth: {\n type: INTEGER,\n default: null\n },\n effectiveAmount: {\n type: DECIMAL(19, 8),\n default: null\n },\n hasSignature: {\n type: BOOLEAN,\n default: null\n },\n height: {\n type: INTEGER,\n default: null\n },\n hex: {\n type: TEXT('long'),\n default: null\n },\n name: {\n type: STRING,\n default: null\n },\n nout: {\n type: INTEGER,\n default: null\n },\n txid: {\n type: STRING,\n default: null\n },\n validAtHeight: {\n type: INTEGER,\n default: null\n },\n outpoint: {\n type: STRING,\n default: null\n },\n claimType: {\n type: STRING,\n default: null\n },\n certificateId: {\n type: STRING,\n default: null\n },\n author: {\n type: STRING,\n default: null\n },\n description: {\n type: TEXT('long'),\n default: null\n },\n language: {\n type: STRING,\n default: null\n },\n license: {\n type: STRING,\n default: null\n },\n licenseUrl: {\n type: STRING,\n default: null\n },\n nsfw: {\n type: BOOLEAN,\n default: null\n },\n preview: {\n type: STRING,\n default: null\n },\n thumbnail: {\n type: STRING,\n default: null\n },\n title: {\n type: STRING,\n default: null\n },\n metadataVersion: {\n type: STRING,\n default: null\n },\n contentType: {\n type: STRING,\n default: null\n },\n source: {\n type: STRING,\n default: null\n },\n sourceType: {\n type: STRING,\n default: null\n },\n sourceVersion: {\n type: STRING,\n default: null\n },\n streamVersion: {\n type: STRING,\n default: null\n },\n valueVersion: {\n type: STRING,\n default: null\n },\n channelName: {\n type: STRING,\n allowNull: true,\n default: null\n }\n }, {\n freezeTableName: true\n });\n\n Claim.associate = function (db) {\n Claim.belongsTo(db.File, {\n foreignKey: {\n allowNull: true\n }\n });\n };\n\n Claim.getShortClaimIdFromLongClaimId = function (claimId, claimName) {\n var _this = this;\n\n logger.debug('Claim.getShortClaimIdFromLongClaimId for ' + claimName + '#' + claimId);\n return new Promise(function (resolve, reject) {\n _this.findAll({\n where: { name: claimName },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n throw new Error('No claim(s) found with that claim name');\n default:\n resolve(returnShortId(result, claimId));\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getAllChannelClaims = function (channelClaimId) {\n var _this2 = this;\n\n logger.debug('Claim.getAllChannelClaims for ' + channelClaimId);\n return new Promise(function (resolve, reject) {\n _this2.findAll({\n where: { certificateId: channelClaimId },\n order: [['height', 'ASC']],\n raw: true // returns an array of only data, not an array of instances\n }).then(function (channelClaimsArray) {\n // logger.debug('channelclaimsarray length:', channelClaimsArray.length);\n switch (channelClaimsArray.length) {\n case 0:\n return resolve(null);\n default:\n channelClaimsArray.forEach(function (claim) {\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n return claim;\n });\n return resolve(channelClaimsArray);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getClaimIdByLongChannelId = function (channelClaimId, claimName) {\n var _this3 = this;\n\n logger.debug('finding claim id for claim ' + claimName + ' from channel ' + channelClaimId);\n return new Promise(function (resolve, reject) {\n _this3.findAll({\n where: { name: claimName, certificateId: channelClaimId },\n order: [['id', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(result[0].claimId);\n default:\n logger.error(result.length + ' records found for \"' + claimName + '\" in channel \"' + channelClaimId + '\"');\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimIdFromShortClaimId = function (name, shortId) {\n var _this4 = this;\n\n return new Promise(function (resolve, reject) {\n _this4.findAll({\n where: {\n name: name,\n claimId: {\n $like: shortId + '%'\n } },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n // note results must be sorted\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getTopFreeClaimIdByClaimName = function (name) {\n var _this5 = this;\n\n return new Promise(function (resolve, reject) {\n _this5.findAll({\n where: { name: name },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']] // note: maybe height and effective amount need to switch?\n }).then(function (result) {\n logger.debug('length of result', result.length);\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].dataValues.claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.validateLongClaimId = function (name, claimId) {\n var _this6 = this;\n\n return new Promise(function (resolve, reject) {\n _this6.findOne({\n where: { name: name, claimId: claimId }\n }).then(function (result) {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimId = function (claimName, claimId) {\n logger.debug('getLongClaimId(' + claimName + ', ' + claimId + ')');\n if (claimId && claimId.length === 40) {\n // if a full claim id is provided\n return this.validateLongClaimId(claimName, claimId);\n } else if (claimId && claimId.length < 40) {\n return this.getLongClaimIdFromShortClaimId(claimName, claimId); // if a short claim id is provided\n } else {\n return this.getTopFreeClaimIdByClaimName(claimName); // if no claim id is provided\n }\n };\n\n Claim.resolveClaim = function (name, claimId) {\n var _this7 = this;\n\n logger.debug('Claim.resolveClaim: ' + name + ' ' + claimId);\n return new Promise(function (resolve, reject) {\n _this7.findAll({\n where: { name: name, claimId: claimId }\n }).then(function (claimArray) {\n switch (claimArray.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(prepareClaimData(claimArray[0].dataValues));\n default:\n logger.error('more than one record matches ' + name + '#' + claimId + ' in db.Claim');\n return resolve(prepareClaimData(claimArray[0].dataValues));\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n return Claim;\n};\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n INTEGER = _ref.INTEGER;\n\n var File = sequelize.define('File', {\n name: {\n type: STRING,\n allowNull: false\n },\n claimId: {\n type: STRING,\n allowNull: false\n },\n address: {\n type: STRING,\n allowNull: false\n },\n outpoint: {\n type: STRING,\n allowNull: false\n },\n height: {\n type: INTEGER,\n allowNull: false,\n default: 0\n },\n fileName: {\n type: STRING,\n allowNull: false\n },\n filePath: {\n type: STRING,\n allowNull: false\n },\n fileType: {\n type: STRING\n },\n nsfw: {\n type: BOOLEAN,\n allowNull: false,\n defaultValue: false\n },\n trendingEligible: {\n type: BOOLEAN,\n allowNull: false,\n defaultValue: true\n }\n }, {\n freezeTableName: true\n });\n\n File.associate = function (db) {\n File.hasMany(db.Request);\n File.hasOne(db.Claim);\n };\n\n File.getRecentClaims = function () {\n return this.findAll({\n where: { nsfw: false, trendingEligible: true },\n order: [['createdAt', 'DESC']],\n limit: 25\n });\n };\n\n return File;\n};\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n TEXT = _ref.TEXT;\n\n var Request = sequelize.define('Request', {\n action: {\n type: STRING,\n allowNull: false\n },\n url: {\n type: STRING,\n allowNull: false\n },\n ipAddress: {\n type: STRING,\n allowNull: true\n },\n result: {\n type: TEXT('long'),\n allowNull: true,\n default: null\n }\n }, {\n freezeTableName: true\n });\n\n Request.associate = function (db) {\n Request.belongsTo(db.File, {\n foreignKey: {\n allowNull: true\n }\n });\n };\n\n return Request;\n};\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar bcrypt = __webpack_require__(69);\nvar logger = __webpack_require__(2);\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING;\n\n var User = sequelize.define('User', {\n userName: {\n type: STRING,\n allowNull: false\n },\n password: {\n type: STRING,\n allowNull: false\n }\n }, {\n freezeTableName: true\n });\n\n User.associate = function (db) {\n User.hasOne(db.Channel);\n };\n\n User.prototype.comparePassword = function (password) {\n return bcrypt.compare(password, this.password);\n };\n\n User.prototype.changePassword = function (newPassword) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n // generate a salt string to use for hashing\n bcrypt.genSalt(function (saltError, salt) {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(newPassword, salt, function (hashError, hash) {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the current password with the new hash\n _this.update({ password: hash }).then(function () {\n resolve();\n }).catch(function (error) {\n reject(error);\n });\n });\n });\n });\n };\n\n // pre-save hook method to hash the user's password before the user's info is saved to the db.\n User.hook('beforeCreate', function (user, options) {\n logger.debug('User.beforeCreate hook...');\n return new Promise(function (resolve, reject) {\n // generate a salt string to use for hashing\n bcrypt.genSalt(function (saltError, salt) {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(user.password, salt, function (hashError, hash) {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the password string with the hash password value\n user.password = hash;\n resolve();\n });\n });\n });\n });\n\n return User;\n};\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"bcrypt\");\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar PassportLocalStrategy = __webpack_require__(25).Strategy;\nvar logger = __webpack_require__(2);\nvar db = __webpack_require__(6);\n\nvar returnUserAndChannelInfo = function returnUserAndChannelInfo(userInstance) {\n return new Promise(function (resolve, reject) {\n var userInfo = {};\n userInfo['id'] = userInstance.id;\n userInfo['userName'] = userInstance.userName;\n userInstance.getChannel().then(function (_ref) {\n var channelName = _ref.channelName,\n channelClaimId = _ref.channelClaimId;\n\n userInfo['channelName'] = channelName;\n userInfo['channelClaimId'] = channelClaimId;\n return db.Certificate.getShortChannelIdFromLongChannelId(channelClaimId, channelName);\n }).then(function (shortChannelId) {\n userInfo['shortChannelId'] = shortChannelId;\n resolve(userInfo);\n }).catch(function (error) {\n reject(error);\n });\n });\n};\n\nmodule.exports = new PassportLocalStrategy({\n usernameField: 'username',\n passwordField: 'password'\n}, function (username, password, done) {\n return db.User.findOne({\n where: { userName: username }\n }).then(function (user) {\n if (!user) {\n logger.debug('no user found');\n return done(null, false, { message: 'Incorrect username or password' });\n }\n return user.comparePassword(password).then(function (isMatch) {\n if (!isMatch) {\n logger.debug('incorrect password');\n return done(null, false, { message: 'Incorrect username or password' });\n }\n logger.debug('Password was a match, returning User');\n return returnUserAndChannelInfo(user).then(function (userInfo) {\n return done(null, userInfo);\n }).catch(function (error) {\n return error;\n });\n }).catch(function (error) {\n return error;\n });\n }).catch(function (error) {\n return done(error);\n });\n});\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\nvar passport = __webpack_require__(22);\n\nmodule.exports = function (app) {\n // route for sign up\n app.post('/signup', passport.authenticate('local-signup'), function (req, res) {\n logger.verbose('successful signup for ' + req.user.channelName);\n res.status(200).json({\n success: true,\n channelName: req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId\n });\n });\n // route for log in\n app.post('/login', function (req, res, next) {\n passport.authenticate('local-login', function (err, user, info) {\n if (err) {\n return next(err);\n }\n if (!user) {\n return res.status(400).json({\n success: false,\n message: info.message\n });\n }\n logger.debug('successful login');\n req.logIn(user, function (err) {\n if (err) {\n return next(err);\n }\n return res.status(200).json({\n success: true,\n channelName: req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId\n });\n });\n })(req, res, next);\n });\n // route to log out\n app.get('/logout', function (req, res) {\n req.logout();\n res.status(200).json({ success: true, message: 'you successfully logged out' });\n });\n // see if user is authenticated, and return credentials if so\n app.get('/user', function (req, res) {\n if (req.user) {\n res.status(200).json({ success: true, data: req.user });\n } else {\n res.status(401).json({ success: false, message: 'user is not logged in' });\n }\n });\n};\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar logger = __webpack_require__(2);\nvar multipart = __webpack_require__(73);\n\nvar _require = __webpack_require__(5),\n uploadDirectory = _require.publishing.uploadDirectory,\n host = _require.details.host;\n\nvar multipartMiddleware = multipart({ uploadDir: uploadDirectory });\nvar db = __webpack_require__(6);\n\nvar _require2 = __webpack_require__(74),\n claimNameIsAvailable = _require2.claimNameIsAvailable,\n checkChannelAvailability = _require2.checkChannelAvailability,\n publish = _require2.publish;\n\nvar _require3 = __webpack_require__(16),\n getClaimList = _require3.getClaimList,\n resolveUri = _require3.resolveUri,\n getClaim = _require3.getClaim;\n\nvar _require4 = __webpack_require__(28),\n addGetResultsToFileData = _require4.addGetResultsToFileData,\n createBasicPublishParams = _require4.createBasicPublishParams,\n createThumbnailPublishParams = _require4.createThumbnailPublishParams,\n parsePublishApiRequestBody = _require4.parsePublishApiRequestBody,\n parsePublishApiRequestFiles = _require4.parsePublishApiRequestFiles,\n createFileData = _require4.createFileData;\n\nvar errorHandlers = __webpack_require__(29);\n\nvar _require5 = __webpack_require__(17),\n sendGATimingEvent = _require5.sendGATimingEvent;\n\nvar _require6 = __webpack_require__(76),\n authenticateUser = _require6.authenticateUser;\n\nvar _require7 = __webpack_require__(30),\n getChannelData = _require7.getChannelData,\n getChannelClaims = _require7.getChannelClaims,\n getClaimId = _require7.getClaimId;\n\nvar NO_CHANNEL = 'NO_CHANNEL';\nvar NO_CLAIM = 'NO_CLAIM';\n\nmodule.exports = function (app) {\n // route to check whether site has published to a channel\n app.get('/api/channel/availability/:name', function (_ref, res) {\n var ip = _ref.ip,\n originalUrl = _ref.originalUrl,\n name = _ref.params.name;\n\n var gaStartTime = Date.now();\n checkChannelAvailability(name).then(function (availableName) {\n res.status(200).json(availableName);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short channel id from long channel Id\n app.get('/api/channel/short-id/:longId/:name', function (_ref2, res) {\n var ip = _ref2.ip,\n originalUrl = _ref2.originalUrl,\n params = _ref2.params;\n\n db.Certificate.getShortChannelIdFromLongChannelId(params.longId, params.name).then(function (shortId) {\n res.status(200).json(shortId);\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/data/:channelName/:channelClaimId', function (_ref3, res) {\n var ip = _ref3.ip,\n originalUrl = _ref3.originalUrl,\n body = _ref3.body,\n params = _ref3.params;\n\n var channelName = params.channelName;\n var channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n getChannelData(channelName, channelClaimId, 0).then(function (data) {\n if (data === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'No matching channel was found' });\n }\n res.status(200).json({ success: true, data: data });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/claims/:channelName/:channelClaimId/:page', function (_ref4, res) {\n var ip = _ref4.ip,\n originalUrl = _ref4.originalUrl,\n body = _ref4.body,\n params = _ref4.params;\n\n var channelName = params.channelName;\n var channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n var page = params.page;\n getChannelClaims(channelName, channelClaimId, page).then(function (data) {\n if (data === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'No matching channel was found' });\n }\n res.status(200).json({ success: true, data: data });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a claim_list request on the daemon\n app.get('/api/claim/list/:name', function (_ref5, res) {\n var ip = _ref5.ip,\n originalUrl = _ref5.originalUrl,\n params = _ref5.params;\n\n getClaimList(params.name).then(function (claimsList) {\n res.status(200).json(claimsList);\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get an asset\n app.get('/api/claim/get/:name/:claimId', function (_ref6, res) {\n var ip = _ref6.ip,\n originalUrl = _ref6.originalUrl,\n params = _ref6.params;\n\n var name = params.name;\n var claimId = params.claimId;\n // resolve the claim\n db.Claim.resolveClaim(name, claimId).then(function (resolveResult) {\n // make sure a claim actually exists at that uri\n if (!resolveResult) {\n throw new Error('No matching uri found in Claim table');\n }\n var fileData = createFileData(resolveResult);\n // get the claim\n return Promise.all([fileData, getClaim(name + '#' + claimId)]);\n }).then(function (_ref7) {\n var _ref8 = _slicedToArray(_ref7, 2),\n fileData = _ref8[0],\n getResult = _ref8[1];\n\n fileData = addGetResultsToFileData(fileData, getResult);\n return Promise.all([db.upsert(db.File, fileData, { name: name, claimId: claimId }, 'File'), getResult]);\n }).then(function (_ref9) {\n var _ref10 = _slicedToArray(_ref9, 2),\n fileRecord = _ref10[0],\n _ref10$ = _ref10[1],\n message = _ref10$.message,\n completed = _ref10$.completed;\n\n res.status(200).json({ success: true, message: message, completed: completed });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to check whether this site published to a claim\n app.get('/api/claim/availability/:name', function (_ref11, res) {\n var ip = _ref11.ip,\n originalUrl = _ref11.originalUrl,\n name = _ref11.params.name;\n\n var gaStartTime = Date.now();\n claimNameIsAvailable(name).then(function (result) {\n res.status(200).json(result);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a resolve request on the daemon\n app.get('/api/claim/resolve/:name/:claimId', function (_ref12, res) {\n var headers = _ref12.headers,\n ip = _ref12.ip,\n originalUrl = _ref12.originalUrl,\n params = _ref12.params;\n\n resolveUri(params.name + '#' + params.claimId).then(function (resolvedUri) {\n res.status(200).json(resolvedUri);\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a publish request on the daemon\n app.post('/api/claim/publish', multipartMiddleware, function (_ref13, res) {\n var body = _ref13.body,\n files = _ref13.files,\n headers = _ref13.headers,\n ip = _ref13.ip,\n originalUrl = _ref13.originalUrl,\n user = _ref13.user;\n\n // define variables\n var channelName = void 0,\n channelId = void 0,\n channelPassword = void 0,\n description = void 0,\n fileName = void 0,\n filePath = void 0,\n fileType = void 0,\n gaStartTime = void 0,\n license = void 0,\n name = void 0,\n nsfw = void 0,\n thumbnail = void 0,\n thumbnailFileName = void 0,\n thumbnailFilePath = void 0,\n thumbnailFileType = void 0,\n title = void 0;\n // record the start time of the request\n gaStartTime = Date.now();\n // validate the body and files of the request\n try {\n var _parsePublishApiReque = parsePublishApiRequestBody(body);\n // validateApiPublishRequest(body, files);\n\n\n name = _parsePublishApiReque.name;\n nsfw = _parsePublishApiReque.nsfw;\n license = _parsePublishApiReque.license;\n title = _parsePublishApiReque.title;\n description = _parsePublishApiReque.description;\n thumbnail = _parsePublishApiReque.thumbnail;\n\n var _parsePublishApiReque2 = parsePublishApiRequestFiles(files);\n\n fileName = _parsePublishApiReque2.fileName;\n filePath = _parsePublishApiReque2.filePath;\n fileType = _parsePublishApiReque2.fileType;\n thumbnailFileName = _parsePublishApiReque2.thumbnailFileName;\n thumbnailFilePath = _parsePublishApiReque2.thumbnailFilePath;\n thumbnailFileType = _parsePublishApiReque2.thumbnailFileType;\n channelName = body.channelName;\n channelId = body.channelId;\n channelPassword = body.channelPassword;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n // check channel authorization\n Promise.all([authenticateUser(channelName, channelId, channelPassword, user), claimNameIsAvailable(name), createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail), createThumbnailPublishParams(thumbnailFilePath, name, license, nsfw)]).then(function (_ref14) {\n var _ref15 = _slicedToArray(_ref14, 4),\n _ref15$ = _ref15[0],\n channelName = _ref15$.channelName,\n channelClaimId = _ref15$.channelClaimId,\n validatedClaimName = _ref15[1],\n publishParams = _ref15[2],\n thumbnailPublishParams = _ref15[3];\n\n // add channel details to the publish params\n if (channelName && channelClaimId) {\n publishParams['channel_name'] = channelName;\n publishParams['channel_id'] = channelClaimId;\n }\n // publish the thumbnail\n if (thumbnailPublishParams) {\n publish(thumbnailPublishParams, thumbnailFileName, thumbnailFileType);\n }\n // publish the asset\n return publish(publishParams, fileName, fileType);\n }).then(function (result) {\n res.status(200).json({\n success: true,\n message: 'publish completed successfully',\n data: {\n name: name,\n claimId: result.claim_id,\n url: host + '/' + result.claim_id + '/' + name,\n lbryTx: result\n }\n });\n // record the publish end time and send to google analytics\n sendGATimingEvent('end-to-end', 'publish', fileType, gaStartTime, Date.now());\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short claim id from long claim Id\n app.get('/api/claim/short-id/:longId/:name', function (_ref16, res) {\n var ip = _ref16.ip,\n originalUrl = _ref16.originalUrl,\n body = _ref16.body,\n params = _ref16.params;\n\n db.Claim.getShortClaimIdFromLongClaimId(params.longId, params.name).then(function (shortId) {\n res.status(200).json({ success: true, data: shortId });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.post('/api/claim/long-id', function (_ref17, res) {\n var ip = _ref17.ip,\n originalUrl = _ref17.originalUrl,\n body = _ref17.body,\n params = _ref17.params;\n\n logger.debug('body:', body);\n var channelName = body.channelName;\n var channelClaimId = body.channelClaimId;\n var claimName = body.claimName;\n var claimId = body.claimId;\n getClaimId(channelName, channelClaimId, claimName, claimId).then(function (result) {\n if (result === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'No matching channel could be found' });\n }\n if (result === NO_CLAIM) {\n return res.status(404).json({ success: false, message: 'No matching claim id could be found' });\n }\n res.status(200).json({ success: true, data: result });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/claim/data/:claimName/:claimId', function (_ref18, res) {\n var ip = _ref18.ip,\n originalUrl = _ref18.originalUrl,\n body = _ref18.body,\n params = _ref18.params;\n\n var claimName = params.claimName;\n var claimId = params.claimId;\n if (claimId === 'none') claimId = null;\n db.Claim.resolveClaim(claimName, claimId).then(function (claimInfo) {\n if (!claimInfo) {\n return res.status(404).json({ success: false, message: 'No claim could be found' });\n }\n res.status(200).json({ success: true, data: claimInfo });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to see if asset is available locally\n app.get('/api/file/availability/:name/:claimId', function (_ref19, res) {\n var ip = _ref19.ip,\n originalUrl = _ref19.originalUrl,\n params = _ref19.params;\n\n var name = params.name;\n var claimId = params.claimId;\n db.File.findOne({ where: { name: name, claimId: claimId } }).then(function (result) {\n if (result) {\n return res.status(200).json({ success: true, data: true });\n }\n res.status(200).json({ success: true, data: false });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n};\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"connect-multiparty\");\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar logger = __webpack_require__(2);\nvar db = __webpack_require__(6);\nvar lbryApi = __webpack_require__(16);\nvar publishHelpers = __webpack_require__(28);\n\nvar _require = __webpack_require__(5),\n _require$publishing = _require.publishing,\n primaryClaimAddress = _require$publishing.primaryClaimAddress,\n additionalClaimAddresses = _require$publishing.additionalClaimAddresses;\n\nvar Sequelize = __webpack_require__(26);\nvar Op = Sequelize.Op;\n\nmodule.exports = {\n publish: function publish(publishParams, fileName, fileType) {\n return new Promise(function (resolve, reject) {\n var publishResults = void 0,\n certificateId = void 0,\n channelName = void 0;\n // publish the file\n return lbryApi.publishClaim(publishParams).then(function (tx) {\n logger.info('Successfully published ' + publishParams.name + ' ' + fileName, tx);\n publishResults = tx;\n // get the channel information\n if (publishParams.channel_name) {\n logger.debug('this claim was published in channel: ' + publishParams.channel_name);\n return db.Channel.findOne({ where: { channelName: publishParams.channel_name } });\n } else {\n logger.debug('this claim was not published in a channel');\n return null;\n }\n }).then(function (channel) {\n // set channel information\n certificateId = null;\n channelName = null;\n if (channel) {\n certificateId = channel.channelClaimId;\n channelName = channel.channelName;\n }\n logger.debug('certificateId: ' + certificateId);\n }).then(function () {\n // create the File record\n var fileRecord = {\n name: publishParams.name,\n claimId: publishResults.claim_id,\n title: publishParams.metadata.title,\n description: publishParams.metadata.description,\n address: publishParams.claim_address,\n outpoint: publishResults.txid + ':' + publishResults.nout,\n height: 0,\n fileName: fileName,\n filePath: publishParams.file_path,\n fileType: fileType,\n nsfw: publishParams.metadata.nsfw\n };\n // create the Claim record\n var claimRecord = {\n name: publishParams.name,\n claimId: publishResults.claim_id,\n title: publishParams.metadata.title,\n description: publishParams.metadata.description,\n address: publishParams.claim_address,\n thumbnail: publishParams.metadata.thumbnail,\n outpoint: publishResults.txid + ':' + publishResults.nout,\n height: 0,\n contentType: fileType,\n nsfw: publishParams.metadata.nsfw,\n amount: publishParams.bid,\n certificateId: certificateId,\n channelName: channelName\n };\n // upsert criteria\n var upsertCriteria = {\n name: publishParams.name,\n claimId: publishResults.claim_id\n };\n // upsert the records\n return Promise.all([db.upsert(db.File, fileRecord, upsertCriteria, 'File'), db.upsert(db.Claim, claimRecord, upsertCriteria, 'Claim')]);\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n file = _ref2[0],\n claim = _ref2[1];\n\n logger.debug('File and Claim records successfully created');\n return Promise.all([file.setClaim(claim), claim.setFile(file)]);\n }).then(function () {\n logger.debug('File and Claim records successfully associated');\n resolve(publishResults); // resolve the promise with the result from lbryApi.publishClaim;\n }).catch(function (error) {\n logger.error('PUBLISH ERROR', error);\n publishHelpers.deleteTemporaryFile(publishParams.file_path); // delete the local file\n reject(error);\n });\n });\n },\n claimNameIsAvailable: function claimNameIsAvailable(name) {\n var claimAddresses = additionalClaimAddresses || [];\n claimAddresses.push(primaryClaimAddress);\n // find any records where the name is used\n return db.Claim.findAll({\n attributes: ['address'],\n where: {\n name: name,\n address: _defineProperty({}, Op.or, claimAddresses)\n }\n }).then(function (result) {\n if (result.length >= 1) {\n throw new Error('That claim is already in use');\n };\n return name;\n }).catch(function (error) {\n throw error;\n });\n },\n checkChannelAvailability: function checkChannelAvailability(name) {\n return db.Channel.findAll({\n where: { channelName: name }\n }).then(function (result) {\n if (result.length >= 1) {\n throw new Error('That channel has already been claimed');\n }\n return name;\n }).catch(function (error) {\n throw error;\n });\n }\n};\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"fs\");\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar db = __webpack_require__(6);\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n authenticateUser: function authenticateUser(channelName, channelId, channelPassword, user) {\n // case: no channelName or channel Id are provided (anonymous), regardless of whether user token is provided\n if (!channelName && !channelId) {\n return {\n channelName: null,\n channelClaimId: null\n };\n }\n // case: channelName or channel Id are provided with user token\n if (user) {\n if (channelName && channelName !== user.channelName) {\n throw new Error('the provided channel name does not match user credentials');\n }\n if (channelId && channelId !== user.channelClaimId) {\n throw new Error('the provided channel id does not match user credentials');\n }\n return {\n channelName: user.channelName,\n channelClaimId: user.channelClaimId\n };\n }\n // case: channelName or channel Id are provided with password instead of user token\n if (!channelPassword) throw new Error('no channel password provided');\n return module.exports.authenticateChannelCredentials(channelName, channelId, channelPassword);\n },\n authenticateChannelCredentials: function authenticateChannelCredentials(channelName, channelId, userPassword) {\n return new Promise(function (resolve, reject) {\n // hoisted variables\n var channelData = void 0;\n // build the params for finding the channel\n var channelFindParams = {};\n if (channelName) channelFindParams['channelName'] = channelName;\n if (channelId) channelFindParams['channelClaimId'] = channelId;\n // find the channel\n db.Channel.findOne({\n where: channelFindParams\n }).then(function (channel) {\n if (!channel) {\n logger.debug('no channel found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n channelData = channel.get();\n logger.debug('channel data:', channelData);\n return db.User.findOne({\n where: { userName: channelData.channelName.substring(1) }\n });\n }).then(function (user) {\n if (!user) {\n logger.debug('no user found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n return user.comparePassword(userPassword);\n }).then(function (isMatch) {\n if (!isMatch) {\n logger.debug('incorrect password');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n logger.debug('...password was a match...');\n resolve(channelData);\n }).catch(function (error) {\n reject(error);\n });\n });\n }\n};\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar CLAIMS_PER_PAGE = 12;\n\nmodule.exports = {\n returnPaginatedChannelClaims: function returnPaginatedChannelClaims(channelName, longChannelClaimId, claims, page) {\n var totalPages = module.exports.determineTotalPages(claims);\n var paginationPage = module.exports.getPageFromQuery(page);\n var viewData = {\n channelName: channelName,\n longChannelClaimId: longChannelClaimId,\n claims: module.exports.extractPageFromClaims(claims, paginationPage),\n previousPage: module.exports.determinePreviousPage(paginationPage),\n currentPage: paginationPage,\n nextPage: module.exports.determineNextPage(totalPages, paginationPage),\n totalPages: totalPages,\n totalResults: module.exports.determineTotalClaims(claims)\n };\n return viewData;\n },\n getPageFromQuery: function getPageFromQuery(page) {\n if (page) {\n return parseInt(page);\n }\n return 1;\n },\n extractPageFromClaims: function extractPageFromClaims(claims, pageNumber) {\n if (!claims) {\n return []; // if no claims, return this default\n }\n // logger.debug('claims is array?', Array.isArray(claims));\n // logger.debug(`pageNumber ${pageNumber} is number?`, Number.isInteger(pageNumber));\n var claimStartIndex = (pageNumber - 1) * CLAIMS_PER_PAGE;\n var claimEndIndex = claimStartIndex + CLAIMS_PER_PAGE;\n var pageOfClaims = claims.slice(claimStartIndex, claimEndIndex);\n return pageOfClaims;\n },\n determineTotalPages: function determineTotalPages(claims) {\n if (!claims) {\n return 0;\n } else {\n var totalClaims = claims.length;\n if (totalClaims < CLAIMS_PER_PAGE) {\n return 1;\n }\n var fullPages = Math.floor(totalClaims / CLAIMS_PER_PAGE);\n var remainder = totalClaims % CLAIMS_PER_PAGE;\n if (remainder === 0) {\n return fullPages;\n }\n return fullPages + 1;\n }\n },\n determinePreviousPage: function determinePreviousPage(currentPage) {\n if (currentPage === 1) {\n return null;\n }\n return currentPage - 1;\n },\n determineNextPage: function determineNextPage(totalPages, currentPage) {\n if (currentPage === totalPages) {\n return null;\n }\n return currentPage + 1;\n },\n determineTotalClaims: function determineTotalClaims(claims) {\n if (!claims) {\n return 0;\n }\n return claims.length;\n }\n};\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _require = __webpack_require__(5),\n host = _require.details;\n\nvar handlePageRender = __webpack_require__(31);\n\nmodule.exports = function (app) {\n // route for the home page\n app.get('/', function (req, res) {\n handlePageRender(req, res);\n });\n // route to display login page\n app.get('/login', function (req, res) {\n handlePageRender(req, res);\n });\n // route to show 'about' page\n app.get('/about', function (req, res) {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/trending', function (req, res) {\n res.status(301).redirect('/popular');\n });\n app.get('/popular', function (req, res) {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/new', function (req, res) {\n handlePageRender(req, res);\n });\n // route to send embedable video player (for twitter)\n app.get('/embed/:claimId/:name', function (_ref, res) {\n var params = _ref.params;\n\n var claimId = params.claimId;\n var name = params.name;\n // get and render the content\n res.status(200).render('embed', { layout: 'embed', host: host, claimId: claimId, name: name });\n });\n};\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n case actions.FILE_SELECTED:\n return Object.assign({}, initialState, { // note: clears to initial state\n file: action.data\n });\n case actions.FILE_CLEAR:\n return initialState;\n case actions.METADATA_UPDATE:\n return Object.assign({}, state, {\n metadata: Object.assign({}, state.metadata, _defineProperty({}, action.data.name, action.data.value))\n });\n case actions.CLAIM_UPDATE:\n return Object.assign({}, state, {\n claim: action.data\n });\n case actions.SET_PUBLISH_IN_CHANNEL:\n return Object.assign({}, state, {\n publishInChannel: action.channel\n });\n case actions.PUBLISH_STATUS_UPDATE:\n return Object.assign({}, state, {\n status: action.data\n });\n case actions.ERROR_UPDATE:\n return Object.assign({}, state, {\n error: Object.assign({}, state.error, _defineProperty({}, action.data.name, action.data.value))\n });\n case actions.SELECTED_CHANNEL_UPDATE:\n return Object.assign({}, state, {\n selectedChannel: action.data\n });\n case actions.TOGGLE_METADATA_INPUTS:\n return Object.assign({}, state, {\n showMetadataInputs: action.data\n });\n case actions.THUMBNAIL_NEW:\n return Object.assign({}, state, {\n thumbnail: action.data\n });\n default:\n return state;\n }\n};\n\nvar _publish_action_types = __webpack_require__(34);\n\nvar actions = _interopRequireWildcard(_publish_action_types);\n\nvar _publish_channel_select_states = __webpack_require__(35);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _require = __webpack_require__(5),\n publishing = _require.publishing;\n\nvar initialState = {\n disabled: publishing.disabled,\n disabledMessage: publishing.disabledMessage,\n publishInChannel: false,\n selectedChannel: _publish_channel_select_states.LOGIN,\n showMetadataInputs: false,\n status: {\n status: null,\n message: null\n },\n error: {\n file: null,\n url: null,\n channel: null,\n publishSubmit: null\n },\n file: null,\n claim: '',\n metadata: {\n title: '',\n description: '',\n license: '',\n nsfw: false\n },\n thumbnail: null\n};\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n case actions.CHANNEL_UPDATE:\n return Object.assign({}, state, {\n loggedInChannel: action.data\n });\n default:\n return state;\n }\n};\n\nvar _channel_action_types = __webpack_require__(36);\n\nvar actions = _interopRequireWildcard(_channel_action_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar initialState = {\n loggedInChannel: {\n name: null,\n shortId: null,\n longId: null\n }\n};\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n // handle request\n case actions.REQUEST_ERROR:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n error: action.data\n })\n });\n case actions.REQUEST_UPDATE:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n type: action.data.requestType,\n id: action.data.requestId\n })\n });\n // store requests\n case actions.REQUEST_LIST_ADD:\n return Object.assign({}, state, {\n requestList: Object.assign({}, state.requestList, _defineProperty({}, action.data.id, {\n error: action.data.error,\n key: action.data.key\n }))\n });\n // asset data\n case actions.ASSET_ADD:\n return Object.assign({}, state, {\n assetList: Object.assign({}, state.assetList, _defineProperty({}, action.data.id, {\n error: action.data.error,\n name: action.data.name,\n claimId: action.data.claimId,\n shortId: action.data.shortId,\n claimData: action.data.claimData\n }))\n });\n // channel data\n case actions.CHANNEL_ADD:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.id, {\n name: action.data.name,\n longId: action.data.longId,\n shortId: action.data.shortId,\n claimsData: action.data.claimsData\n }))\n });\n case actions.CHANNEL_CLAIMS_UPDATE_SUCCESS:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.channelListId, Object.assign({}, state.channelList[action.data.channelListId], {\n claimsData: action.data.claimsData\n })))\n });\n // display an asset\n case actions.FILE_AVAILABILITY_UPDATE:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n status: action.data\n })\n });\n case actions.DISPLAY_ASSET_ERROR:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n error: action.data,\n status: _asset_display_states.ERROR\n })\n });\n default:\n return state;\n }\n};\n\nvar _show_action_types = __webpack_require__(12);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _asset_display_states = __webpack_require__(37);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar initialState = {\n request: {\n error: null,\n type: null,\n id: null\n },\n requestList: {},\n channelList: {},\n assetList: {},\n displayAsset: {\n error: null,\n status: _asset_display_states.LOCAL_CHECK\n }\n};\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n default:\n return state;\n }\n};\n\nvar siteConfig = __webpack_require__(5);\n\nvar googleAnalyticsId = siteConfig.analytics.googleId,\n _siteConfig$assetDefa = siteConfig.assetDefaults,\n defaultThumbnail = _siteConfig$assetDefa.thumbnail,\n defaultDescription = _siteConfig$assetDefa.description,\n _siteConfig$details = siteConfig.details,\n description = _siteConfig$details.description,\n host = _siteConfig$details.host,\n title = _siteConfig$details.title,\n twitter = _siteConfig$details.twitter;\n\n\nvar initialState = {\n description: description,\n googleAnalyticsId: googleAnalyticsId,\n host: host,\n title: title,\n twitter: twitter,\n defaultDescription: defaultDescription,\n defaultThumbnail: defaultThumbnail\n};\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-ga\");\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _PublishTool = __webpack_require__(93);\n\nvar _PublishTool2 = _interopRequireDefault(_PublishTool);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar HomePage = function (_React$Component) {\n _inherits(HomePage, _React$Component);\n\n function HomePage() {\n _classCallCheck(this, HomePage);\n\n return _possibleConstructorReturn(this, (HomePage.__proto__ || Object.getPrototypeOf(HomePage)).apply(this, arguments));\n }\n\n _createClass(HomePage, [{\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column' },\n _react2.default.createElement(_SEO2.default, null),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded flex-container--column' },\n _react2.default.createElement(_PublishTool2.default, null)\n )\n );\n }\n }]);\n\n return HomePage;\n}(_react2.default.Component);\n\n;\n\nexports.default = HomePage;\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactHelmet = __webpack_require__(14);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _pageTitle = __webpack_require__(86);\n\nvar _metaTags = __webpack_require__(87);\n\nvar _canonicalLink = __webpack_require__(88);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SEO = function (_React$Component) {\n _inherits(SEO, _React$Component);\n\n function SEO() {\n _classCallCheck(this, SEO);\n\n return _possibleConstructorReturn(this, (SEO.__proto__ || Object.getPrototypeOf(SEO)).apply(this, arguments));\n }\n\n _createClass(SEO, [{\n key: 'render',\n value: function render() {\n // props from state\n var _props = this.props,\n defaultDescription = _props.defaultDescription,\n defaultThumbnail = _props.defaultThumbnail,\n siteDescription = _props.siteDescription,\n siteHost = _props.siteHost,\n siteTitle = _props.siteTitle,\n siteTwitter = _props.siteTwitter;\n // props from parent\n\n var _props2 = this.props,\n asset = _props2.asset,\n channel = _props2.channel,\n pageUri = _props2.pageUri;\n var pageTitle = this.props.pageTitle;\n // create page title, tags, and canonical link\n\n pageTitle = (0, _pageTitle.createPageTitle)(siteTitle, pageTitle);\n var metaTags = (0, _metaTags.createMetaTags)(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail);\n var canonicalLink = (0, _canonicalLink.createCanonicalLink)(asset, channel, pageUri, siteHost);\n // render results\n return _react2.default.createElement(_reactHelmet2.default, {\n title: pageTitle,\n meta: metaTags,\n link: [{ rel: 'canonical', href: canonicalLink }]\n });\n }\n }]);\n\n return SEO;\n}(_react2.default.Component);\n\n;\n\nSEO.propTypes = {\n pageTitle: _propTypes2.default.string,\n pageUri: _propTypes2.default.string,\n channel: _propTypes2.default.object,\n asset: _propTypes2.default.object\n};\n\nexports.default = SEO;\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar createPageTitle = exports.createPageTitle = function createPageTitle(siteTitle, pageTitle) {\n if (!pageTitle) {\n return \"\" + siteTitle;\n }\n return siteTitle + \" - \" + pageTitle;\n};\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar determineOgThumbnailContentType = function determineOgThumbnailContentType(thumbnail) {\n if (thumbnail) {\n var fileExt = thumbnail.substring(thumbnail.lastIndexOf('.'));\n switch (fileExt) {\n case 'jpeg':\n case 'jpg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'gif':\n return 'image/gif';\n case 'mp4':\n return 'video/mp4';\n default:\n return 'image/jpeg';\n }\n }\n return '';\n};\n\nvar createBasicMetaTags = function createBasicMetaTags(siteHost, siteDescription, siteTitle, siteTwitter) {\n return [{ property: 'og:title', content: siteTitle }, { property: 'og:url', content: siteHost }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: siteDescription }, { property: 'twitter:site', content: siteTwitter }, { property: 'twitter:card', content: 'summary' }];\n};\n\nvar createChannelMetaTags = function createChannelMetaTags(siteTitle, siteHost, siteTwitter, channel) {\n var name = channel.name,\n longId = channel.longId;\n\n return [{ property: 'og:title', content: name + ' on ' + siteTitle }, { property: 'og:url', content: siteHost + '/' + name + ':' + longId }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: name + ', a channel on ' + siteTitle }, { property: 'twitter:site', content: siteTwitter }, { property: 'twitter:card', content: 'summary' }];\n};\n\nvar createAssetMetaTags = function createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail) {\n var claimData = asset.claimData;\n var contentType = claimData.contentType;\n\n var embedUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name;\n var showUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name;\n var source = siteHost + '/' + claimData.claimId + '/' + claimData.name + '.' + claimData.fileExt;\n var ogTitle = claimData.title || claimData.name;\n var ogDescription = claimData.description || defaultDescription;\n var ogThumbnailContentType = determineOgThumbnailContentType(claimData.thumbnail);\n var ogThumbnail = claimData.thumbnail || defaultThumbnail;\n var metaTags = [{ property: 'og:title', content: ogTitle }, { property: 'og:url', content: showUrl }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: ogDescription }, { property: 'og:image:width', content: 600 }, { property: 'og:image:height', content: 315 }, { property: 'twitter:site', content: siteTwitter }];\n if (contentType === 'video/mp4' || contentType === 'video/webm') {\n metaTags.push({ property: 'og:video', content: source });\n metaTags.push({ property: 'og:video:secure_url', content: source });\n metaTags.push({ property: 'og:video:type', content: contentType });\n metaTags.push({ property: 'og:image', content: ogThumbnail });\n metaTags.push({ property: 'og:image:type', content: ogThumbnailContentType });\n metaTags.push({ property: 'og:type', content: 'video' });\n metaTags.push({ property: 'twitter:card', content: 'player' });\n metaTags.push({ property: 'twitter:player', content: embedUrl });\n metaTags.push({ property: 'twitter:player:width', content: 600 });\n metaTags.push({ property: 'twitter:text:player_width', content: 600 });\n metaTags.push({ property: 'twitter:player:height', content: 337 });\n metaTags.push({ property: 'twitter:player:stream', content: source });\n metaTags.push({ property: 'twitter:player:stream:content_type', content: contentType });\n } else {\n metaTags.push({ property: 'og:image', content: source });\n metaTags.push({ property: 'og:image:type', content: contentType });\n metaTags.push({ property: 'og:type', content: 'article' });\n metaTags.push({ property: 'twitter:card', content: 'summary_large_image' });\n }\n return metaTags;\n};\n\nvar createMetaTags = exports.createMetaTags = function createMetaTags(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail) {\n if (asset) {\n return createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail);\n };\n if (channel) {\n return createChannelMetaTags(siteHost, siteTitle, siteTwitter, channel);\n };\n return createBasicMetaTags(siteDescription, siteHost, siteTitle, siteTwitter);\n};\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar createBasicCanonicalLink = function createBasicCanonicalLink(page, siteHost) {\n return siteHost + \"/\" + page;\n};\n\nvar createAssetCanonicalLink = function createAssetCanonicalLink(asset, siteHost) {\n var channelName = void 0,\n certificateId = void 0,\n name = void 0,\n claimId = void 0;\n if (asset.claimData) {\n var _asset$claimData = asset.claimData;\n channelName = _asset$claimData.channelName;\n certificateId = _asset$claimData.certificateId;\n name = _asset$claimData.name;\n claimId = _asset$claimData.claimId;\n };\n if (channelName) {\n return siteHost + \"/\" + channelName + \":\" + certificateId + \"/\" + name;\n };\n return siteHost + \"/\" + claimId + \"/\" + name;\n};\n\nvar createChannelCanonicalLink = function createChannelCanonicalLink(channel, siteHost) {\n var name = channel.name,\n longId = channel.longId;\n\n return siteHost + \"/\" + name + \":\" + longId;\n};\n\nvar createCanonicalLink = exports.createCanonicalLink = function createCanonicalLink(asset, channel, page, siteHost) {\n if (asset) {\n return createAssetCanonicalLink(asset, siteHost);\n }\n if (channel) {\n return createChannelCanonicalLink(channel, siteHost);\n }\n return createBasicCanonicalLink(page, siteHost);\n};\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _Logo = __webpack_require__(90);\n\nvar _Logo2 = _interopRequireDefault(_Logo);\n\nvar _NavBarChannelOptionsDropdown = __webpack_require__(91);\n\nvar _NavBarChannelOptionsDropdown2 = _interopRequireDefault(_NavBarChannelOptionsDropdown);\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar VIEW = 'VIEW';\nvar LOGOUT = 'LOGOUT';\n\nvar NavBar = function (_React$Component) {\n _inherits(NavBar, _React$Component);\n\n function NavBar(props) {\n _classCallCheck(this, NavBar);\n\n var _this = _possibleConstructorReturn(this, (NavBar.__proto__ || Object.getPrototypeOf(NavBar)).call(this, props));\n\n _this.checkForLoggedInUser = _this.checkForLoggedInUser.bind(_this);\n _this.logoutUser = _this.logoutUser.bind(_this);\n _this.handleSelection = _this.handleSelection.bind(_this);\n return _this;\n }\n\n _createClass(NavBar, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n // check to see if the user is already logged in\n this.checkForLoggedInUser();\n }\n }, {\n key: 'checkForLoggedInUser',\n value: function checkForLoggedInUser() {\n var _this2 = this;\n\n var params = { credentials: 'include' };\n (0, _request2.default)('/user', params).then(function (_ref) {\n var data = _ref.data;\n\n _this2.props.onChannelLogin(data.channelName, data.shortChannelId, data.channelClaimId);\n }).catch(function (error) {\n console.log('/user error:', error.message);\n });\n }\n }, {\n key: 'logoutUser',\n value: function logoutUser() {\n var _this3 = this;\n\n var params = { credentials: 'include' };\n (0, _request2.default)('/logout', params).then(function () {\n _this3.props.onChannelLogout();\n }).catch(function (error) {\n console.log('/logout error', error.message);\n });\n }\n }, {\n key: 'handleSelection',\n value: function handleSelection(event) {\n var value = event.target.selectedOptions[0].value;\n switch (value) {\n case LOGOUT:\n this.logoutUser();\n break;\n case VIEW:\n // redirect to channel page\n this.props.history.push('/' + this.props.channelName + ':' + this.props.channelLongId);\n break;\n default:\n break;\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var siteDescription = this.props.siteDescription;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--wide nav-bar' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--short flex-container--row flex-container--space-between-center' },\n _react2.default.createElement(_Logo2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'nav-bar--center' },\n _react2.default.createElement(\n 'span',\n { className: 'nav-bar-tagline' },\n siteDescription\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'nav-bar--right' },\n _react2.default.createElement(\n _reactRouterDom.NavLink,\n { className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/', exact: true },\n 'Publish'\n ),\n _react2.default.createElement(\n _reactRouterDom.NavLink,\n { className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/about' },\n 'About'\n ),\n this.props.channelName ? _react2.default.createElement(_NavBarChannelOptionsDropdown2.default, {\n channelName: this.props.channelName,\n handleSelection: this.handleSelection,\n defaultSelection: this.props.channelName,\n VIEW: VIEW,\n LOGOUT: LOGOUT\n }) : _react2.default.createElement(\n _reactRouterDom.NavLink,\n { id: 'nav-bar-login-link', className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/login' },\n 'Channel'\n )\n )\n )\n );\n }\n }]);\n\n return NavBar;\n}(_react2.default.Component);\n\nexports.default = (0, _reactRouterDom.withRouter)(NavBar);\n\n/***/ }),\n/* 90 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Logo() {\n return _react2.default.createElement(\n 'svg',\n { version: '1.1', id: 'Layer_1', x: '0px', y: '0px', height: '24px', viewBox: '0 0 80 31', enableBackground: 'new 0 0 80 31', className: 'nav-bar-logo' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { to: '/' },\n _react2.default.createElement(\n 'title',\n null,\n 'Logo'\n ),\n _react2.default.createElement(\n 'desc',\n null,\n 'Spee.ch logo'\n ),\n _react2.default.createElement(\n 'g',\n { id: 'About' },\n _react2.default.createElement(\n 'g',\n { id: 'Publish-Form-V2-_x28_filled_x29_', transform: 'translate(-42.000000, -23.000000)' },\n _react2.default.createElement(\n 'g',\n { id: 'Group-17', transform: 'translate(42.000000, 22.000000)' },\n _react2.default.createElement(\n 'text',\n { transform: 'matrix(1 0 0 1 0 20)', fontSize: '25', fontFamily: 'Roboto' },\n 'Spee 10000000) {\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n throw new Error('Sorry, GIFs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n throw new Error(file.type + ' is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n }\n};\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishPreview = function (_React$Component) {\n _inherits(PublishPreview, _React$Component);\n\n function PublishPreview(props) {\n _classCallCheck(this, PublishPreview);\n\n var _this = _possibleConstructorReturn(this, (PublishPreview.__proto__ || Object.getPrototypeOf(PublishPreview)).call(this, props));\n\n _this.state = {\n imgSource: '',\n defaultThumbnail: '/assets/img/video_thumb_default.png'\n };\n return _this;\n }\n\n _createClass(PublishPreview, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.setPreviewImageSource(this.props.file);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(newProps) {\n if (newProps.file !== this.props.file) {\n this.setPreviewImageSource(newProps.file);\n }\n if (newProps.thumbnail !== this.props.thumbnail) {\n if (newProps.thumbnail) {\n this.setPreviewImageSourceFromFile(newProps.thumbnail);\n } else {\n this.setState({ imgSource: this.state.defaultThumbnail });\n }\n }\n }\n }, {\n key: 'setPreviewImageSourceFromFile',\n value: function setPreviewImageSourceFromFile(file) {\n var _this2 = this;\n\n var previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = function () {\n _this2.setState({ imgSource: previewReader.result });\n };\n }\n }, {\n key: 'setPreviewImageSource',\n value: function setPreviewImageSource(file) {\n if (file.type !== 'video/mp4') {\n this.setPreviewImageSourceFromFile(file);\n } else {\n if (this.props.thumbnail) {\n this.setPreviewImageSourceFromFile(this.props.thumbnail);\n }\n this.setState({ imgSource: this.state.defaultThumbnail });\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement('img', {\n id: 'dropzone-preview',\n src: this.state.imgSource,\n className: this.props.dimPreview ? 'dim' : '',\n alt: 'publish preview'\n });\n }\n }]);\n\n return PublishPreview;\n}(_react2.default.Component);\n\n;\n\nPublishPreview.propTypes = {\n dimPreview: _propTypes2.default.bool.isRequired,\n file: _propTypes2.default.object.isRequired,\n thumbnail: _propTypes2.default.object\n};\n\nexports.default = PublishPreview;\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(99);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n publish = _ref.publish;\n\n return {\n file: publish.file\n };\n};\n\nvar mapDispatchToProps = {\n clearFile: _publish.clearFile,\n startPublish: _publish.startPublish\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _Dropzone = __webpack_require__(40);\n\nvar _Dropzone2 = _interopRequireDefault(_Dropzone);\n\nvar _PublishTitleInput = __webpack_require__(100);\n\nvar _PublishTitleInput2 = _interopRequireDefault(_PublishTitleInput);\n\nvar _PublishUrlInput = __webpack_require__(102);\n\nvar _PublishUrlInput2 = _interopRequireDefault(_PublishUrlInput);\n\nvar _PublishThumbnailInput = __webpack_require__(105);\n\nvar _PublishThumbnailInput2 = _interopRequireDefault(_PublishThumbnailInput);\n\nvar _PublishMetadataInputs = __webpack_require__(107);\n\nvar _PublishMetadataInputs2 = _interopRequireDefault(_PublishMetadataInputs);\n\nvar _ChannelSelect = __webpack_require__(110);\n\nvar _ChannelSelect2 = _interopRequireDefault(_ChannelSelect);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishDetails = function (_React$Component) {\n _inherits(PublishDetails, _React$Component);\n\n function PublishDetails(props) {\n _classCallCheck(this, PublishDetails);\n\n var _this = _possibleConstructorReturn(this, (PublishDetails.__proto__ || Object.getPrototypeOf(PublishDetails)).call(this, props));\n\n _this.onPublishSubmit = _this.onPublishSubmit.bind(_this);\n return _this;\n }\n\n _createClass(PublishDetails, [{\n key: 'onPublishSubmit',\n value: function onPublishSubmit() {\n this.props.startPublish(this.props.history);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { className: 'row row--no-bottom' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(_PublishTitleInput2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(_Dropzone2.default, null)\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { id: 'publish-active-area', className: 'row row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--wide' },\n _react2.default.createElement(_PublishUrlInput2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--wide' },\n _react2.default.createElement(_ChannelSelect2.default, null)\n ),\n this.props.file.type === 'video/mp4' && _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--wide ' },\n _react2.default.createElement(_PublishThumbnailInput2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--no-bottom row--wide' },\n _react2.default.createElement(_PublishMetadataInputs2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide align-content-center' },\n _react2.default.createElement(\n 'button',\n { id: 'publish-submit', className: 'button--primary button--large', onClick: this.onPublishSubmit },\n 'Publish'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-bottom align-content-center' },\n _react2.default.createElement(\n 'button',\n { className: 'button--cancel', onClick: this.props.clearFile },\n 'Cancel'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--short align-content-center' },\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'By clicking \\'Publish\\', you affirm that you have the rights to publish this content to the LBRY network, and that you understand the properties of publishing it to a decentralized, user-controlled network. ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://lbry.io/learn' },\n 'Read more.'\n )\n )\n )\n )\n )\n );\n }\n }]);\n\n return PublishDetails;\n}(_react2.default.Component);\n\n;\n\nexports.default = (0, _reactRouterDom.withRouter)(PublishDetails);\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(101);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n title: publish.metadata.title\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onMetadataChange: function onMetadataChange(name, value) {\n dispatch((0, _publish.updateMetadata)(name, value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishTitleInput = function (_React$Component) {\n _inherits(PublishTitleInput, _React$Component);\n\n function PublishTitleInput(props) {\n _classCallCheck(this, PublishTitleInput);\n\n var _this = _possibleConstructorReturn(this, (PublishTitleInput.__proto__ || Object.getPrototypeOf(PublishTitleInput)).call(this, props));\n\n _this.handleInput = _this.handleInput.bind(_this);\n return _this;\n }\n\n _createClass(PublishTitleInput, [{\n key: 'handleInput',\n value: function handleInput(e) {\n var name = e.target.name;\n var value = e.target.value;\n this.props.onMetadataChange(name, value);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement('input', { type: 'text', id: 'publish-title', className: 'input-text text--large input-text--full-width', name: 'title', placeholder: 'Give your post a title...', onChange: this.handleInput, value: this.props.title });\n }\n }]);\n\n return PublishTitleInput;\n}(_react2.default.Component);\n\nexports.default = PublishTitleInput;\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _publish = __webpack_require__(4);\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(103);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n publish = _ref.publish;\n\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n loggedInChannelShortId: channel.loggedInChannel.shortId,\n fileName: publish.file.name,\n publishInChannel: publish.publishInChannel,\n selectedChannel: publish.selectedChannel,\n claim: publish.claim,\n urlError: publish.error.url\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onClaimChange: function onClaimChange(value) {\n dispatch((0, _publish.updateClaim)(value));\n dispatch((0, _publish.updateError)('publishSubmit', null));\n },\n onUrlError: function onUrlError(value) {\n dispatch((0, _publish.updateError)('url', value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nvar _PublishUrlMiddleDisplay = __webpack_require__(104);\n\nvar _PublishUrlMiddleDisplay2 = _interopRequireDefault(_PublishUrlMiddleDisplay);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishUrlInput = function (_React$Component) {\n _inherits(PublishUrlInput, _React$Component);\n\n function PublishUrlInput(props) {\n _classCallCheck(this, PublishUrlInput);\n\n var _this = _possibleConstructorReturn(this, (PublishUrlInput.__proto__ || Object.getPrototypeOf(PublishUrlInput)).call(this, props));\n\n _this.handleInput = _this.handleInput.bind(_this);\n return _this;\n }\n\n _createClass(PublishUrlInput, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props = this.props,\n claim = _props.claim,\n fileName = _props.fileName;\n\n if (!claim) {\n this.setClaimName(fileName);\n }\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(_ref) {\n var claim = _ref.claim,\n fileName = _ref.fileName;\n\n // if a new file was chosen, update the claim name\n if (fileName !== this.props.fileName) {\n return this.setClaimName(fileName);\n }\n // if the claim has updated, check its availability\n if (claim !== this.props.claim) {\n this.validateClaim(claim);\n }\n }\n }, {\n key: 'handleInput',\n value: function handleInput(event) {\n var value = event.target.value;\n value = this.cleanseInput(value);\n // update the state\n this.props.onClaimChange(value);\n }\n }, {\n key: 'cleanseInput',\n value: function cleanseInput(input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n }, {\n key: 'setClaimName',\n value: function setClaimName(fileName) {\n var fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.'));\n var cleanClaimName = this.cleanseInput(fileNameWithoutEnding);\n this.props.onClaimChange(cleanClaimName);\n }\n }, {\n key: 'validateClaim',\n value: function validateClaim(claim) {\n var _this2 = this;\n\n if (!claim) {\n return this.props.onUrlError('Enter a url above');\n }\n (0, _request2.default)('/api/claim/availability/' + claim).then(function () {\n _this2.props.onUrlError(null);\n }).catch(function (error) {\n _this2.props.onUrlError(error.message);\n });\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n claim = _props2.claim,\n loggedInChannelName = _props2.loggedInChannelName,\n loggedInChannelShortId = _props2.loggedInChannelShortId,\n publishInChannel = _props2.publishInChannel,\n selectedChannel = _props2.selectedChannel,\n urlError = _props2.urlError;\n\n return _react2.default.createElement(\n 'div',\n { className: 'column column--10 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary span--relative' },\n _react2.default.createElement(\n 'span',\n { className: 'url-text--secondary' },\n 'spee.ch / '\n ),\n _react2.default.createElement(_PublishUrlMiddleDisplay2.default, {\n publishInChannel: publishInChannel,\n selectedChannel: selectedChannel,\n loggedInChannelName: loggedInChannelName,\n loggedInChannelShortId: loggedInChannelShortId\n }),\n _react2.default.createElement('input', { type: 'text', id: 'claim-name-input', className: 'input-text', name: 'claim', placeholder: 'your-url-here', onChange: this.handleInput, value: claim }),\n claim && !urlError && _react2.default.createElement(\n 'span',\n { id: 'input-success-claim-name', className: 'info-message--success span--absolute' },\n '\\u2713'\n ),\n urlError && _react2.default.createElement(\n 'span',\n { id: 'input-success-channel-name', className: 'info-message--failure span--absolute' },\n '\\u2716'\n )\n ),\n _react2.default.createElement(\n 'div',\n null,\n urlError ? _react2.default.createElement(\n 'p',\n { id: 'input-error-claim-name', className: 'info-message--failure' },\n urlError\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Choose a custom url'\n )\n )\n );\n }\n }]);\n\n return PublishUrlInput;\n}(_react2.default.Component);\n\nexports.default = PublishUrlInput;\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction UrlMiddle(_ref) {\n var publishInChannel = _ref.publishInChannel,\n selectedChannel = _ref.selectedChannel,\n loggedInChannelName = _ref.loggedInChannelName,\n loggedInChannelShortId = _ref.loggedInChannelShortId;\n\n if (publishInChannel) {\n if (selectedChannel === loggedInChannelName) {\n return _react2.default.createElement(\n 'span',\n { id: 'url-channel', className: 'url-text--secondary' },\n loggedInChannelName,\n ':',\n loggedInChannelShortId,\n ' /'\n );\n }\n return _react2.default.createElement(\n 'span',\n { id: 'url-channel-placeholder', className: 'url-text--secondary tooltip' },\n '@channel',\n _react2.default.createElement(\n 'span',\n {\n className: 'tooltip-text' },\n 'Select a channel below'\n ),\n ' /'\n );\n }\n return _react2.default.createElement(\n 'span',\n { id: 'url-no-channel-placeholder', className: 'url-text--secondary tooltip' },\n 'xyz',\n _react2.default.createElement(\n 'span',\n { className: 'tooltip-text' },\n 'This will be a random id'\n ),\n ' /'\n );\n}\n\nUrlMiddle.propTypes = {\n publishInChannel: _propTypes2.default.bool.isRequired,\n loggedInChannelName: _propTypes2.default.string,\n loggedInChannelShortId: _propTypes2.default.string\n};\n\nexports.default = UrlMiddle;\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(106);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var file = _ref.publish.file;\n\n return {\n file: file\n };\n};\n\nvar mapDispatchToProps = {\n onNewThumbnail: _publish.onNewThumbnail\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction dataURItoBlob(dataURI) {\n // convert base64/URLEncoded data component to raw binary data held in a string\n var byteString = atob(dataURI.split(',')[1]);\n // separate out the mime component\n var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n // write the bytes of the string to a typed array\n var ia = new Uint8Array(byteString.length);\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n return new Blob([ia], { type: mimeString });\n}\n\nvar PublishThumbnailInput = function (_React$Component) {\n _inherits(PublishThumbnailInput, _React$Component);\n\n function PublishThumbnailInput(props) {\n _classCallCheck(this, PublishThumbnailInput);\n\n var _this = _possibleConstructorReturn(this, (PublishThumbnailInput.__proto__ || Object.getPrototypeOf(PublishThumbnailInput)).call(this, props));\n\n _this.state = {\n videoSource: null,\n error: null,\n sliderMinRange: 1,\n sliderMaxRange: null,\n sliderValue: null\n };\n _this.handleVideoLoadedData = _this.handleVideoLoadedData.bind(_this);\n _this.handleSliderChange = _this.handleSliderChange.bind(_this);\n _this.createThumbnail = _this.createThumbnail.bind(_this);\n return _this;\n }\n\n _createClass(PublishThumbnailInput, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var file = this.props.file;\n\n this.setVideoSource(file);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n // if file changes\n if (nextProps.file && nextProps.file !== this.props.file) {\n var file = nextProps.file;\n\n this.setVideoSource(file);\n };\n }\n }, {\n key: 'setVideoSource',\n value: function setVideoSource(file) {\n var _this2 = this;\n\n var previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = function () {\n var dataUri = previewReader.result;\n var blob = dataURItoBlob(dataUri);\n var videoSource = URL.createObjectURL(blob);\n _this2.setState({ videoSource: videoSource });\n };\n }\n }, {\n key: 'handleVideoLoadedData',\n value: function handleVideoLoadedData(event) {\n var duration = event.target.duration;\n var totalMinutes = Math.floor(duration / 60);\n var totalSeconds = Math.floor(duration % 60);\n // set the slider\n this.setState({\n sliderMaxRange: duration * 100,\n sliderValue: duration * 100 / 2,\n totalMinutes: totalMinutes,\n totalSeconds: totalSeconds\n });\n // update the current time of the video\n var video = document.getElementById('video-thumb-player');\n video.currentTime = duration / 2;\n }\n }, {\n key: 'handleSliderChange',\n value: function handleSliderChange(event) {\n var value = parseInt(event.target.value);\n // update the slider value\n this.setState({\n sliderValue: value\n });\n // update the current time of the video\n var video = document.getElementById('video-thumb-player');\n video.currentTime = value / 100;\n }\n }, {\n key: 'createThumbnail',\n value: function createThumbnail() {\n // take a snapshot\n var video = document.getElementById('video-thumb-player');\n var canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);\n var dataUrl = canvas.toDataURL();\n var blob = dataURItoBlob(dataUrl);\n var snapshot = new File([blob], 'thumbnail.png', {\n type: 'image/png'\n });\n // set the thumbnail in redux store\n if (snapshot) {\n this.props.onNewThumbnail(snapshot);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _state = this.state,\n error = _state.error,\n videoSource = _state.videoSource,\n sliderMinRange = _state.sliderMinRange,\n sliderMaxRange = _state.sliderMaxRange,\n sliderValue = _state.sliderValue,\n totalMinutes = _state.totalMinutes,\n totalSeconds = _state.totalSeconds;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'label',\n { className: 'label' },\n 'Thumbnail:'\n ),\n _react2.default.createElement('video', {\n id: 'video-thumb-player',\n preload: 'metadata',\n muted: true,\n style: { display: 'none' },\n playsInline: true,\n onLoadedData: this.handleVideoLoadedData,\n src: videoSource,\n onSeeked: this.createThumbnail\n }),\n sliderValue ? _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'flex-container--row flex-container--space-between-center', style: { width: '100%' } },\n _react2.default.createElement(\n 'span',\n { className: 'info-message' },\n '0\\'00\"'\n ),\n _react2.default.createElement(\n 'span',\n { className: 'info-message' },\n totalMinutes,\n '\\'',\n totalSeconds,\n '\"'\n )\n ),\n _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement('input', {\n type: 'range',\n min: sliderMinRange,\n max: sliderMaxRange,\n value: sliderValue,\n className: 'slider',\n onChange: this.handleSliderChange\n })\n )\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'loading... '\n ),\n error ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n error\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Use slider to set thumbnail'\n )\n );\n }\n }]);\n\n return PublishThumbnailInput;\n}(_react2.default.Component);\n\nexports.default = PublishThumbnailInput;\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(108);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n showMetadataInputs: publish.showMetadataInputs,\n description: publish.metadata.description,\n license: publish.metadata.license,\n nsfw: publish.metadata.nsfw\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onMetadataChange: function onMetadataChange(name, value) {\n dispatch((0, _publish.updateMetadata)(name, value));\n },\n onToggleMetadataInputs: function onToggleMetadataInputs(value) {\n dispatch((0, _publish.toggleMetadataInputs)(value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ExpandingTextArea = __webpack_require__(109);\n\nvar _ExpandingTextArea2 = _interopRequireDefault(_ExpandingTextArea);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishMetadataInputs = function (_React$Component) {\n _inherits(PublishMetadataInputs, _React$Component);\n\n function PublishMetadataInputs(props) {\n _classCallCheck(this, PublishMetadataInputs);\n\n var _this = _possibleConstructorReturn(this, (PublishMetadataInputs.__proto__ || Object.getPrototypeOf(PublishMetadataInputs)).call(this, props));\n\n _this.toggleShowInputs = _this.toggleShowInputs.bind(_this);\n _this.handleInput = _this.handleInput.bind(_this);\n _this.handleSelect = _this.handleSelect.bind(_this);\n return _this;\n }\n\n _createClass(PublishMetadataInputs, [{\n key: 'toggleShowInputs',\n value: function toggleShowInputs() {\n this.props.onToggleMetadataInputs(!this.props.showMetadataInputs);\n }\n }, {\n key: 'handleInput',\n value: function handleInput(event) {\n var target = event.target;\n var value = target.type === 'checkbox' ? target.checked : target.value;\n var name = target.name;\n this.props.onMetadataChange(name, value);\n }\n }, {\n key: 'handleSelect',\n value: function handleSelect(event) {\n var name = event.target.name;\n var selectedOption = event.target.selectedOptions[0].value;\n this.props.onMetadataChange(name, selectedOption);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { id: 'publish-details', className: 'row row--padded row--no-top row--wide' },\n this.props.showMetadataInputs && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'row row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'label',\n { htmlFor: 'publish-license', className: 'label' },\n 'Description:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7 column--sml-10' },\n _react2.default.createElement(_ExpandingTextArea2.default, {\n id: 'publish-description',\n className: 'textarea textarea--primary textarea--full-width',\n rows: 1,\n maxLength: 2000,\n style: { maxHeight: 200 },\n name: 'description',\n placeholder: 'Optional description',\n value: this.props.description,\n onChange: this.handleInput })\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--med-10' },\n _react2.default.createElement(\n 'label',\n { htmlFor: 'publish-license', className: 'label' },\n 'License:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7 column--sml-10' },\n _react2.default.createElement(\n 'select',\n { type: 'text', name: 'license', id: 'publish-license', className: 'select select--primary', onChange: this.handleSelect },\n _react2.default.createElement(\n 'option',\n { value: ' ' },\n 'Unspecified'\n ),\n _react2.default.createElement(\n 'option',\n { value: 'Public Domain' },\n 'Public Domain'\n ),\n _react2.default.createElement(\n 'option',\n { value: 'Creative Commons' },\n 'Creative Commons'\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3' },\n _react2.default.createElement(\n 'label',\n { htmlFor: 'publish-nsfw', className: 'label' },\n 'Mature:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement('input', { className: 'input-checkbox', type: 'checkbox', id: 'publish-nsfw', name: 'nsfw', value: this.props.nsfw, onChange: this.handleInput })\n )\n )\n ),\n _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: this.toggleShowInputs },\n this.props.showMetadataInputs ? 'less' : 'more'\n )\n );\n }\n }]);\n\n return PublishMetadataInputs;\n}(_react2.default.Component);\n\nexports.default = PublishMetadataInputs;\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ExpandingTextarea = function (_Component) {\n _inherits(ExpandingTextarea, _Component);\n\n function ExpandingTextarea(props) {\n _classCallCheck(this, ExpandingTextarea);\n\n var _this = _possibleConstructorReturn(this, (ExpandingTextarea.__proto__ || Object.getPrototypeOf(ExpandingTextarea)).call(this, props));\n\n _this._handleChange = _this._handleChange.bind(_this);\n return _this;\n }\n\n _createClass(ExpandingTextarea, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.adjustTextarea({});\n }\n }, {\n key: '_handleChange',\n value: function _handleChange(event) {\n var onChange = this.props.onChange;\n\n if (onChange) onChange(event);\n this.adjustTextarea(event);\n }\n }, {\n key: 'adjustTextarea',\n value: function adjustTextarea(_ref) {\n var _ref$target = _ref.target,\n target = _ref$target === undefined ? this.el : _ref$target;\n\n target.style.height = 0;\n target.style.height = target.scrollHeight + 'px';\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var rest = _objectWithoutProperties(this.props, []);\n\n return _react2.default.createElement('textarea', _extends({}, rest, {\n ref: function ref(x) {\n return _this2.el = x;\n },\n onChange: this._handleChange\n }));\n }\n }]);\n\n return ExpandingTextarea;\n}(_react.Component);\n\nExpandingTextarea.propTypes = {\n onChange: _propTypes2.default.func\n};\n\nexports.default = ExpandingTextarea;\n\n/***/ }),\n/* 110 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(111);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n publish = _ref.publish;\n\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n publishInChannel: publish.publishInChannel,\n selectedChannel: publish.selectedChannel,\n channelError: publish.error.channel\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onPublishInChannelChange: function onPublishInChannelChange(value) {\n dispatch((0, _publish.updateError)('channel', null));\n dispatch((0, _publish.setPublishInChannel)(value));\n },\n onChannelSelect: function onChannelSelect(value) {\n dispatch((0, _publish.updateError)('channel', null));\n dispatch((0, _publish.updateSelectedChannel)(value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 111 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ChannelLoginForm = __webpack_require__(41);\n\nvar _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm);\n\nvar _ChannelCreateForm = __webpack_require__(42);\n\nvar _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm);\n\nvar _publish_channel_select_states = __webpack_require__(35);\n\nvar states = _interopRequireWildcard(_publish_channel_select_states);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelSelect = function (_React$Component) {\n _inherits(ChannelSelect, _React$Component);\n\n function ChannelSelect(props) {\n _classCallCheck(this, ChannelSelect);\n\n var _this = _possibleConstructorReturn(this, (ChannelSelect.__proto__ || Object.getPrototypeOf(ChannelSelect)).call(this, props));\n\n _this.toggleAnonymousPublish = _this.toggleAnonymousPublish.bind(_this);\n _this.handleSelection = _this.handleSelection.bind(_this);\n return _this;\n }\n\n _createClass(ChannelSelect, [{\n key: 'toggleAnonymousPublish',\n value: function toggleAnonymousPublish(event) {\n var value = event.target.value;\n if (value === 'anonymous') {\n this.props.onPublishInChannelChange(false);\n } else {\n this.props.onPublishInChannelChange(true);\n }\n }\n }, {\n key: 'handleSelection',\n value: function handleSelection(event) {\n var selectedOption = event.target.selectedOptions[0].value;\n this.props.onChannelSelect(selectedOption);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'form',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--med-10' },\n _react2.default.createElement('input', { type: 'radio', name: 'anonymous-or-channel', id: 'anonymous-radio', className: 'input-radio', value: 'anonymous', checked: !this.props.publishInChannel, onChange: this.toggleAnonymousPublish }),\n _react2.default.createElement(\n 'label',\n { className: 'label label--pointer', htmlFor: 'anonymous-radio' },\n 'Anonymous'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7 column--med-10' },\n _react2.default.createElement('input', { type: 'radio', name: 'anonymous-or-channel', id: 'channel-radio', className: 'input-radio', value: 'in a channel', checked: this.props.publishInChannel, onChange: this.toggleAnonymousPublish }),\n _react2.default.createElement(\n 'label',\n { className: 'label label--pointer', htmlFor: 'channel-radio' },\n 'In a channel'\n )\n ),\n this.props.channelError ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n this.props.channelError\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Publish anonymously or in a channel'\n )\n ),\n this.props.publishInChannel && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'column column--3' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'channel-name-select' },\n 'Channel:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement(\n 'select',\n { type: 'text', id: 'channel-name-select', className: 'select select--arrow', value: this.props.selectedChannel, onChange: this.handleSelection },\n this.props.loggedInChannelName && _react2.default.createElement(\n 'option',\n { value: this.props.loggedInChannelName, id: 'publish-channel-select-channel-option' },\n this.props.loggedInChannelName\n ),\n _react2.default.createElement(\n 'option',\n { value: states.LOGIN },\n 'Existing'\n ),\n _react2.default.createElement(\n 'option',\n { value: states.CREATE },\n 'New'\n )\n )\n ),\n this.props.selectedChannel === states.LOGIN && _react2.default.createElement(_ChannelLoginForm2.default, null),\n this.props.selectedChannel === states.CREATE && _react2.default.createElement(_ChannelCreateForm2.default, null)\n )\n );\n }\n }]);\n\n return ChannelSelect;\n}(_react2.default.Component);\n\nexports.default = ChannelSelect;\n\n/***/ }),\n/* 112 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelLoginForm = function (_React$Component) {\n _inherits(ChannelLoginForm, _React$Component);\n\n function ChannelLoginForm(props) {\n _classCallCheck(this, ChannelLoginForm);\n\n var _this = _possibleConstructorReturn(this, (ChannelLoginForm.__proto__ || Object.getPrototypeOf(ChannelLoginForm)).call(this, props));\n\n _this.state = {\n error: null,\n name: '',\n password: ''\n };\n _this.handleInput = _this.handleInput.bind(_this);\n _this.loginToChannel = _this.loginToChannel.bind(_this);\n return _this;\n }\n\n _createClass(ChannelLoginForm, [{\n key: 'handleInput',\n value: function handleInput(event) {\n var name = event.target.name;\n var value = event.target.value;\n this.setState(_defineProperty({}, name, value));\n }\n }, {\n key: 'loginToChannel',\n value: function loginToChannel(event) {\n var _this2 = this;\n\n event.preventDefault();\n var params = {\n method: 'POST',\n body: JSON.stringify({ username: this.state.name, password: this.state.password }),\n headers: new Headers({\n 'Content-Type': 'application/json'\n }),\n credentials: 'include'\n };\n (0, _request2.default)('login', params).then(function (_ref) {\n var success = _ref.success,\n channelName = _ref.channelName,\n shortChannelId = _ref.shortChannelId,\n channelClaimId = _ref.channelClaimId,\n message = _ref.message;\n\n if (success) {\n _this2.props.onChannelLogin(channelName, shortChannelId, channelClaimId);\n } else {\n _this2.setState({ 'error': message });\n };\n }).catch(function (error) {\n if (error.message) {\n _this2.setState({ 'error': error.message });\n } else {\n _this2.setState({ 'error': error });\n }\n });\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'form',\n { id: 'channel-login-form' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'channel-login-name-input' },\n 'Name:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary flex-container--row flex-container--left-bottom' },\n _react2.default.createElement(\n 'span',\n null,\n '@'\n ),\n _react2.default.createElement('input', { type: 'text', id: 'channel-login-name-input', className: 'input-text', name: 'name', placeholder: 'Your Channel Name', value: this.state.channelName, onChange: this.handleInput })\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'channel-login-password-input' },\n 'Password:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary' },\n _react2.default.createElement('input', { type: 'password', id: 'channel-login-password-input', name: 'password', className: 'input-text', placeholder: '', value: this.state.channelPassword, onChange: this.handleInput })\n )\n )\n ),\n this.state.error ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n this.state.error\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Enter the name and password for your channel'\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary', onClick: this.loginToChannel },\n 'Authenticate'\n )\n )\n );\n }\n }]);\n\n return ChannelLoginForm;\n}(_react2.default.Component);\n\nexports.default = ChannelLoginForm;\n\n/***/ }),\n/* 113 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ProgressBar = __webpack_require__(20);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelCreateForm = function (_React$Component) {\n _inherits(ChannelCreateForm, _React$Component);\n\n function ChannelCreateForm(props) {\n _classCallCheck(this, ChannelCreateForm);\n\n var _this = _possibleConstructorReturn(this, (ChannelCreateForm.__proto__ || Object.getPrototypeOf(ChannelCreateForm)).call(this, props));\n\n _this.state = {\n error: null,\n channel: '',\n password: '',\n status: null\n };\n _this.handleChannelInput = _this.handleChannelInput.bind(_this);\n _this.handleInput = _this.handleInput.bind(_this);\n _this.createChannel = _this.createChannel.bind(_this);\n return _this;\n }\n\n _createClass(ChannelCreateForm, [{\n key: 'cleanseChannelInput',\n value: function cleanseChannelInput(input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n }, {\n key: 'handleChannelInput',\n value: function handleChannelInput(event) {\n var value = event.target.value;\n value = this.cleanseChannelInput(value);\n this.setState({ channel: value });\n if (value) {\n this.updateIsChannelAvailable(value);\n } else {\n this.setState({ error: 'Please enter a channel name' });\n }\n }\n }, {\n key: 'handleInput',\n value: function handleInput(event) {\n var name = event.target.name;\n var value = event.target.value;\n this.setState(_defineProperty({}, name, value));\n }\n }, {\n key: 'updateIsChannelAvailable',\n value: function updateIsChannelAvailable(channel) {\n var _this2 = this;\n\n var channelWithAtSymbol = '@' + channel;\n (0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol).then(function () {\n _this2.setState({ 'error': null });\n }).catch(function (error) {\n _this2.setState({ 'error': error.message });\n });\n }\n }, {\n key: 'checkIsChannelAvailable',\n value: function checkIsChannelAvailable(channel) {\n var channelWithAtSymbol = '@' + channel;\n return (0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol);\n }\n }, {\n key: 'checkIsPasswordProvided',\n value: function checkIsPasswordProvided(password) {\n return new Promise(function (resolve, reject) {\n if (!password || password.length < 1) {\n return reject(new Error('Please provide a password'));\n }\n resolve();\n });\n }\n }, {\n key: 'makePublishChannelRequest',\n value: function makePublishChannelRequest(username, password) {\n var params = {\n method: 'POST',\n body: JSON.stringify({ username: username, password: password }),\n headers: new Headers({\n 'Content-Type': 'application/json'\n }),\n credentials: 'include'\n };\n return new Promise(function (resolve, reject) {\n (0, _request2.default)('/signup', params).then(function (result) {\n return resolve(result);\n }).catch(function (error) {\n reject(new Error('Unfortunately, we encountered an error while creating your channel. Please let us know in Discord! ' + error.message));\n });\n });\n }\n }, {\n key: 'createChannel',\n value: function createChannel(event) {\n var _this3 = this;\n\n event.preventDefault();\n this.checkIsPasswordProvided(this.state.password).then(function () {\n return _this3.checkIsChannelAvailable(_this3.state.channel);\n }).then(function () {\n _this3.setState({ status: 'We are publishing your new channel. Sit tight...' });\n return _this3.makePublishChannelRequest(_this3.state.channel, _this3.state.password);\n }).then(function (result) {\n _this3.setState({ status: null });\n _this3.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId);\n }).catch(function (error) {\n if (error.message) {\n _this3.setState({ 'error': error.message, status: null });\n } else {\n _this3.setState({ 'error': error, status: null });\n };\n });\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n !this.state.status ? _react2.default.createElement(\n 'form',\n { id: 'publish-channel-form' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'new-channel-name' },\n 'Name:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary flex-container--row flex-container--left-bottom span--relative' },\n _react2.default.createElement(\n 'span',\n null,\n '@'\n ),\n _react2.default.createElement('input', { type: 'text', name: 'channel', id: 'new-channel-name', className: 'input-text', placeholder: 'exampleChannelName', value: this.state.channel, onChange: this.handleChannelInput }),\n this.state.channel && !this.state.error && _react2.default.createElement(\n 'span',\n { id: 'input-success-channel-name', className: 'info-message--success span--absolute' },\n '\\u2713'\n ),\n this.state.error && _react2.default.createElement(\n 'span',\n { id: 'input-success-channel-name', className: 'info-message--failure span--absolute' },\n '\\u2716'\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'new-channel-password' },\n 'Password:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary' },\n _react2.default.createElement('input', { type: 'password', name: 'password', id: 'new-channel-password', className: 'input-text', placeholder: '', value: this.state.password, onChange: this.handleInput })\n )\n )\n ),\n this.state.error ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n this.state.error\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Choose a name and password for your channel'\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary', onClick: this.createChannel },\n 'Create Channel'\n )\n )\n ) : _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n this.state.status\n ),\n _react2.default.createElement(_ProgressBar2.default, { size: 12 })\n )\n );\n }\n }]);\n\n return ChannelCreateForm;\n}(_react2.default.Component);\n\nexports.default = ChannelCreateForm;\n\n/***/ }),\n/* 114 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ActiveStatusBar = function ActiveStatusBar() {\n return _react2.default.createElement(\n 'span',\n { className: 'progress-bar progress-bar--active' },\n '| '\n );\n};\n\nexports.default = ActiveStatusBar;\n\n/***/ }),\n/* 115 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar InactiveStatusBar = function InactiveStatusBar() {\n return _react2.default.createElement(\n 'span',\n { className: 'progress-bar progress-bar--inactive' },\n '| '\n );\n};\n\nexports.default = InactiveStatusBar;\n\n/***/ }),\n/* 116 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(117);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n status: publish.status.status,\n message: publish.status.message\n };\n};\n\nvar mapDispatchToProps = {\n clearFile: _publish.clearFile\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 117 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ProgressBar = __webpack_require__(20);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _publish_claim_states = __webpack_require__(118);\n\nvar publishStates = _interopRequireWildcard(_publish_claim_states);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishStatus = function (_React$Component) {\n _inherits(PublishStatus, _React$Component);\n\n function PublishStatus() {\n _classCallCheck(this, PublishStatus);\n\n return _possibleConstructorReturn(this, (PublishStatus.__proto__ || Object.getPrototypeOf(PublishStatus)).apply(this, arguments));\n }\n\n _createClass(PublishStatus, [{\n key: 'render',\n value: function render() {\n var _props = this.props,\n status = _props.status,\n message = _props.message,\n clearFile = _props.clearFile;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column flex-container--center-center' },\n status === publishStates.LOAD_START && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'File is loading to server'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'blue' },\n '0%'\n )\n ),\n status === publishStates.LOADING && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'File is loading to server'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'blue' },\n message\n )\n )\n ),\n status === publishStates.PUBLISHING && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'Upload complete. Your file is now being published on the blockchain...'\n ),\n _react2.default.createElement(_ProgressBar2.default, { size: 12 }),\n _react2.default.createElement(\n 'p',\n null,\n 'Curious what magic is happening here? ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' },\n 'Learn more.'\n )\n )\n ),\n status === publishStates.SUCCESS && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'Your publish is complete! You are being redirected to it now.'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'If you are not automatically redirected, ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: message },\n 'click here.'\n )\n )\n ),\n status === publishStates.FAILED && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'Something went wrong...'\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'strong',\n null,\n message\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'For help, post the above error text in the #speech channel on the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' },\n 'lbry discord'\n )\n ),\n _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: clearFile },\n 'Reset'\n )\n )\n );\n }\n }]);\n\n return PublishStatus;\n}(_react2.default.Component);\n\n;\n\nexports.default = PublishStatus;\n\n/***/ }),\n/* 118 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LOAD_START = exports.LOAD_START = 'LOAD_START';\nvar LOADING = exports.LOADING = 'LOADING';\nvar PUBLISHING = exports.PUBLISHING = 'PUBLISHING';\nvar SUCCESS = exports.SUCCESS = 'SUCCESS';\nvar FAILED = exports.FAILED = 'FAILED';\n\n/***/ }),\n/* 119 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(120);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n message: publish.disabledMessage\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 120 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishDisabledMessage = function (_React$Component) {\n _inherits(PublishDisabledMessage, _React$Component);\n\n function PublishDisabledMessage() {\n _classCallCheck(this, PublishDisabledMessage);\n\n return _possibleConstructorReturn(this, (PublishDisabledMessage.__proto__ || Object.getPrototypeOf(PublishDisabledMessage)).apply(this, arguments));\n }\n\n _createClass(PublishDisabledMessage, [{\n key: 'render',\n value: function render() {\n var message = this.props.message;\n console.log('this.props.message:', message);\n return _react2.default.createElement(\n 'div',\n { className: 'row dropzone--disabled row--tall flex-container--column flex-container--center-center' },\n _react2.default.createElement(\n 'p',\n { className: 'text--disabled' },\n 'Publishing is currently disabled.'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'text--disabled' },\n message\n )\n );\n }\n }]);\n\n return PublishDisabledMessage;\n}(_react2.default.Component);\n\nexports.default = PublishDisabledMessage;\n\n/***/ }),\n/* 121 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AboutPage = function (_React$Component) {\n _inherits(AboutPage, _React$Component);\n\n function AboutPage() {\n _classCallCheck(this, AboutPage);\n\n return _possibleConstructorReturn(this, (AboutPage.__proto__ || Object.getPrototypeOf(AboutPage)).apply(this, arguments));\n }\n\n _createClass(AboutPage, [{\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: 'About', pageUri: 'about' }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'p',\n { className: 'pull-quote' },\n 'Spee.ch is an open-source project. Please contribute to the existing site, or fork it and make your own.'\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://twitter.com/spee_ch' },\n 'TWITTER'\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch' },\n 'GITHUB'\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://discord.gg/YjYbwhS' },\n 'DISCORD CHANNEL'\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch/blob/master/README.md' },\n 'DOCUMENTATION'\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'p',\n null,\n 'Spee.ch is a media-hosting site that reads from and publishes content to the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://lbry.io' },\n 'LBRY'\n ),\n ' blockchain.'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'Spee.ch is a hosting service, but with the added benefit that it stores your content on a decentralized network of computers -- the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://lbry.io/get' },\n 'LBRY'\n ),\n ' network. This means that your images are stored in multiple locations without a single point of failure.'\n ),\n _react2.default.createElement(\n 'h3',\n null,\n 'Contribute'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'If you have an idea for your own spee.ch-like site on top of LBRY, fork our ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://github.com/lbryio/spee.ch' },\n 'github repo'\n ),\n ' and go to town!'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'If you want to improve spee.ch, join our ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://discord.gg/YjYbwhS' },\n 'discord channel'\n ),\n ' or solve one of our ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://github.com/lbryio/spee.ch/issues' },\n 'github issues'\n ),\n '.'\n )\n )\n )\n )\n );\n }\n }]);\n\n return AboutPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = AboutPage;\n\n/***/ }),\n/* 122 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(123);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel;\n\n return {\n loggedInChannelName: channel.loggedInChannel.name\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 123 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _ChannelLoginForm = __webpack_require__(41);\n\nvar _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm);\n\nvar _ChannelCreateForm = __webpack_require__(42);\n\nvar _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LoginPage = function (_React$Component) {\n _inherits(LoginPage, _React$Component);\n\n function LoginPage() {\n _classCallCheck(this, LoginPage);\n\n return _possibleConstructorReturn(this, (LoginPage.__proto__ || Object.getPrototypeOf(LoginPage)).apply(this, arguments));\n }\n\n _createClass(LoginPage, [{\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(newProps) {\n // re-route the user to the homepage if the user is logged in\n if (newProps.loggedInChannelName !== this.props.loggedInChannelName) {\n this.props.history.push('/');\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: 'Login', pageUri: 'login' }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'p',\n null,\n 'Channels allow you to publish and group content under an identity. You can create a channel for yourself, or share one with like-minded friends. You can create 1 channel, or 100, so whether you\\'re ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: '/@catalonia2017:43dcf47163caa21d8404d9fe9b30f78ef3e146a8' },\n 'documenting important events'\n ),\n ', or making a public repository for ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: '/@catGifs' },\n 'cat gifs'\n ),\n ' (password: \\'1234\\'), try creating a channel for it!'\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'h3',\n { className: 'h3--no-bottom' },\n 'Log in to an existing channel:'\n ),\n _react2.default.createElement(_ChannelLoginForm2.default, null),\n _react2.default.createElement(\n 'h3',\n { className: 'h3--no-bottom' },\n 'Create a brand new channel:'\n ),\n _react2.default.createElement(_ChannelCreateForm2.default, null)\n )\n )\n )\n );\n }\n }]);\n\n return LoginPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = (0, _reactRouterDom.withRouter)(LoginPage);\n\n/***/ }),\n/* 124 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _show = __webpack_require__(8);\n\nvar _view = __webpack_require__(125);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n return {\n error: show.request.error,\n requestType: show.request.type\n };\n};\n\nvar mapDispatchToProps = {\n onHandleShowPageUri: _show.onHandleShowPageUri\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 125 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ErrorPage = __webpack_require__(21);\n\nvar _ErrorPage2 = _interopRequireDefault(_ErrorPage);\n\nvar _ShowAssetLite = __webpack_require__(126);\n\nvar _ShowAssetLite2 = _interopRequireDefault(_ShowAssetLite);\n\nvar _ShowAssetDetails = __webpack_require__(129);\n\nvar _ShowAssetDetails2 = _interopRequireDefault(_ShowAssetDetails);\n\nvar _ShowChannel = __webpack_require__(135);\n\nvar _ShowChannel2 = _interopRequireDefault(_ShowChannel);\n\nvar _show_request_types = __webpack_require__(43);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowPage = function (_React$Component) {\n _inherits(ShowPage, _React$Component);\n\n function ShowPage() {\n _classCallCheck(this, ShowPage);\n\n return _possibleConstructorReturn(this, (ShowPage.__proto__ || Object.getPrototypeOf(ShowPage)).apply(this, arguments));\n }\n\n _createClass(ShowPage, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.props.onHandleShowPageUri(this.props.match.params);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n if (nextProps.match.params !== this.props.match.params) {\n this.props.onHandleShowPageUri(nextProps.match.params);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n error = _props.error,\n requestType = _props.requestType;\n\n if (error) {\n return _react2.default.createElement(_ErrorPage2.default, { error: error });\n }\n switch (requestType) {\n case _show_request_types.CHANNEL:\n return _react2.default.createElement(_ShowChannel2.default, null);\n case _show_request_types.ASSET_LITE:\n return _react2.default.createElement(_ShowAssetLite2.default, null);\n case _show_request_types.ASSET_DETAILS:\n return _react2.default.createElement(_ShowAssetDetails2.default, null);\n default:\n return _react2.default.createElement(\n 'p',\n null,\n 'loading...'\n );\n }\n }\n }]);\n\n return ShowPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowPage;\n\n/***/ }),\n/* 126 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(127);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select request info\n var requestId = show.request.id;\n // select asset info\n var asset = void 0;\n var request = show.requestList[requestId] || null;\n var assetList = show.assetList;\n if (request && assetList) {\n var assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset: asset\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 127 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _AssetDisplay = __webpack_require__(44);\n\nvar _AssetDisplay2 = _interopRequireDefault(_AssetDisplay);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowLite = function (_React$Component) {\n _inherits(ShowLite, _React$Component);\n\n function ShowLite() {\n _classCallCheck(this, ShowLite);\n\n return _possibleConstructorReturn(this, (ShowLite.__proto__ || Object.getPrototypeOf(ShowLite)).apply(this, arguments));\n }\n\n _createClass(ShowLite, [{\n key: 'render',\n value: function render() {\n var asset = this.props.asset;\n\n if (asset) {\n var _asset$claimData = asset.claimData,\n name = _asset$claimData.name,\n claimId = _asset$claimData.claimId;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column flex-container--center-center show-lite-container' },\n _react2.default.createElement(_SEO2.default, { pageTitle: name, asset: asset }),\n _react2.default.createElement(_AssetDisplay2.default, null),\n _react2.default.createElement(\n _reactRouterDom.Link,\n { id: 'asset-boilerpate', className: 'link--primary fine-print', to: '/' + claimId + '/' + name },\n 'hosted via Spee.ch'\n )\n );\n }\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded flex-container--column flex-container--center-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'loading asset data...'\n )\n );\n }\n }]);\n\n return ShowLite;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowLite;\n\n/***/ }),\n/* 128 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ProgressBar = __webpack_require__(20);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _asset_display_states = __webpack_require__(37);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AssetDisplay = function (_React$Component) {\n _inherits(AssetDisplay, _React$Component);\n\n function AssetDisplay() {\n _classCallCheck(this, AssetDisplay);\n\n return _possibleConstructorReturn(this, (AssetDisplay.__proto__ || Object.getPrototypeOf(AssetDisplay)).apply(this, arguments));\n }\n\n _createClass(AssetDisplay, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props$asset$claimDat = this.props.asset.claimData,\n name = _props$asset$claimDat.name,\n claimId = _props$asset$claimDat.claimId;\n\n this.props.onFileRequest(name, claimId);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n status = _props.status,\n error = _props.error,\n _props$asset$claimDat2 = _props.asset.claimData,\n name = _props$asset$claimDat2.name,\n claimId = _props$asset$claimDat2.claimId,\n contentType = _props$asset$claimDat2.contentType,\n fileExt = _props$asset$claimDat2.fileExt,\n thumbnail = _props$asset$claimDat2.thumbnail;\n\n return _react2.default.createElement(\n 'div',\n { id: 'asset-display-component' },\n status === _asset_display_states.LOCAL_CHECK && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n null,\n 'Checking to see if Spee.ch has your asset locally...'\n )\n ),\n status === _asset_display_states.UNAVAILABLE && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n null,\n 'Sit tight, we\\'re searching the LBRY blockchain for your asset!'\n ),\n _react2.default.createElement(_ProgressBar2.default, { size: 12 }),\n _react2.default.createElement(\n 'p',\n null,\n 'Curious what magic is happening here? ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' },\n 'Learn more.'\n )\n )\n ),\n status === _asset_display_states.ERROR && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n null,\n 'Unfortunately, we couldn\\'t download your asset from LBRY. You can help us out by sharing the below error message in the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' },\n 'LBRY discord'\n ),\n '.'\n ),\n _react2.default.createElement(\n 'i',\n null,\n _react2.default.createElement(\n 'p',\n { id: 'error-message' },\n error\n )\n )\n ),\n status === _asset_display_states.AVAILABLE && function () {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n return _react2.default.createElement('img', {\n className: 'asset',\n src: '/' + claimId + '/' + name + '.' + fileExt,\n alt: name });\n case 'image/gif':\n return _react2.default.createElement('img', {\n className: 'asset',\n src: '/' + claimId + '/' + name + '.' + fileExt,\n alt: name\n });\n case 'video/mp4':\n return _react2.default.createElement(\n 'video',\n { className: 'asset video', controls: true, poster: thumbnail },\n _react2.default.createElement('source', {\n src: '/' + claimId + '/' + name + '.' + fileExt\n }),\n _react2.default.createElement(\n 'p',\n null,\n 'Your browser does not support the ',\n _react2.default.createElement(\n 'code',\n null,\n 'video'\n ),\n ' element.'\n )\n );\n default:\n return _react2.default.createElement(\n 'p',\n null,\n 'Unsupported file type'\n );\n }\n }()\n );\n }\n }]);\n\n return AssetDisplay;\n}(_react2.default.Component);\n\n;\n\nexports.default = AssetDisplay;\n\n/***/ }),\n/* 129 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(130);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select request info\n var requestId = show.request.id;\n // select asset info\n var asset = void 0;\n var request = show.requestList[requestId] || null;\n var assetList = show.assetList;\n if (request && assetList) {\n var assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset: asset\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 130 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _ErrorPage = __webpack_require__(21);\n\nvar _ErrorPage2 = _interopRequireDefault(_ErrorPage);\n\nvar _AssetTitle = __webpack_require__(131);\n\nvar _AssetTitle2 = _interopRequireDefault(_AssetTitle);\n\nvar _AssetDisplay = __webpack_require__(44);\n\nvar _AssetDisplay2 = _interopRequireDefault(_AssetDisplay);\n\nvar _AssetInfo = __webpack_require__(133);\n\nvar _AssetInfo2 = _interopRequireDefault(_AssetInfo);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowAssetDetails = function (_React$Component) {\n _inherits(ShowAssetDetails, _React$Component);\n\n function ShowAssetDetails() {\n _classCallCheck(this, ShowAssetDetails);\n\n return _possibleConstructorReturn(this, (ShowAssetDetails.__proto__ || Object.getPrototypeOf(ShowAssetDetails)).apply(this, arguments));\n }\n\n _createClass(ShowAssetDetails, [{\n key: 'render',\n value: function render() {\n var asset = this.props.asset;\n\n if (asset) {\n var name = asset.claimData.name;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: name + ' - details', asset: asset }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(_AssetTitle2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded show-details-container' },\n _react2.default.createElement(_AssetDisplay2.default, null)\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(_AssetInfo2.default, null)\n )\n )\n )\n );\n };\n return _react2.default.createElement(_ErrorPage2.default, { error: 'loading asset data...' });\n }\n }]);\n\n return ShowAssetDetails;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowAssetDetails;\n\n/***/ }),\n/* 131 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(132);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _show = __webpack_require__(13);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n var _selectAsset = (0, _show.selectAsset)(show),\n title = _selectAsset.claimData.title;\n\n return {\n title: title\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 132 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AssetTitle = function AssetTitle(_ref) {\n var title = _ref.title;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'span',\n { className: 'text--large' },\n title\n )\n );\n};\n\nexports.default = AssetTitle;\n\n/***/ }),\n/* 133 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(134);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _show = __webpack_require__(13);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select asset\n var asset = (0, _show.selectAsset)(show);\n // return props\n return {\n asset: asset\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 134 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AssetInfo = function (_React$Component) {\n _inherits(AssetInfo, _React$Component);\n\n function AssetInfo(props) {\n _classCallCheck(this, AssetInfo);\n\n var _this = _possibleConstructorReturn(this, (AssetInfo.__proto__ || Object.getPrototypeOf(AssetInfo)).call(this, props));\n\n _this.copyToClipboard = _this.copyToClipboard.bind(_this);\n return _this;\n }\n\n _createClass(AssetInfo, [{\n key: 'copyToClipboard',\n value: function copyToClipboard(event) {\n var elementToCopy = event.target.dataset.elementtocopy;\n var element = document.getElementById(elementToCopy);\n element.select();\n try {\n document.execCommand('copy');\n } catch (err) {\n this.setState({ error: 'Oops, unable to copy' });\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props$asset = this.props.asset,\n shortId = _props$asset.shortId,\n _props$asset$claimDat = _props$asset.claimData,\n channelName = _props$asset$claimDat.channelName,\n certificateId = _props$asset$claimDat.certificateId,\n description = _props$asset$claimDat.description,\n name = _props$asset$claimDat.name,\n claimId = _props$asset$claimDat.claimId,\n fileExt = _props$asset$claimDat.fileExt,\n contentType = _props$asset$claimDat.contentType,\n thumbnail = _props$asset$claimDat.thumbnail,\n host = _props$asset$claimDat.host;\n\n return _react2.default.createElement(\n 'div',\n null,\n channelName && _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Channel:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { to: '/' + channelName + ':' + certificateId },\n channelName\n )\n )\n )\n ),\n description && _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n description\n )\n ),\n _react2.default.createElement(\n 'div',\n { id: 'show-share-buttons' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Share:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'div',\n {\n className: 'row row--short row--wide flex-container--row flex-container--space-between-bottom flex-container--wrap' },\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://twitter.com/intent/tweet?text=' + host + '/' + shortId + '/' + name },\n 'twitter'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://www.facebook.com/sharer/sharer.php?u=' + host + '/' + shortId + '/' + name },\n 'facebook'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'http://tumblr.com/widgets/share/tool?canonicalUrl=' + host + '/' + shortId + '/' + name },\n 'tumblr'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://www.reddit.com/submit?url=' + host + '/' + shortId + '/' + name + '&title=' + name },\n 'reddit'\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'div',\n { id: 'show-short-link' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Link:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--short row--wide' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement(\n 'div',\n { className: 'input-error', id: 'input-error-copy-short-link', hidden: 'true' },\n 'error here'\n ),\n _react2.default.createElement('input', { type: 'text', id: 'short-link', className: 'input-disabled input-text--full-width', readOnly: true,\n spellCheck: 'false',\n value: host + '/' + shortId + '/' + name + '.' + fileExt,\n onClick: this.select })\n ),\n _react2.default.createElement('div', { className: 'column column--1' }),\n _react2.default.createElement(\n 'div',\n { className: 'column column--2' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary button--wide', 'data-elementtocopy': 'short-link',\n onClick: this.copyToClipboard },\n 'copy'\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { id: 'show-embed-code' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Embed:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--short row--wide' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement(\n 'div',\n { className: 'input-error', id: 'input-error-copy-embed-text', hidden: 'true' },\n 'error here'\n ),\n contentType === 'video/mp4' ? _react2.default.createElement('input', { type: 'text', id: 'embed-text', className: 'input-disabled input-text--full-width', readOnly: true,\n onClick: this.select, spellCheck: 'false',\n value: '' }) : _react2.default.createElement('input', { type: 'text', id: 'embed-text', className: 'input-disabled input-text--full-width', readOnly: true,\n onClick: this.select, spellCheck: 'false',\n value: ''\n })\n ),\n _react2.default.createElement('div', { className: 'column column--1' }),\n _react2.default.createElement(\n 'div',\n { className: 'column column--2' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary button--wide', 'data-elementtocopy': 'embed-text',\n onClick: this.copyToClipboard },\n 'copy'\n )\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'flex-container--row flex-container--space-between-bottom' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { className: 'link--primary', to: '/' + shortId + '/' + name + '.' + fileExt },\n _react2.default.createElement(\n 'span',\n {\n className: 'text' },\n 'Direct Link'\n )\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: host + '/' + claimId + '/' + name + '.' + fileExt, download: name },\n 'Download'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://lbry.io/dmca' },\n 'Report'\n )\n )\n );\n }\n }]);\n\n return AssetInfo;\n}(_react2.default.Component);\n\n;\n\nexports.default = AssetInfo;\n\n/***/ }),\n/* 135 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(136);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select request info\n var requestId = show.request.id;\n // select request\n var previousRequest = show.requestList[requestId] || null;\n // select channel\n var channel = void 0;\n if (previousRequest) {\n var channelKey = previousRequest.key;\n channel = show.channelList[channelKey] || null;\n }\n return {\n channel: channel\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 136 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _ErrorPage = __webpack_require__(21);\n\nvar _ErrorPage2 = _interopRequireDefault(_ErrorPage);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _ChannelClaimsDisplay = __webpack_require__(137);\n\nvar _ChannelClaimsDisplay2 = _interopRequireDefault(_ChannelClaimsDisplay);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowChannel = function (_React$Component) {\n _inherits(ShowChannel, _React$Component);\n\n function ShowChannel() {\n _classCallCheck(this, ShowChannel);\n\n return _possibleConstructorReturn(this, (ShowChannel.__proto__ || Object.getPrototypeOf(ShowChannel)).apply(this, arguments));\n }\n\n _createClass(ShowChannel, [{\n key: 'render',\n value: function render() {\n var channel = this.props.channel;\n\n if (channel) {\n var name = channel.name,\n longId = channel.longId,\n shortId = channel.shortId;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: name, channel: channel }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(\n 'h2',\n null,\n 'channel name: ',\n name\n ),\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'full channel id: ',\n longId\n ),\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'short channel id: ',\n shortId\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(_ChannelClaimsDisplay2.default, null)\n )\n )\n );\n };\n return _react2.default.createElement(_ErrorPage2.default, { error: 'loading channel data...' });\n }\n }]);\n\n return ShowChannel;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowChannel;\n\n/***/ }),\n/* 137 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _show = __webpack_require__(8);\n\nvar _view = __webpack_require__(138);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select channel key\n var request = show.requestList[show.request.id];\n var channelKey = request.key;\n // select channel claims\n var channel = show.channelList[channelKey] || null;\n // return props\n return {\n channelKey: channelKey,\n channel: channel\n };\n};\n\nvar mapDispatchToProps = {\n onUpdateChannelClaims: _show.onUpdateChannelClaims\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 138 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _AssetPreview = __webpack_require__(139);\n\nvar _AssetPreview2 = _interopRequireDefault(_AssetPreview);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelClaimsDisplay = function (_React$Component) {\n _inherits(ChannelClaimsDisplay, _React$Component);\n\n function ChannelClaimsDisplay(props) {\n _classCallCheck(this, ChannelClaimsDisplay);\n\n var _this = _possibleConstructorReturn(this, (ChannelClaimsDisplay.__proto__ || Object.getPrototypeOf(ChannelClaimsDisplay)).call(this, props));\n\n _this.showNextResultsPage = _this.showNextResultsPage.bind(_this);\n _this.showPreviousResultsPage = _this.showPreviousResultsPage.bind(_this);\n return _this;\n }\n\n _createClass(ChannelClaimsDisplay, [{\n key: 'showPreviousResultsPage',\n value: function showPreviousResultsPage() {\n var currentPage = this.props.channel.claimsData.currentPage;\n\n var previousPage = parseInt(currentPage) - 1;\n this.showNewPage(previousPage);\n }\n }, {\n key: 'showNextResultsPage',\n value: function showNextResultsPage() {\n var currentPage = this.props.channel.claimsData.currentPage;\n\n var nextPage = parseInt(currentPage) + 1;\n this.showNewPage(nextPage);\n }\n }, {\n key: 'showNewPage',\n value: function showNewPage(page) {\n var _props = this.props,\n channelKey = _props.channelKey,\n _props$channel = _props.channel,\n name = _props$channel.name,\n longId = _props$channel.longId;\n\n this.props.onUpdateChannelClaims(channelKey, name, longId, page);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props$channel$claims = this.props.channel.claimsData,\n claims = _props$channel$claims.claims,\n currentPage = _props$channel$claims.currentPage,\n totalPages = _props$channel$claims.totalPages;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall' },\n claims.length > 0 ? _react2.default.createElement(\n 'div',\n null,\n claims.map(function (claim, index) {\n return _react2.default.createElement(_AssetPreview2.default, {\n claimData: claim,\n key: claim.name + '-' + index\n });\n }),\n _react2.default.createElement(\n 'div',\n null,\n currentPage > 1 && _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: this.showPreviousResultsPage },\n 'Previous Page'\n ),\n currentPage < totalPages && _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: this.showNextResultsPage },\n 'Next Page'\n )\n )\n ) : _react2.default.createElement(\n 'p',\n null,\n 'There are no claims in this channel'\n )\n );\n }\n }]);\n\n return ChannelClaimsDisplay;\n}(_react2.default.Component);\n\n;\n\nexports.default = ChannelClaimsDisplay;\n\n/***/ }),\n/* 139 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(140);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var defaultThumbnail = _ref.site.defaults.defaultThumbnail;\n\n return {\n defaultThumbnail: defaultThumbnail\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 140 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AssetPreview = function AssetPreview(_ref) {\n var defaultThumbnail = _ref.defaultThumbnail,\n _ref$claimData = _ref.claimData,\n name = _ref$claimData.name,\n claimId = _ref$claimData.claimId,\n fileExt = _ref$claimData.fileExt,\n contentType = _ref$claimData.contentType,\n thumbnail = _ref$claimData.thumbnail;\n\n var directSourceLink = claimId + '/' + name + '.' + fileExt;\n var showUrlLink = '/' + claimId + '/' + name;\n return _react2.default.createElement(\n 'div',\n { className: 'asset-holder' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { to: showUrlLink },\n function () {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n case 'image/gif':\n return _react2.default.createElement('img', {\n className: 'asset-preview',\n src: directSourceLink,\n alt: name\n });\n case 'video/mp4':\n return _react2.default.createElement('img', {\n className: 'asset-preview video',\n src: thumbnail || defaultThumbnail,\n alt: name\n });\n default:\n return _react2.default.createElement(\n 'p',\n null,\n 'unsupported file type'\n );\n }\n }()\n )\n );\n};\n\nexports.default = AssetPreview;\n\n/***/ }),\n/* 141 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(142);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var _ref$site = _ref.site,\n host = _ref$site.host,\n title = _ref$site.title;\n\n return {\n host: host,\n title: title\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 142 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _reactHelmet = __webpack_require__(14);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar FourOhForPage = function (_React$Component) {\n _inherits(FourOhForPage, _React$Component);\n\n function FourOhForPage() {\n _classCallCheck(this, FourOhForPage);\n\n return _possibleConstructorReturn(this, (FourOhForPage.__proto__ || Object.getPrototypeOf(FourOhForPage)).apply(this, arguments));\n }\n\n _createClass(FourOhForPage, [{\n key: 'render',\n value: function render() {\n var _props = this.props,\n title = _props.title,\n host = _props.host;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n _reactHelmet2.default,\n null,\n _react2.default.createElement(\n 'title',\n null,\n title,\n ' - 404'\n ),\n _react2.default.createElement('link', { rel: 'canonical', href: host + '/404' })\n ),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'h2',\n null,\n '404'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'That page does not exist'\n )\n )\n );\n }\n }]);\n\n return FourOhForPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = FourOhForPage;\n\n/***/ }),\n/* 143 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _require = __webpack_require__(17),\n sendGAServeEvent = _require.sendGAServeEvent;\n\nvar _require2 = __webpack_require__(144),\n determineResponseType = _require2.determineResponseType,\n flipClaimNameAndIdForBackwardsCompatibility = _require2.flipClaimNameAndIdForBackwardsCompatibility,\n logRequestData = _require2.logRequestData,\n getClaimIdAndServeAsset = _require2.getClaimIdAndServeAsset;\n\nvar lbryUri = __webpack_require__(145);\nvar handleShowRender = __webpack_require__(146);\nvar SERVE = 'SERVE';\n\nmodule.exports = function (app) {\n // route to serve a specific asset using the channel or claim id\n app.get('/:identifier/:claim', function (req, res) {\n var headers = req.headers,\n ip = req.ip,\n originalUrl = req.originalUrl,\n params = req.params;\n // decide if this is a show request\n\n var hasFileExtension = void 0;\n try {\n var _lbryUri$parseModifie = lbryUri.parseModifier(params.claim);\n\n hasFileExtension = _lbryUri$parseModifie.hasFileExtension;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n var responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n var claimName = void 0;\n try {\n var _lbryUri$parseClaim = lbryUri.parseClaim(params.claim);\n\n claimName = _lbryUri$parseClaim.claimName;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n // parse the identifier\n var isChannel = void 0,\n channelName = void 0,\n channelClaimId = void 0,\n claimId = void 0;\n try {\n var _lbryUri$parseIdentif = lbryUri.parseIdentifier(params.identifier);\n\n isChannel = _lbryUri$parseIdentif.isChannel;\n channelName = _lbryUri$parseIdentif.channelName;\n channelClaimId = _lbryUri$parseIdentif.channelClaimId;\n claimId = _lbryUri$parseIdentif.claimId;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n if (!isChannel) {\n var _flipClaimNameAndIdFo = flipClaimNameAndIdForBackwardsCompatibility(claimId, claimName);\n\n var _flipClaimNameAndIdFo2 = _slicedToArray(_flipClaimNameAndIdFo, 2);\n\n claimId = _flipClaimNameAndIdFo2[0];\n claimName = _flipClaimNameAndIdFo2[1];\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, channelName, claimId);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res);\n });\n // route to serve the winning asset at a claim or a channel page\n app.get('/:claim', function (req, res) {\n var headers = req.headers,\n ip = req.ip,\n originalUrl = req.originalUrl,\n params = req.params;\n // decide if this is a show request\n\n var hasFileExtension = void 0;\n try {\n var _lbryUri$parseModifie2 = lbryUri.parseModifier(params.claim);\n\n hasFileExtension = _lbryUri$parseModifie2.hasFileExtension;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n var responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n var claimName = void 0;\n try {\n var _lbryUri$parseClaim2 = lbryUri.parseClaim(params.claim);\n\n claimName = _lbryUri$parseClaim2.claimName;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, null, null);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(null, null, claimName, null, originalUrl, ip, res);\n });\n};\n\n/***/ }),\n/* 144 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(30),\n getClaimId = _require.getClaimId,\n getLocalFileRecord = _require.getLocalFileRecord;\n\nvar _require2 = __webpack_require__(29),\n handleErrorResponse = _require2.handleErrorResponse;\n\nvar SERVE = 'SERVE';\nvar SHOW = 'SHOW';\nvar NO_FILE = 'NO_FILE';\nvar NO_CHANNEL = 'NO_CHANNEL';\nvar NO_CLAIM = 'NO_CLAIM';\n\nfunction clientAcceptsHtml(_ref) {\n var accept = _ref.accept;\n\n return accept && accept.match(/text\\/html/);\n};\n\nfunction requestIsFromBrowser(headers) {\n return headers['user-agent'] && headers['user-agent'].match(/Mozilla/);\n};\n\nfunction clientWantsAsset(_ref2) {\n var accept = _ref2.accept,\n range = _ref2.range;\n\n var imageIsWanted = accept && accept.match(/image\\/.*/) && !accept.match(/text\\/html/) && !accept.match(/text\\/\\*/);\n var videoIsWanted = accept && range;\n return imageIsWanted || videoIsWanted;\n};\n\nfunction isValidClaimId(claimId) {\n return claimId.length === 40 && !/[^A-Za-z0-9]/g.test(claimId);\n};\n\nfunction isValidShortId(claimId) {\n return claimId.length === 1; // it should really evaluate the short url itself\n};\n\nfunction isValidShortIdOrClaimId(input) {\n return isValidClaimId(input) || isValidShortId(input);\n};\n\nfunction serveAssetToClient(claimId, name, res) {\n return getLocalFileRecord(claimId, name).then(function (fileRecord) {\n // check that a local record was found\n if (fileRecord === NO_FILE) {\n return res.status(307).redirect('/api/claim/get/' + name + '/' + claimId);\n }\n // serve the file\n var filePath = fileRecord.filePath,\n fileType = fileRecord.fileType;\n\n logger.verbose('serving file: ' + filePath);\n var sendFileOptions = {\n headers: {\n 'X-Content-Type-Options': 'nosniff',\n 'Content-Type': fileType || 'image/jpeg'\n }\n };\n res.status(200).sendFile(filePath, sendFileOptions);\n }).catch(function (error) {\n throw error;\n });\n};\n\nmodule.exports = {\n getClaimIdAndServeAsset: function getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res) {\n // get the claim Id and then serve the asset\n getClaimId(channelName, channelClaimId, claimName, claimId).then(function (fullClaimId) {\n if (fullClaimId === NO_CLAIM) {\n return res.status(404).json({ success: false, message: 'no claim id could be found' });\n } else if (fullClaimId === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'no channel id could be found' });\n }\n serveAssetToClient(fullClaimId, claimName, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'success');\n }).catch(function (error) {\n handleErrorResponse(originalUrl, ip, error, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'fail');\n });\n },\n determineResponseType: function determineResponseType(hasFileExtension, headers) {\n var responseType = void 0;\n if (hasFileExtension) {\n responseType = SERVE; // assume a serve request if file extension is present\n if (clientAcceptsHtml(headers)) {\n // if the request comes from a browser, change it to a show request\n responseType = SHOW;\n }\n } else {\n responseType = SHOW;\n if (clientWantsAsset(headers) && requestIsFromBrowser(headers)) {\n // this is in case someone embeds a show url\n logger.debug('Show request came from browser but wants an image/video. Changing response to serve...');\n responseType = SERVE;\n }\n }\n return responseType;\n },\n flipClaimNameAndIdForBackwardsCompatibility: function flipClaimNameAndIdForBackwardsCompatibility(identifier, name) {\n // this is a patch for backwards compatability with '/name/claim_id' url format\n if (isValidShortIdOrClaimId(name) && !isValidShortIdOrClaimId(identifier)) {\n var tempName = name;\n name = identifier;\n identifier = tempName;\n }\n return [identifier, name];\n },\n logRequestData: function logRequestData(responseType, claimName, channelName, claimId) {\n logger.debug('responseType ===', responseType);\n logger.debug('claim name === ', claimName);\n logger.debug('channel name ===', channelName);\n logger.debug('claim id ===', claimId);\n }\n};\n\n/***/ }),\n/* 145 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n REGEXP_INVALID_CLAIM: /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS: /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR: '@',\n parseIdentifier: function parseIdentifier(identifier) {\n logger.debug('parsing identifier:', identifier);\n var componentsRegex = new RegExp('([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec = componentsRegex.exec(identifier).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec2 = _slicedToArray(_componentsRegex$exec, 4),\n proto = _componentsRegex$exec2[0],\n value = _componentsRegex$exec2[1],\n modifierSeperator = _componentsRegex$exec2[2],\n modifier = _componentsRegex$exec2[3];\n\n logger.debug(proto + ', ' + value + ', ' + modifierSeperator + ', ' + modifier);\n\n // Validate and process name\n if (!value) {\n throw new Error('Check your url. No channel name provided before \"' + modifierSeperator + '\"');\n }\n var isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n var channelName = isChannel ? value : null;\n var claimId = void 0;\n if (isChannel) {\n if (!channelName) {\n throw new Error('No channel name after @.');\n }\n var nameBadChars = channelName.match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error('Invalid characters in channel name: ' + nameBadChars.join(', ') + '.');\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n var channelClaimId = void 0;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error('No modifier provided after separator \"' + modifierSeperator + '\"');\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error('The \"' + modifierSeperator + '\" modifier is not currently supported');\n }\n }\n return {\n isChannel: isChannel,\n channelName: channelName,\n channelClaimId: channelClaimId,\n claimId: claimId\n };\n },\n parseClaim: function parseClaim(claim) {\n logger.debug('parsing name:', claim);\n var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec3 = componentsRegex.exec(claim).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec4 = _slicedToArray(_componentsRegex$exec3, 4),\n proto = _componentsRegex$exec4[0],\n claimName = _componentsRegex$exec4[1],\n modifierSeperator = _componentsRegex$exec4[2],\n modifier = _componentsRegex$exec4[3];\n\n logger.debug(proto + ', ' + claimName + ', ' + modifierSeperator + ', ' + modifier);\n\n // Validate and process name\n if (!claimName) {\n throw new Error('No claim name provided before .');\n }\n var nameBadChars = claimName.match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error('Invalid characters in claim name: ' + nameBadChars.join(', ') + '.');\n }\n // Validate and process modifier\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error('No file extension provided after separator ' + modifierSeperator + '.');\n }\n if (modifierSeperator !== '.') {\n throw new Error('The ' + modifierSeperator + ' modifier is not supported in the claim name');\n }\n }\n // return results\n return {\n claimName: claimName\n };\n },\n parseModifier: function parseModifier(claim) {\n logger.debug('parsing modifier:', claim);\n var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec5 = componentsRegex.exec(claim).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec6 = _slicedToArray(_componentsRegex$exec5, 4),\n proto = _componentsRegex$exec6[0],\n claimName = _componentsRegex$exec6[1],\n modifierSeperator = _componentsRegex$exec6[2],\n modifier = _componentsRegex$exec6[3];\n\n logger.debug(proto + ', ' + claimName + ', ' + modifierSeperator + ', ' + modifier);\n // Validate and process modifier\n var hasFileExtension = false;\n if (modifierSeperator) {\n hasFileExtension = true;\n }\n return {\n hasFileExtension: hasFileExtension\n };\n }\n};\n\n/***/ }),\n/* 146 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _server = __webpack_require__(32);\n\nvar _redux = __webpack_require__(18);\n\nvar _index = __webpack_require__(33);\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _index3 = __webpack_require__(38);\n\nvar _index4 = _interopRequireDefault(_index3);\n\nvar _app = __webpack_require__(39);\n\nvar _app2 = _interopRequireDefault(_app);\n\nvar _renderFullPage = __webpack_require__(45);\n\nvar _renderFullPage2 = _interopRequireDefault(_renderFullPage);\n\nvar _reduxSaga = __webpack_require__(147);\n\nvar _reduxSaga2 = _interopRequireDefault(_reduxSaga);\n\nvar _effects = __webpack_require__(15);\n\nvar _show_uri = __webpack_require__(148);\n\nvar _show = __webpack_require__(8);\n\nvar _reactHelmet = __webpack_require__(14);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar returnSagaWithParams = function returnSagaWithParams(saga, params) {\n return (/*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return (0, _effects.call)(saga, params);\n\n case 2:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n })\n );\n};\n\nmodule.exports = function (req, res) {\n var context = {};\n\n // create and apply middleware\n var sagaMiddleware = (0, _reduxSaga2.default)();\n var middleware = (0, _redux.applyMiddleware)(sagaMiddleware);\n\n // create a new Redux store instance\n var store = (0, _redux.createStore)(_index2.default, middleware);\n\n // create saga\n var action = (0, _show.onHandleShowPageUri)(req.params);\n var saga = returnSagaWithParams(_show_uri.handleShowPageUri, action);\n\n // run the saga middleware\n sagaMiddleware.run(saga).done.then(function () {\n // render component to a string\n var html = (0, _server.renderToString)(_react2.default.createElement(\n _reactRedux.Provider,\n { store: store },\n _react2.default.createElement(\n _reactRouterDom.StaticRouter,\n { location: req.url, context: context },\n _react2.default.createElement(\n _index4.default,\n null,\n _react2.default.createElement(_app2.default, null)\n )\n )\n ));\n\n // get head tags from helmet\n var helmet = _reactHelmet2.default.renderStatic();\n\n // check for a redirect\n if (context.url) {\n return res.redirect(301, context.url);\n }\n\n // get the initial state from our Redux store\n var preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send((0, _renderFullPage2.default)(helmet, html, preloadedState));\n });\n};\n\n/***/ }),\n/* 147 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"redux-saga\");\n\n/***/ }),\n/* 148 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.handleShowPageUri = handleShowPageUri;\nexports.watchHandleShowPageUri = watchHandleShowPageUri;\n\nvar _effects = __webpack_require__(15);\n\nvar _show_action_types = __webpack_require__(12);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(8);\n\nvar _show_asset = __webpack_require__(149);\n\nvar _show_channel = __webpack_require__(151);\n\nvar _lbryUri = __webpack_require__(153);\n\nvar _lbryUri2 = _interopRequireDefault(_lbryUri);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateIdentifierAndClaim),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateClaimOnly),\n _marked3 = /*#__PURE__*/regeneratorRuntime.mark(handleShowPageUri),\n _marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchHandleShowPageUri);\n\nfunction parseAndUpdateIdentifierAndClaim(modifier, claim) {\n var isChannel, channelName, channelClaimId, claimId, claimName, extension, _lbryUri$parseIdentif, _lbryUri$parseClaim;\n\n return regeneratorRuntime.wrap(function parseAndUpdateIdentifierAndClaim$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n // this is a request for an asset\n // claim will be an asset claim\n // the identifier could be a channel or a claim id\n isChannel = void 0, channelName = void 0, channelClaimId = void 0, claimId = void 0, claimName = void 0, extension = void 0;\n _context.prev = 1;\n _lbryUri$parseIdentif = _lbryUri2.default.parseIdentifier(modifier);\n isChannel = _lbryUri$parseIdentif.isChannel;\n channelName = _lbryUri$parseIdentif.channelName;\n channelClaimId = _lbryUri$parseIdentif.channelClaimId;\n claimId = _lbryUri$parseIdentif.claimId;\n _lbryUri$parseClaim = _lbryUri2.default.parseClaim(claim);\n claimName = _lbryUri$parseClaim.claimName;\n extension = _lbryUri$parseClaim.extension;\n _context.next = 17;\n break;\n\n case 12:\n _context.prev = 12;\n _context.t0 = _context['catch'](1);\n _context.next = 16;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));\n\n case 16:\n return _context.abrupt('return', _context.sent);\n\n case 17:\n if (!isChannel) {\n _context.next = 21;\n break;\n }\n\n _context.next = 20;\n return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, channelName, channelClaimId, extension));\n\n case 20:\n return _context.abrupt('return', _context.sent);\n\n case 21:\n ;\n _context.next = 24;\n return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, claimId, null, null, extension));\n\n case 24:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[1, 12]]);\n}\nfunction parseAndUpdateClaimOnly(claim) {\n var isChannel, channelName, channelClaimId, _lbryUri$parseIdentif2, claimName, extension, _lbryUri$parseClaim2;\n\n return regeneratorRuntime.wrap(function parseAndUpdateClaimOnly$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // this could be a request for an asset or a channel page\n // claim could be an asset claim or a channel claim\n isChannel = void 0, channelName = void 0, channelClaimId = void 0;\n _context2.prev = 1;\n _lbryUri$parseIdentif2 = _lbryUri2.default.parseIdentifier(claim);\n isChannel = _lbryUri$parseIdentif2.isChannel;\n channelName = _lbryUri$parseIdentif2.channelName;\n channelClaimId = _lbryUri$parseIdentif2.channelClaimId;\n _context2.next = 13;\n break;\n\n case 8:\n _context2.prev = 8;\n _context2.t0 = _context2['catch'](1);\n _context2.next = 12;\n return (0, _effects.put)((0, _show.onRequestError)(_context2.t0.message));\n\n case 12:\n return _context2.abrupt('return', _context2.sent);\n\n case 13:\n if (!isChannel) {\n _context2.next = 17;\n break;\n }\n\n _context2.next = 16;\n return (0, _effects.call)(_show_channel.newChannelRequest, (0, _show.onNewChannelRequest)(channelName, channelClaimId));\n\n case 16:\n return _context2.abrupt('return', _context2.sent);\n\n case 17:\n // if not for a channel, parse the claim request\n claimName = void 0, extension = void 0;\n _context2.prev = 18;\n _lbryUri$parseClaim2 = _lbryUri2.default.parseClaim(claim);\n claimName = _lbryUri$parseClaim2.claimName;\n extension = _lbryUri$parseClaim2.extension;\n _context2.next = 29;\n break;\n\n case 24:\n _context2.prev = 24;\n _context2.t1 = _context2['catch'](18);\n _context2.next = 28;\n return (0, _effects.put)((0, _show.onRequestError)(_context2.t1.message));\n\n case 28:\n return _context2.abrupt('return', _context2.sent);\n\n case 29:\n _context2.next = 31;\n return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, null, null, extension));\n\n case 31:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this, [[1, 8], [18, 24]]);\n}\n\nfunction handleShowPageUri(action) {\n var _action$data, identifier, claim;\n\n return regeneratorRuntime.wrap(function handleShowPageUri$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _action$data = action.data, identifier = _action$data.identifier, claim = _action$data.claim;\n\n if (!identifier) {\n _context3.next = 5;\n break;\n }\n\n _context3.next = 4;\n return (0, _effects.call)(parseAndUpdateIdentifierAndClaim, identifier, claim);\n\n case 4:\n return _context3.abrupt('return', _context3.sent);\n\n case 5:\n _context3.next = 7;\n return (0, _effects.call)(parseAndUpdateClaimOnly, claim);\n\n case 7:\n case 'end':\n return _context3.stop();\n }\n }\n }, _marked3, this);\n};\n\nfunction watchHandleShowPageUri() {\n return regeneratorRuntime.wrap(function watchHandleShowPageUri$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _context4.next = 2;\n return (0, _effects.takeLatest)(actions.HANDLE_SHOW_URI, handleShowPageUri);\n\n case 2:\n case 'end':\n return _context4.stop();\n }\n }\n }, _marked4, this);\n};\n\n/***/ }),\n/* 149 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.newAssetRequest = newAssetRequest;\nexports.watchNewAssetRequest = watchNewAssetRequest;\n\nvar _effects = __webpack_require__(15);\n\nvar _show_action_types = __webpack_require__(12);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(8);\n\nvar _assetApi = __webpack_require__(150);\n\nvar _show2 = __webpack_require__(13);\n\nvar _site = __webpack_require__(46);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(newAssetRequest),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewAssetRequest);\n\nfunction newAssetRequest(action) {\n var _action$data, requestType, requestId, name, modifier, state, host, longId, _ref, assetKey, shortId, _ref2, claimData, _ref3;\n\n return regeneratorRuntime.wrap(function newAssetRequest$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, name = _action$data.name, modifier = _action$data.modifier;\n // put an action to update the request in redux\n\n _context.next = 3;\n return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId));\n\n case 3:\n _context.next = 5;\n return (0, _effects.select)(_show2.selectShowState);\n\n case 5:\n state = _context.sent;\n _context.next = 8;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 8:\n host = _context.sent;\n\n if (!state.requestList[requestId]) {\n _context.next = 11;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 11:\n // get long id && add request to request list\n longId = void 0;\n _context.prev = 12;\n _context.next = 15;\n return (0, _effects.call)(_assetApi.getLongClaimId, host, name, modifier);\n\n case 15:\n _ref = _context.sent;\n longId = _ref.data;\n _context.next = 24;\n break;\n\n case 19:\n _context.prev = 19;\n _context.t0 = _context['catch'](12);\n _context.next = 23;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));\n\n case 23:\n return _context.abrupt('return', _context.sent);\n\n case 24:\n assetKey = 'a#' + name + '#' + longId;\n _context.next = 27;\n return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, assetKey));\n\n case 27:\n if (!state.assetList[assetKey]) {\n _context.next = 29;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 29:\n // get short Id\n shortId = void 0;\n _context.prev = 30;\n _context.next = 33;\n return (0, _effects.call)(_assetApi.getShortId, host, name, longId);\n\n case 33:\n _ref2 = _context.sent;\n shortId = _ref2.data;\n _context.next = 42;\n break;\n\n case 37:\n _context.prev = 37;\n _context.t1 = _context['catch'](30);\n _context.next = 41;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message));\n\n case 41:\n return _context.abrupt('return', _context.sent);\n\n case 42:\n // get asset claim data\n claimData = void 0;\n _context.prev = 43;\n _context.next = 46;\n return (0, _effects.call)(_assetApi.getClaimData, host, name, longId);\n\n case 46:\n _ref3 = _context.sent;\n claimData = _ref3.data;\n _context.next = 55;\n break;\n\n case 50:\n _context.prev = 50;\n _context.t2 = _context['catch'](43);\n _context.next = 54;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t2.message));\n\n case 54:\n return _context.abrupt('return', _context.sent);\n\n case 55:\n _context.next = 57;\n return (0, _effects.put)((0, _show.addAssetToAssetList)(assetKey, null, name, longId, shortId, claimData));\n\n case 57:\n _context.next = 59;\n return (0, _effects.put)((0, _show.onRequestError)(null));\n\n case 59:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[12, 19], [30, 37], [43, 50]]);\n};\n\nfunction watchNewAssetRequest() {\n return regeneratorRuntime.wrap(function watchNewAssetRequest$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return (0, _effects.takeLatest)(actions.ASSET_REQUEST_NEW, newAssetRequest);\n\n case 2:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this);\n};\n\n/***/ }),\n/* 150 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getLongClaimId = getLongClaimId;\nexports.getShortId = getShortId;\nexports.getClaimData = getClaimData;\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getLongClaimId(host, name, modifier) {\n var body = {};\n // create request params\n if (modifier) {\n if (modifier.id) {\n body['claimId'] = modifier.id;\n } else {\n body['channelName'] = modifier.channel.name;\n body['channelClaimId'] = modifier.channel.id;\n }\n }\n body['claimName'] = name;\n var params = {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body)\n };\n // create url\n var url = host + '/api/claim/long-id';\n // return the request promise\n return (0, _request2.default)(url, params);\n};\n\nfunction getShortId(host, name, claimId) {\n var url = host + '/api/claim/short-id/' + claimId + '/' + name;\n return (0, _request2.default)(url);\n};\n\nfunction getClaimData(host, name, claimId) {\n var url = host + '/api/claim/data/' + name + '/' + claimId;\n return (0, _request2.default)(url);\n};\n\n/***/ }),\n/* 151 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.newChannelRequest = newChannelRequest;\nexports.watchNewChannelRequest = watchNewChannelRequest;\nexports.watchUpdateChannelClaims = watchUpdateChannelClaims;\n\nvar _effects = __webpack_require__(15);\n\nvar _show_action_types = __webpack_require__(12);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(8);\n\nvar _channelApi = __webpack_require__(152);\n\nvar _show2 = __webpack_require__(13);\n\nvar _site = __webpack_require__(46);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(newChannelRequest),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewChannelRequest),\n _marked3 = /*#__PURE__*/regeneratorRuntime.mark(getNewClaimsAndUpdateChannel),\n _marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchUpdateChannelClaims);\n\nfunction newChannelRequest(action) {\n var _action$data, requestType, requestId, channelName, channelId, state, host, longId, shortId, _ref, _ref$data, channelKey, claimsData, _ref2;\n\n return regeneratorRuntime.wrap(function newChannelRequest$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, channelName = _action$data.channelName, channelId = _action$data.channelId;\n // put an action to update the request in redux\n\n _context.next = 3;\n return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId));\n\n case 3:\n _context.next = 5;\n return (0, _effects.select)(_show2.selectShowState);\n\n case 5:\n state = _context.sent;\n _context.next = 8;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 8:\n host = _context.sent;\n\n if (!state.requestList[requestId]) {\n _context.next = 11;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 11:\n // get channel long id\n longId = void 0, shortId = void 0;\n _context.prev = 12;\n _context.next = 15;\n return (0, _effects.call)(_channelApi.getChannelData, host, channelName, channelId);\n\n case 15:\n _ref = _context.sent;\n _ref$data = _ref.data;\n longId = _ref$data.longChannelClaimId;\n shortId = _ref$data.shortChannelClaimId;\n _context.next = 26;\n break;\n\n case 21:\n _context.prev = 21;\n _context.t0 = _context['catch'](12);\n _context.next = 25;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));\n\n case 25:\n return _context.abrupt('return', _context.sent);\n\n case 26:\n // store the request in the channel requests list\n channelKey = 'c#' + channelName + '#' + longId;\n _context.next = 29;\n return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, channelKey));\n\n case 29:\n if (!state.channelList[channelKey]) {\n _context.next = 31;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 31:\n // get channel claims data\n claimsData = void 0;\n _context.prev = 32;\n _context.next = 35;\n return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, channelName, 1);\n\n case 35:\n _ref2 = _context.sent;\n claimsData = _ref2.data;\n _context.next = 44;\n break;\n\n case 39:\n _context.prev = 39;\n _context.t1 = _context['catch'](32);\n _context.next = 43;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message));\n\n case 43:\n return _context.abrupt('return', _context.sent);\n\n case 44:\n _context.next = 46;\n return (0, _effects.put)((0, _show.addNewChannelToChannelList)(channelKey, channelName, shortId, longId, claimsData));\n\n case 46:\n _context.next = 48;\n return (0, _effects.put)((0, _show.onRequestError)(null));\n\n case 48:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[12, 21], [32, 39]]);\n}\n\nfunction watchNewChannelRequest() {\n return regeneratorRuntime.wrap(function watchNewChannelRequest$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return (0, _effects.takeLatest)(actions.CHANNEL_REQUEST_NEW, newChannelRequest);\n\n case 2:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this);\n};\n\nfunction getNewClaimsAndUpdateChannel(action) {\n var _action$data2, channelKey, name, longId, page, host, claimsData, _ref3;\n\n return regeneratorRuntime.wrap(function getNewClaimsAndUpdateChannel$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _action$data2 = action.data, channelKey = _action$data2.channelKey, name = _action$data2.name, longId = _action$data2.longId, page = _action$data2.page;\n _context3.next = 3;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 3:\n host = _context3.sent;\n claimsData = void 0;\n _context3.prev = 5;\n _context3.next = 8;\n return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, name, page);\n\n case 8:\n _ref3 = _context3.sent;\n claimsData = _ref3.data;\n _context3.next = 17;\n break;\n\n case 12:\n _context3.prev = 12;\n _context3.t0 = _context3['catch'](5);\n _context3.next = 16;\n return (0, _effects.put)((0, _show.onRequestError)(_context3.t0.message));\n\n case 16:\n return _context3.abrupt('return', _context3.sent);\n\n case 17:\n _context3.next = 19;\n return (0, _effects.put)((0, _show.updateChannelClaims)(channelKey, claimsData));\n\n case 19:\n case 'end':\n return _context3.stop();\n }\n }\n }, _marked3, this, [[5, 12]]);\n}\n\nfunction watchUpdateChannelClaims() {\n return regeneratorRuntime.wrap(function watchUpdateChannelClaims$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _context4.next = 2;\n return (0, _effects.takeLatest)(actions.CHANNEL_CLAIMS_UPDATE_ASYNC, getNewClaimsAndUpdateChannel);\n\n case 2:\n case 'end':\n return _context4.stop();\n }\n }\n }, _marked4, this);\n}\n\n/***/ }),\n/* 152 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getChannelData = getChannelData;\nexports.getChannelClaims = getChannelClaims;\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getChannelData(host, id, name) {\n if (!id) id = 'none';\n var url = host + '/api/channel/data/' + name + '/' + id;\n return (0, _request2.default)(url);\n};\n\nfunction getChannelClaims(host, longId, name, page) {\n if (!page) page = 1;\n var url = host + '/api/channel/claims/' + name + '/' + longId + '/' + page;\n return (0, _request2.default)(url);\n};\n\n/***/ }),\n/* 153 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nmodule.exports = {\n REGEXP_INVALID_CLAIM: /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS: /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR: '@',\n parseIdentifier: function parseIdentifier(identifier) {\n var componentsRegex = new RegExp('([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec = componentsRegex // eslint-disable-line no-unused-vars\n .exec(identifier).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec2 = _slicedToArray(_componentsRegex$exec, 4),\n proto = _componentsRegex$exec2[0],\n value = _componentsRegex$exec2[1],\n modifierSeperator = _componentsRegex$exec2[2],\n modifier = _componentsRegex$exec2[3];\n\n // Validate and process name\n\n\n if (!value) {\n throw new Error('Check your URL. No channel name provided before \"' + modifierSeperator + '\"');\n }\n var isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n var channelName = isChannel ? value : null;\n var claimId = void 0;\n if (isChannel) {\n if (!channelName) {\n throw new Error('Check your URL. No channel name after \"@\".');\n }\n var nameBadChars = channelName.match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error('Check your URL. Invalid characters in channel name: \"' + nameBadChars.join(', ') + '\".');\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n var channelClaimId = void 0;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error('Check your URL. No modifier provided after separator \"' + modifierSeperator + '\"');\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error('Check your URL. The \"' + modifierSeperator + '\" modifier is not currently supported');\n }\n }\n return {\n isChannel: isChannel,\n channelName: channelName,\n channelClaimId: channelClaimId || null,\n claimId: claimId || null\n };\n },\n parseClaim: function parseClaim(name) {\n var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first extension)\n '([:$#.]?)([^/]*)' // extension separator, extension (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec3 = componentsRegex // eslint-disable-line no-unused-vars\n .exec(name).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec4 = _slicedToArray(_componentsRegex$exec3, 4),\n proto = _componentsRegex$exec4[0],\n claimName = _componentsRegex$exec4[1],\n extensionSeperator = _componentsRegex$exec4[2],\n extension = _componentsRegex$exec4[3];\n\n // Validate and process name\n\n\n if (!claimName) {\n throw new Error('Check your URL. No claim name provided before \".\"');\n }\n var nameBadChars = claimName.match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error('Check your URL. Invalid characters in claim name: \"' + nameBadChars.join(', ') + '\".');\n }\n // Validate and process extension\n if (extensionSeperator) {\n if (!extension) {\n throw new Error('Check your URL. No file extension provided after separator \"' + extensionSeperator + '\".');\n }\n if (extensionSeperator !== '.') {\n throw new Error('Check your URL. The \"' + extensionSeperator + '\" separator is not supported in the claim name.');\n }\n }\n return {\n claimName: claimName,\n extension: extension || null\n };\n }\n};\n\n/***/ }),\n/* 154 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar handlePageRender = __webpack_require__(31);\n\nmodule.exports = function (app) {\n // a catch-all route if someone visits a page that does not exist\n app.use('*', function (req, res) {\n // send response\n handlePageRender(req, res);\n });\n};\n\n/***/ }),\n/* 155 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _require = __webpack_require__(156),\n logLevel = _require.logLevel;\n\nmodule.exports = function (winston) {\n // configure\n winston.configure({\n transports: [new winston.transports.Console({\n level: logLevel,\n timestamp: false,\n colorize: true,\n prettyPrint: true,\n handleExceptions: true,\n humanReadableUnhandledException: true\n })]\n });\n // test all the log levels\n winston.error('Level 0');\n winston.warn('Level 1');\n winston.info('Level 2');\n winston.verbose('Level 3');\n winston.debug('Level 4');\n winston.silly('Level 5');\n};\n\n/***/ }),\n/* 156 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar loggerConfig = {\n logLevel: 'debug' // options: silly, debug, verbose, info\n};\n\nmodule.exports = loggerConfig;\n\n/***/ }),\n/* 157 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar winstonSlackWebHook = __webpack_require__(158).SlackWebHook;\nvar slackConfig = __webpack_require__(24);\n\nmodule.exports = function (winston) {\n var slackWebHook = slackConfig.slackWebHook,\n slackErrorChannel = slackConfig.slackErrorChannel,\n slackInfoChannel = slackConfig.slackInfoChannel;\n\n if (slackWebHook) {\n // add a transport for errors to slack\n if (slackErrorChannel) {\n winston.add(winstonSlackWebHook, {\n name: 'slack-errors-transport',\n level: 'warn',\n webhookUrl: slackWebHook,\n channel: slackErrorChannel,\n username: 'spee.ch',\n iconEmoji: ':face_with_head_bandage:'\n });\n };\n if (slackInfoChannel) {\n winston.add(winstonSlackWebHook, {\n name: 'slack-info-transport',\n level: 'info',\n webhookUrl: slackWebHook,\n channel: slackInfoChannel,\n username: 'spee.ch',\n iconEmoji: ':nerd_face:'\n });\n };\n // send test message\n winston.error('Slack \"error\" logging is online.');\n winston.info('Slack \"info\" logging is online.');\n } else {\n winston.warn('Slack logging is not enabled because no slackWebHook config var provided.');\n }\n};\n\n/***/ }),\n/* 158 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"winston-slack-webhook\");\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// index.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 47);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap fdb26764a439838e892e","module.exports = require(\"react\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react\"\n// module id = 0\n// module chunks = 0","module.exports = require(\"react-redux\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-redux\"\n// module id = 1\n// module chunks = 0","module.exports = require(\"winston\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"winston\"\n// module id = 2\n// module chunks = 0","module.exports = require(\"react-router-dom\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-router-dom\"\n// module id = 3\n// module chunks = 0","import * as actions from 'constants/publish_action_types';\n\n// export action creators\nexport function selectFile (file) {\n return {\n type: actions.FILE_SELECTED,\n data: file,\n };\n};\n\nexport function clearFile () {\n return {\n type: actions.FILE_CLEAR,\n };\n};\n\nexport function updateMetadata (name, value) {\n return {\n type: actions.METADATA_UPDATE,\n data: {\n name,\n value,\n },\n };\n};\n\nexport function updateClaim (value) {\n return {\n type: actions.CLAIM_UPDATE,\n data: value,\n };\n};\n\nexport function setPublishInChannel (channel) {\n return {\n type: actions.SET_PUBLISH_IN_CHANNEL,\n channel,\n };\n};\n\nexport function updatePublishStatus (status, message) {\n return {\n type: actions.PUBLISH_STATUS_UPDATE,\n data: {\n status,\n message,\n },\n };\n};\n\nexport function updateError (name, value) {\n return {\n type: actions.ERROR_UPDATE,\n data: {\n name,\n value,\n },\n };\n};\n\nexport function updateSelectedChannel (channelName) {\n return {\n type: actions.SELECTED_CHANNEL_UPDATE,\n data: channelName,\n };\n};\n\nexport function toggleMetadataInputs (showMetadataInputs) {\n return {\n type: actions.TOGGLE_METADATA_INPUTS,\n data: showMetadataInputs,\n };\n};\n\nexport function onNewThumbnail (file) {\n return {\n type: actions.THUMBNAIL_NEW,\n data: file,\n };\n};\n\nexport function startPublish (history) {\n return {\n type: actions.PUBLISH_START,\n data: { history },\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/actions/publish.js","function SiteConfig () {\n this.analytics = {\n googleId: 'default',\n };\n this.assetDefaults = {\n description: 'An asset published on Spee.ch',\n thumbnail : 'https://spee.ch/assets/img/video_thumb_default.png',\n title : 'Spee.ch',\n };\n this.auth = {\n sessionKey: 'default',\n };\n this.details = {\n description: 'Open-source, decentralized image and video sharing.',\n host : 'default',\n port : 3000,\n title : 'Spee.ch',\n twitter : '@spee_ch',\n };\n this.publishing = {\n additionalClaimAddresses: [],\n disabled : false,\n disabledMessage : 'Please check back soon.',\n primaryClaimAddress : 'default',\n thumbnailChannel : 'default',\n thumbnailChannelId : 'default',\n uploadDirectory : '/home/lbry/Uploads',\n };\n this.configure = (config) => {\n if (!config) {\n return console.log('No site config received.');\n }\n const { analytics, assetDefaults, auth, details, publishing } = config;\n this.analytics = analytics;\n this.assetDefaults = assetDefaults;\n this.auth = auth;\n this.details = details;\n this.publishing = publishing;\n };\n};\n\nmodule.exports = new SiteConfig();\n\n\n\n// WEBPACK FOOTER //\n// ./config/siteConfig.js","const Sequelize = require('sequelize');\nconst logger = require('winston');\n\nconsole.log('exporting sequelize models');\nconst { database, username, password } = require('../../config/mysqlConfig');\nconst db = {};\n// set sequelize options\nconst sequelize = new Sequelize(database, username, password, {\n host : 'localhost',\n dialect : 'mysql',\n dialectOptions: {decimalNumbers: true}, // fix to ensure DECIMAL will not be stored as a string\n logging : false,\n pool : {\n max : 5,\n min : 0,\n idle : 10000,\n acquire: 10000,\n },\n});\n\n// establish mysql connection\nsequelize\n .authenticate()\n .then(() => {\n logger.info('Sequelize has established mysql connection successfully.');\n })\n .catch(err => {\n logger.error('Sequelize was unable to connect to the database:', err);\n });\n\n// manually add each model to the db object\nconst Certificate = require('./certificate.js');\nconst Channel = require('./channel.js');\nconst Claim = require('./claim.js');\nconst File = require('./file.js');\nconst Request = require('./request.js');\nconst User = require('./user.js');\ndb['Certificate'] = sequelize.import('Certificate', Certificate);\ndb['Channel'] = sequelize.import('Channel', Channel);\ndb['Claim'] = sequelize.import('Claim', Claim);\ndb['File'] = sequelize.import('File', File);\ndb['Request'] = sequelize.import('Request', Request);\ndb['User'] = sequelize.import('User', User);\n\n// run model.association for each model in the db object that has an association\nObject.keys(db).forEach(modelName => {\n if (db[modelName].associate) {\n logger.info('Associating model:', modelName);\n db[modelName].associate(db);\n }\n});\n\ndb.sequelize = sequelize;\ndb.Sequelize = Sequelize;\n\n// add an 'upsert' method to the db object\ndb.upsert = (Model, values, condition, tableName) => {\n return Model\n .findOne({\n where: condition,\n })\n .then(obj => {\n if (obj) { // update\n logger.debug(`updating record in db.${tableName}`);\n return obj.update(values);\n } else { // insert\n logger.debug(`creating record in db.${tableName}`);\n return Model.create(values);\n }\n })\n .catch(function (error) {\n logger.error(`${tableName}.upsert error`, error);\n throw error;\n });\n};\n\nmodule.exports = db;\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/index.js","import { connect } from 'react-redux';\nimport { updateLoggedInChannel } from 'actions/channel';\nimport {updateSelectedChannel} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, site }) => {\n return {\n channelName : channel.loggedInChannel.name,\n channelShortId: channel.loggedInChannel.shortId,\n channelLongId : channel.loggedInChannel.longId,\n siteDescription: site.description,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onChannelLogin: (name, shortId, longId) => {\n dispatch(updateLoggedInChannel(name, shortId, longId));\n dispatch(updateSelectedChannel(name));\n },\n onChannelLogout: () => {\n dispatch(updateLoggedInChannel(null, null, null));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/NavBar/index.js","import * as actions from 'constants/show_action_types';\n\nimport { CHANNEL, ASSET_LITE, ASSET_DETAILS } from 'constants/show_request_types';\n\n// basic request parsing\nexport function onHandleShowPageUri (params) {\n return {\n type: actions.HANDLE_SHOW_URI,\n data: params,\n };\n};\n\nexport function onRequestError (error) {\n return {\n type: actions.REQUEST_ERROR,\n data: error,\n };\n};\n\nexport function onNewChannelRequest (channelName, channelId) {\n const requestType = CHANNEL;\n const requestId = `cr#${channelName}#${channelId}`;\n return {\n type: actions.CHANNEL_REQUEST_NEW,\n data: { requestType, requestId, channelName, channelId },\n };\n};\n\nexport function onNewAssetRequest (name, id, channelName, channelId, extension) {\n const requestType = extension ? ASSET_LITE : ASSET_DETAILS;\n const requestId = `ar#${name}#${id}#${channelName}#${channelId}`;\n return {\n type: actions.ASSET_REQUEST_NEW,\n data: {\n requestType,\n requestId,\n name,\n modifier: {\n id,\n channel: {\n name: channelName,\n id : channelId,\n },\n },\n },\n };\n};\n\nexport function onRequestUpdate (requestType, requestId) {\n return {\n type: actions.REQUEST_UPDATE,\n data: {\n requestType,\n requestId,\n },\n };\n};\n\nexport function addRequestToRequestList (id, error, key) {\n return {\n type: actions.REQUEST_LIST_ADD,\n data: { id, error, key },\n };\n};\n\n// asset actions\n\nexport function addAssetToAssetList (id, error, name, claimId, shortId, claimData) {\n return {\n type: actions.ASSET_ADD,\n data: { id, error, name, claimId, shortId, claimData },\n };\n}\n\n// channel actions\n\nexport function addNewChannelToChannelList (id, name, shortId, longId, claimsData) {\n return {\n type: actions.CHANNEL_ADD,\n data: { id, name, shortId, longId, claimsData },\n };\n};\n\nexport function onUpdateChannelClaims (channelKey, name, longId, page) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_ASYNC,\n data: {channelKey, name, longId, page},\n };\n};\n\nexport function updateChannelClaims (channelListId, claimsData) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_SUCCESS,\n data: {channelListId, claimsData},\n };\n};\n\n// display a file\n\nexport function fileRequested (name, claimId) {\n return {\n type: actions.FILE_REQUESTED,\n data: { name, claimId },\n };\n};\n\nexport function updateFileAvailability (status) {\n return {\n type: actions.FILE_AVAILABILITY_UPDATE,\n data: status,\n };\n};\n\nexport function updateDisplayAssetError (error) {\n return {\n type: actions.DISPLAY_ASSET_ERROR,\n data: error,\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/actions/show.js","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ site }) => {\n const { defaultDescription, defaultThumbnail, description: siteDescription, host: siteHost, title: siteTitle, twitter: siteTwitter } = site;\n return {\n defaultDescription,\n defaultThumbnail,\n siteDescription,\n siteHost,\n siteTitle,\n siteTwitter,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/SEO/index.js","module.exports = require(\"prop-types\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"prop-types\"\n// module id = 10\n// module chunks = 0","import 'cross-fetch/polyfill';\n\n/**\n * Parses the JSON returned by a network request\n *\n * @param {object} response A response from a network request\n *\n * @return {object} The parsed JSON from the request\n */\nfunction parseJSON (response) {\n if (response.status === 204 || response.status === 205) {\n return null;\n }\n return response.json();\n}\n\n/**\n * Parses the status returned by a network request\n *\n * @param {object} response A response from a network request\n * @param {object} response The parsed JSON from the network request\n *\n * @return {object | undefined} Returns object with status and statusText, or undefined\n */\nfunction checkStatus (response, jsonResponse) {\n if (response.status >= 200 && response.status < 300) {\n return jsonResponse;\n }\n const error = new Error(jsonResponse.message);\n error.response = response;\n throw error;\n}\n\n/**\n * Requests a URL, returning a promise\n *\n * @param {string} url The URL we want to request\n * @param {object} [options] The options we want to pass to \"fetch\"\n *\n * @return {object} The response data\n */\n\nexport default function request (url, options) {\n return fetch(url, options)\n .then(response => {\n return Promise.all([response, parseJSON(response)]);\n })\n .then(([response, jsonResponse]) => {\n return checkStatus(response, jsonResponse);\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/request.js","// request actions\nexport const HANDLE_SHOW_URI = 'HANDLE_SHOW_URI';\nexport const REQUEST_ERROR = 'REQUEST_ERROR';\nexport const REQUEST_UPDATE = 'REQUEST_UPDATE';\nexport const ASSET_REQUEST_NEW = 'ASSET_REQUEST_NEW';\nexport const CHANNEL_REQUEST_NEW = 'CHANNEL_REQUEST_NEW';\nexport const REQUEST_LIST_ADD = 'REQUEST_LIST_ADD';\n\n// asset actions\nexport const ASSET_ADD = `ASSET_ADD`;\n\n// channel actions\nexport const CHANNEL_ADD = 'CHANNEL_ADD';\n\nexport const CHANNEL_CLAIMS_UPDATE_ASYNC = 'CHANNEL_CLAIMS_UPDATE_ASYNC';\nexport const CHANNEL_CLAIMS_UPDATE_SUCCESS = 'CHANNEL_CLAIMS_UPDATE_SUCCESS';\n\n// asset/file display actions\nexport const FILE_REQUESTED = 'FILE_REQUESTED';\nexport const FILE_AVAILABILITY_UPDATE = 'FILE_AVAILABILITY_UPDATE';\nexport const DISPLAY_ASSET_ERROR = 'DISPLAY_ASSET_ERROR';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/show_action_types.js","export const selectAsset = (show) => {\n const request = show.requestList[show.request.id];\n const assetKey = request.key;\n return show.assetList[assetKey];\n};\n\nexport const selectShowState = (state) => {\n return state.show;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/selectors/show.js","module.exports = require(\"react-helmet\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-helmet\"\n// module id = 14\n// module chunks = 0","module.exports = require(\"redux-saga/effects\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"redux-saga/effects\"\n// module id = 15\n// module chunks = 0","const axios = require('axios');\nconst logger = require('winston');\nconst { api: { apiHost, apiPort } } = require('../../config/lbryConfig.js');\nconst lbryApiUri = 'http://' + apiHost + ':' + apiPort;\nconst { chooseGaLbrynetPublishLabel, sendGATimingEvent } = require('./googleAnalytics.js');\n\nconst handleLbrynetResponse = ({ data }, resolve, reject) => {\n logger.debug('lbry api data:', data);\n if (data.result) {\n // check for an error\n if (data.result.error) {\n logger.debug('Lbrynet api error:', data.result.error);\n reject(new Error(data.result.error));\n return;\n };\n resolve(data.result);\n return;\n }\n // fallback in case it just timed out\n reject(JSON.stringify(data));\n};\n\nmodule.exports = {\n publishClaim (publishParams) {\n logger.debug(`lbryApi >> Publishing claim to \"${publishParams.name}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'publish',\n params: publishParams,\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'publish', chooseGaLbrynetPublishLabel(publishParams), gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getClaim (uri) {\n logger.debug(`lbryApi >> Getting Claim for \"${uri}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'get',\n params: { uri, timeout: 20 },\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'getClaim', 'GET', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getClaimList (claimName) {\n logger.debug(`lbryApi >> Getting claim_list for \"${claimName}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'claim_list',\n params: { name: claimName },\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'getClaimList', 'CLAIM_LIST', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n resolveUri (uri) {\n logger.debug(`lbryApi >> Resolving URI for \"${uri}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'resolve',\n params: { uri },\n })\n .then(({ data }) => {\n sendGATimingEvent('lbrynet', 'resolveUri', 'RESOLVE', gaStartTime, Date.now());\n if (data.result[uri].error) { // check for errors\n reject(data.result[uri].error);\n } else { // if no errors, resolve\n resolve(data.result[uri]);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getDownloadDirectory () {\n logger.debug('lbryApi >> Retrieving the download directory path from lbry daemon...');\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'settings_get',\n })\n .then(({ data }) => {\n sendGATimingEvent('lbrynet', 'getDownloadDirectory', 'SETTINGS_GET', gaStartTime, Date.now());\n if (data.result) {\n resolve(data.result.download_directory);\n } else {\n return new Error('Successfully connected to lbry daemon, but unable to retrieve the download directory.');\n }\n })\n .catch(error => {\n logger.error('Lbrynet Error:', error);\n resolve('/home/lbry/Downloads/');\n });\n });\n },\n createChannel (name) {\n logger.debug(`lbryApi >> Creating channel for ${name}...`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'channel_new',\n params: {\n channel_name: name,\n amount : 0.1,\n },\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'createChannel', 'CHANNEL_NEW', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/lbryApi.js","const logger = require('winston');\nconst ua = require('universal-analytics');\nconst { analytics : { googleId }, details: { title } } = require('../../config/siteConfig.js');\n\nfunction createServeEventParams (headers, ip, originalUrl) {\n return {\n eventCategory : 'client requests',\n eventAction : 'serve request',\n eventLabel : originalUrl,\n ipOverride : ip,\n userAgentOverride: headers['user-agent'],\n };\n};\n\nfunction createPublishTimingEventParams (category, variable, label, startTime, endTime) {\n const duration = endTime - startTime;\n return {\n userTimingCategory : category,\n userTimingVariableName: variable,\n userTimingTime : duration,\n userTimingLabel : label,\n };\n};\n\nfunction sendGoogleAnalyticsEvent (ip, params) {\n const visitorId = ip.replace(/\\./g, '-');\n const visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.event(params, (err) => {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n });\n};\n\nfunction sendGoogleAnalyticsTiming (visitorId, params) {\n const visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.timing(params, (err) => {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n logger.debug(`Timing event successfully sent to google analytics`);\n });\n};\n\nmodule.exports = {\n sendGAServeEvent (headers, ip, originalUrl) {\n const params = createServeEventParams(headers, ip, originalUrl);\n sendGoogleAnalyticsEvent(ip, params);\n },\n sendGATimingEvent (category, variable, label, startTime, endTime) {\n const params = createPublishTimingEventParams(category, variable, label, startTime, endTime);\n sendGoogleAnalyticsTiming(title, params);\n },\n chooseGaLbrynetPublishLabel ({ channel_name: channelName, channel_id: channelId }) {\n return (channelName || channelId ? 'PUBLISH_IN_CHANNEL_CLAIM' : 'PUBLISH_ANONYMOUS_CLAIM');\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/googleAnalytics.js","module.exports = require(\"redux\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"redux\"\n// module id = 18\n// module chunks = 0","import * as actions from 'constants/channel_action_types';\n\n// export action creators\n\nexport function updateLoggedInChannel (name, shortId, longId) {\n return {\n type: actions.CHANNEL_UPDATE,\n data: {\n name,\n shortId,\n longId,\n },\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/actions/channel.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ActiveStatusBar from 'components/ActiveStatusBar';\nimport InactiveStatusBar from 'components/InactiveStatusBar';\n\nclass ProgressBar extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n bars : [],\n index : 0,\n incrementer: 1,\n };\n this.createBars = this.createBars.bind(this);\n this.startProgressBar = this.startProgressBar.bind(this);\n this.updateProgressBar = this.updateProgressBar.bind(this);\n this.stopProgressBar = this.stopProgressBar.bind(this);\n }\n componentDidMount () {\n this.createBars();\n this.startProgressBar();\n }\n componentWillUnmount () {\n this.stopProgressBar();\n }\n createBars () {\n const bars = [];\n for (let i = 0; i <= this.props.size; i++) {\n bars.push({isActive: false});\n }\n this.setState({ bars });\n }\n startProgressBar () {\n this.updateInterval = setInterval(this.updateProgressBar.bind(this), 300);\n };\n updateProgressBar () {\n let index = this.state.index;\n let incrementer = this.state.incrementer;\n let bars = this.state.bars;\n // flip incrementer if necessary, to stay in bounds\n if ((index < 0) || (index > this.props.size)) {\n incrementer = incrementer * -1;\n index += incrementer;\n }\n // update the indexed bar\n if (incrementer > 0) {\n bars[index].isActive = true;\n } else {\n bars[index].isActive = false;\n };\n // increment index\n index += incrementer;\n // update state\n this.setState({\n bars,\n incrementer,\n index,\n });\n };\n stopProgressBar () {\n clearInterval(this.updateInterval);\n };\n render () {\n return (\n
\n {this.state.bars.map((bar, index) => bar.isActive ? : )}\n
\n );\n }\n};\n\nProgressBar.propTypes = {\n size: PropTypes.number.isRequired,\n};\n\nexport default ProgressBar;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/ProgressBar/index.jsx","import React from 'react';\nimport PropTypes from 'prop-types';\nimport NavBar from 'containers/NavBar';\n\nclass ErrorPage extends React.Component {\n render () {\n const { error } = this.props;\n return (\n
\n \n
\n

{error}

\n
\n
\n );\n }\n};\n\nErrorPage.propTypes = {\n error: PropTypes.string.isRequired,\n};\n\nexport default ErrorPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/ErrorPage/index.jsx","module.exports = require(\"passport\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"passport\"\n// module id = 22\n// module chunks = 0","function MysqlConfig () {\n this.database = 'default';\n this.username = 'default';\n this.password = 'default';\n this.configure = (config) => {\n if (!config) {\n return console.log('No MySQL config received.');\n }\n const {database, username, password} = config;\n this.database = database;\n this.username = username;\n this.password = password;\n };\n};\n\nmodule.exports = new MysqlConfig();\n\n\n\n// WEBPACK FOOTER //\n// ./config/mysqlConfig.js","function SlackConfig () {\n this.slackWebHook = 'default';\n this.slackErrorChannel = 'default';\n this.slackInfoChannel = 'default';\n this.configure = (config) => {\n if (!config) {\n return console.log('No slack config received.');\n }\n const {slackWebHook, slackErrorChannel, slackInfoChannel} = config;\n this.slackWebHook = slackWebHook;\n this.slackErrorChannel = slackErrorChannel;\n this.slackInfoChannel = slackInfoChannel;\n };\n};\n\nmodule.exports = new SlackConfig();\n\n\n\n// WEBPACK FOOTER //\n// ./config/slackConfig.js","module.exports = require(\"passport-local\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"passport-local\"\n// module id = 25\n// module chunks = 0","module.exports = require(\"sequelize\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"sequelize\"\n// module id = 26\n// module chunks = 0","module.exports = {\n returnShortId: function (claimsArray, longId) {\n let claimIndex;\n let shortId = longId.substring(0, 1); // default short id is the first letter\n let shortIdLength = 0;\n // find the index of this claim id\n claimIndex = claimsArray.findIndex(element => {\n return element.claimId === longId;\n });\n if (claimIndex < 0) {\n throw new Error('claim id not found in claims list');\n }\n // get an array of all claims with lower height\n let possibleMatches = claimsArray.slice(0, claimIndex);\n // remove certificates with the same prefixes until none are left.\n while (possibleMatches.length > 0) {\n shortIdLength += 1;\n shortId = longId.substring(0, shortIdLength);\n possibleMatches = possibleMatches.filter(element => {\n return (element.claimId && (element.claimId.substring(0, shortIdLength) === shortId));\n });\n }\n return shortId;\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/sequelizeHelpers.js","const logger = require('winston');\nconst fs = require('fs');\n\nconst { details, publishing } = require('../../config/siteConfig.js');\n\nmodule.exports = {\n parsePublishApiRequestBody ({name, nsfw, license, title, description, thumbnail}) {\n // validate name\n if (!name) {\n throw new Error('no name field found in request');\n }\n const invalidNameCharacters = /[^A-Za-z0-9,-]/.exec(name);\n if (invalidNameCharacters) {\n throw new Error('The claim name you provided is not allowed. Only the following characters are allowed: A-Z, a-z, 0-9, and \"-\"');\n }\n // optional parameters\n nsfw = (nsfw === 'true');\n license = license || null;\n title = title || null;\n description = description || null;\n thumbnail = thumbnail || null;\n // return results\n return {\n name,\n nsfw,\n license,\n title,\n description,\n thumbnail,\n };\n },\n parsePublishApiRequestFiles ({file, thumbnail}) {\n // make sure a file was provided\n if (!file) {\n throw new Error('no file with key of [file] found in request');\n }\n if (!file.path) {\n throw new Error('no file path found');\n }\n if (!file.type) {\n throw new Error('no file type found');\n }\n if (!file.size) {\n throw new Error('no file type found');\n }\n // validate the file name\n if (/'/.test(file.name)) {\n throw new Error('apostrophes are not allowed in the file name');\n }\n // validate the file\n module.exports.validateFileTypeAndSize(file);\n // return results\n return {\n fileName : file.name,\n filePath : file.path,\n fileType : file.type,\n thumbnailFileName: (thumbnail ? thumbnail.name : null),\n thumbnailFilePath: (thumbnail ? thumbnail.path : null),\n thumbnailFileType: (thumbnail ? thumbnail.type : null),\n };\n },\n validateFileTypeAndSize (file) {\n // check file type and size\n switch (file.type) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n if (file.size > 10000000) {\n logger.debug('publish > file validation > .jpeg/.jpg/.png was too big');\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .gif was too big');\n throw new Error('Sorry, .gifs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .mp4 was too big');\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n logger.debug('publish > file validation > unrecognized file type');\n throw new Error('The ' + file.type + ' content type is not supported. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n return file;\n },\n createBasicPublishParams (filePath, name, title, description, license, nsfw, thumbnail) {\n logger.debug(`Creating Publish Parameters`);\n // provide defaults for title\n if (title === null || title.trim() === '') {\n title = name;\n }\n // provide default for description\n if (description === null || description.trim() === '') {\n description = '';\n }\n // provide default for license\n if (license === null || license.trim() === '') {\n license = ' '; // default to empty string\n }\n // create the publish params\n const publishParams = {\n name,\n file_path: filePath,\n bid : 0.01,\n metadata : {\n description,\n title,\n author : details.title,\n language: 'en',\n license,\n nsfw,\n },\n claim_address: publishing.primaryClaimAddress,\n };\n // add thumbnail to channel if video\n if (thumbnail) {\n publishParams['metadata']['thumbnail'] = thumbnail;\n }\n return publishParams;\n },\n createThumbnailPublishParams (thumbnailFilePath, claimName, license, nsfw) {\n if (!thumbnailFilePath) {\n return;\n }\n logger.debug(`Creating Thumbnail Publish Parameters`);\n // create the publish params\n return {\n name : `${claimName}-thumb`,\n file_path: thumbnailFilePath,\n bid : 0.01,\n metadata : {\n title : `${claimName} thumbnail`,\n description: `a thumbnail for ${claimName}`,\n author : details.title,\n language : 'en',\n license,\n nsfw,\n },\n claim_address: publishing.primaryClaimAddress,\n channel_name : publishing.thumbnailChannel,\n channel_id : publishing.thumbnailChannelId,\n };\n },\n deleteTemporaryFile (filePath) {\n fs.unlink(filePath, err => {\n if (err) {\n logger.error(`error deleting temporary file ${filePath}`);\n throw err;\n }\n logger.debug(`successfully deleted ${filePath}`);\n });\n },\n addGetResultsToFileData (fileInfo, getResult) {\n fileInfo.fileName = getResult.file_name;\n fileInfo.filePath = getResult.download_path;\n return fileInfo;\n },\n createFileData ({ name, claimId, outpoint, height, address, nsfw, contentType }) {\n return {\n name,\n claimId,\n outpoint,\n height,\n address,\n fileName: '',\n filePath: '',\n fileType: contentType,\n nsfw,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/publishHelpers.js","const logger = require('winston');\n\nmodule.exports = {\n handleErrorResponse: function (originalUrl, ip, error, res) {\n logger.error(`Error on ${originalUrl}`, module.exports.useObjectPropertiesIfNoKeys(error));\n const [status, message] = module.exports.returnErrorMessageAndStatus(error);\n res\n .status(status)\n .json(module.exports.createErrorResponsePayload(status, message));\n },\n returnErrorMessageAndStatus: function (error) {\n let status, message;\n // check for daemon being turned off\n if (error.code === 'ECONNREFUSED') {\n status = 503;\n message = 'Connection refused. The daemon may not be running.';\n // fallback for everything else\n } else {\n status = 400;\n if (error.message) {\n message = error.message;\n } else {\n message = error;\n };\n };\n return [status, message];\n },\n useObjectPropertiesIfNoKeys: function (err) {\n if (Object.keys(err).length === 0) {\n let newErrorObject = {};\n Object.getOwnPropertyNames(err).forEach((key) => {\n newErrorObject[key] = err[key];\n });\n return newErrorObject;\n }\n return err;\n },\n createErrorResponsePayload (status, message) {\n return {\n status,\n success: false,\n message,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/errorHandlers.js","const db = require('../models/index');\nconst logger = require('winston');\nconst { returnPaginatedChannelClaims } = require('../helpers/channelPagination.js');\n\nconst NO_CHANNEL = 'NO_CHANNEL';\nconst NO_CLAIM = 'NO_CLAIM';\nconst NO_FILE = 'NO_FILE';\n\nmodule.exports = {\n getClaimId (channelName, channelClaimId, name, claimId) {\n if (channelName) {\n return module.exports.getClaimIdByChannel(channelName, channelClaimId, name);\n } else {\n return module.exports.getClaimIdByClaim(name, claimId);\n }\n },\n getClaimIdByClaim (claimName, claimId) {\n logger.debug(`getClaimIdByClaim(${claimName}, ${claimId})`);\n return new Promise((resolve, reject) => {\n db.Claim.getLongClaimId(claimName, claimId)\n .then(longClaimId => {\n if (!longClaimId) {\n resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getClaimIdByChannel (channelName, channelClaimId, claimName) {\n logger.debug(`getClaimIdByChannel(${channelName}, ${channelClaimId}, ${claimName})`);\n return new Promise((resolve, reject) => {\n db.Certificate.getLongChannelId(channelName, channelClaimId) // 1. get the long channel id\n .then(longChannelId => {\n if (!longChannelId) {\n return [null, null];\n }\n return Promise.all([longChannelId, db.Claim.getClaimIdByLongChannelId(longChannelId, claimName)]); // 2. get the long claim id\n })\n .then(([longChannelId, longClaimId]) => {\n if (!longChannelId) {\n return resolve(NO_CHANNEL);\n }\n if (!longClaimId) {\n return resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getChannelData (channelName, channelClaimId, page) {\n return new Promise((resolve, reject) => {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId)\n .then(longChannelClaimId => {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Certificate.getShortChannelIdFromLongChannelId(longChannelClaimId, channelName)]);\n })\n .then(([longChannelClaimId, shortChannelClaimId]) => {\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. return all the channel information\n resolve({\n channelName,\n longChannelClaimId,\n shortChannelClaimId,\n });\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getChannelClaims (channelName, channelClaimId, page) {\n return new Promise((resolve, reject) => {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId)\n .then(longChannelClaimId => {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Claim.getAllChannelClaims(longChannelClaimId)]);\n })\n .then(([longChannelClaimId, channelClaimsArray]) => {\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. format the data for the view, including pagination\n let paginatedChannelViewData = returnPaginatedChannelClaims(channelName, longChannelClaimId, channelClaimsArray, page);\n // 4. return all the channel information and contents\n resolve(paginatedChannelViewData);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getLocalFileRecord (claimId, name) {\n return db.File.findOne({where: {claimId, name}})\n .then(file => {\n if (!file) {\n return NO_FILE;\n }\n return file.dataValues;\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/controllers/serveController.js","import React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport { createStore } from 'redux';\nimport Reducer from '../../client/reducers/index';\nimport { Provider } from 'react-redux';\nimport { StaticRouter } from 'react-router-dom';\nimport GAListener from '../../client/components/GAListener/index';\nimport App from '../../client/app';\nimport renderFullPage from './renderFullPage.js';\nimport Helmet from 'react-helmet';\n\nmodule.exports = (req, res) => {\n let context = {};\n\n // create a new Redux store instance\n const store = createStore(Reducer);\n\n // render component to a string\n const html = renderToString(\n \n \n \n \n \n \n \n );\n\n // get head tags from helmet\n const helmet = Helmet.renderStatic();\n\n // check for a redirect\n if (context.url) {\n // Somewhere a `` was rendered\n return res.redirect(301, context.url);\n } else {\n // we're good, send the response\n }\n\n // get the initial state from our Redux store\n const preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send(renderFullPage(helmet, html, preloadedState));\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/handlePageRender.jsx","module.exports = require(\"react-dom/server\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-dom/server\"\n// module id = 32\n// module chunks = 0","import { combineReducers } from 'redux';\nimport PublishReducer from 'reducers/publish';\nimport ChannelReducer from 'reducers/channel';\nimport ShowReducer from 'reducers/show';\nimport SiteReducer from 'reducers/site';\n\nexport default combineReducers({\n channel: ChannelReducer,\n publish: PublishReducer,\n show : ShowReducer,\n site : SiteReducer,\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/index.js","export const FILE_SELECTED = 'FILE_SELECTED';\nexport const FILE_CLEAR = 'FILE_CLEAR';\nexport const METADATA_UPDATE = 'METADATA_UPDATE';\nexport const CLAIM_UPDATE = 'CLAIM_UPDATE';\nexport const SET_PUBLISH_IN_CHANNEL = 'SET_PUBLISH_IN_CHANNEL';\nexport const PUBLISH_STATUS_UPDATE = 'PUBLISH_STATUS_UPDATE';\nexport const ERROR_UPDATE = 'ERROR_UPDATE';\nexport const SELECTED_CHANNEL_UPDATE = 'SELECTED_CHANNEL_UPDATE';\nexport const TOGGLE_METADATA_INPUTS = 'TOGGLE_METADATA_INPUTS';\nexport const THUMBNAIL_NEW = 'THUMBNAIL_NEW';\nexport const PUBLISH_START = 'PUBLISH_START';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/publish_action_types.js","export const LOGIN = 'Existing';\nexport const CREATE = 'New';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/publish_channel_select_states.js","export const CHANNEL_UPDATE = 'CHANNEL_UPDATE';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/channel_action_types.js","export const LOCAL_CHECK = 'LOCAL_CHECK';\nexport const UNAVAILABLE = 'UNAVAILABLE';\nexport const ERROR = 'ERROR';\nexport const AVAILABLE = 'AVAILABLE';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/asset_display_states.js","import React from 'react';\nimport GoogleAnalytics from 'react-ga';\nimport { withRouter } from 'react-router-dom';\nconst { analytics: { googleId } } = require('../../../config/siteConfig.js');\n\nGoogleAnalytics.initialize(googleId);\n\nclass GAListener extends React.Component {\n componentDidMount () {\n this.sendPageView(this.props.history.location);\n this.props.history.listen(this.sendPageView);\n }\n\n sendPageView (location) {\n GoogleAnalytics.set({ page: location.pathname });\n GoogleAnalytics.pageview(location.pathname);\n }\n\n render () {\n return this.props.children;\n }\n}\n\nexport default withRouter(GAListener);\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/GAListener/index.jsx","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport HomePage from 'pages/HomePage'; // or use the provided local homepage\nimport AboutPage from 'pages/AboutPage';\nimport LoginPage from 'pages/LoginPage';\nimport ShowPage from 'pages/ShowPage';\nimport FourOhFourPage from 'containers/FourOhFourPage';\n\nconst App = () => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default App;\n\n\n\n// WEBPACK FOOTER //\n// ./client/app.js","import { connect } from 'react-redux';\nimport { selectFile, updateError, clearFile } from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n file : publish.file,\n thumbnail: publish.thumbnail,\n fileError: publish.error.file,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n selectFile: (file) => {\n dispatch(selectFile(file));\n },\n setFileError: (value) => {\n dispatch(clearFile());\n dispatch(updateError('file', value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/Dropzone/index.js","import { connect } from 'react-redux';\nimport { updateLoggedInChannel } from 'actions/channel';\nimport View from './view';\nimport {updateSelectedChannel} from '../../actions/publish';\n\nconst mapDispatchToProps = dispatch => {\n return {\n onChannelLogin: (name, shortId, longId) => {\n dispatch(updateLoggedInChannel(name, shortId, longId));\n dispatch(updateSelectedChannel(name));\n },\n };\n};\n\nexport default connect(null, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelLoginForm/index.js","import { connect } from 'react-redux';\nimport { updateLoggedInChannel } from 'actions/channel';\nimport View from './view';\nimport {updateSelectedChannel} from 'actions/publish';\n\nconst mapDispatchToProps = dispatch => {\n return {\n onChannelLogin: (name, shortId, longId) => {\n dispatch(updateLoggedInChannel(name, shortId, longId));\n dispatch(updateSelectedChannel(name));\n },\n };\n};\n\nexport default connect(null, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelCreateForm/index.js","export const CHANNEL = 'CHANNEL';\nexport const ASSET_LITE = 'ASSET_LITE';\nexport const ASSET_DETAILS = 'ASSET_DETAILS';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/show_request_types.js","import { connect } from 'react-redux';\nimport View from './view';\nimport { fileRequested } from 'actions/show';\nimport { selectAsset } from 'selectors/show';\n\nconst mapStateToProps = ({ show }) => {\n // select error and status\n const error = show.displayAsset.error;\n const status = show.displayAsset.status;\n // select asset\n const asset = selectAsset(show);\n // return props\n return {\n error,\n status,\n asset,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onFileRequest: (name, claimId) => {\n dispatch(fileRequested(name, claimId));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetDisplay/index.js","module.exports = (helmet, html, preloadedState) => {\n // take the html and preloadedState and return the full page\n return `\n \n \n \n \n \n \n \n ${helmet.title.toString()}\n ${helmet.meta.toString()}\n ${helmet.link.toString()}\n \n \n \n \n \n \n \n \n
\n
${html}
\n
\n \n \n \n \n `;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/renderFullPage.js","export const selectSiteState = (state) => {\n return state.site;\n};\n\nexport const selectSiteHost = (state) => {\n return state.site.host;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/selectors/site.js","module.exports = require(\"babel-polyfill\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"babel-polyfill\"\n// module id = 48\n// module chunks = 0","module.exports = require(\"whatwg-fetch\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"whatwg-fetch\"\n// module id = 49\n// module chunks = 0","// app dependencies\nconst express = require('express');\nconst bodyParser = require('body-parser');\nconst expressHandlebars = require('express-handlebars');\nconst Handlebars = require('handlebars');\nconst helmet = require('helmet');\nconst passport = require('passport');\nconst { serializeSpeechUser, deserializeSpeechUser } = require('./server/helpers/authHelpers.js');\nconst cookieSession = require('cookie-session');\nconst http = require('http');\n// logging dependencies\nconst logger = require('winston');\n\nfunction SpeechServer () {\n this.configureMysql = (mysqlConfig) => {\n require('./config/mysqlConfig.js').configure(mysqlConfig);\n };\n this.configureSite = (siteConfig) => {\n require('./config/siteConfig.js').configure(siteConfig);\n this.sessionKey = siteConfig.auth.sessionKey;\n this.PORT = siteConfig.details.port;\n };\n this.configureSlack = (slackConfig) => {\n require('./config/slackConfig.js').configure(slackConfig);\n };\n this.createApp = () => {\n // create an Express application\n const app = express();\n\n // trust the proxy to get ip address for us\n app.enable('trust proxy');\n\n // add middleware\n app.use(helmet()); // set HTTP headers to protect against well-known web vulnerabilties\n app.use(express.static(`${__dirname}/public`)); // 'express.static' to serve static files from public directory\n app.use(bodyParser.json()); // 'body parser' for parsing application/json\n app.use(bodyParser.urlencoded({ extended: true })); // 'body parser' for parsing application/x-www-form-urlencoded\n app.use((req, res, next) => { // custom logging middleware to log all incoming http requests\n logger.verbose(`Request on ${req.originalUrl} from ${req.ip}`);\n next();\n });\n\n // configure passport\n passport.serializeUser(serializeSpeechUser);\n passport.deserializeUser(deserializeSpeechUser);\n const localSignupStrategy = require('./server/passport/local-signup.js');\n const localLoginStrategy = require('./server/passport/local-login.js');\n passport.use('local-signup', localSignupStrategy);\n passport.use('local-login', localLoginStrategy);\n // initialize passport\n app.use(cookieSession({\n name : 'session',\n keys : [this.sessionKey],\n maxAge: 24 * 60 * 60 * 1000, // i.e. 24 hours\n }));\n app.use(passport.initialize());\n app.use(passport.session());\n\n // configure handlebars & register it with express app\n const hbs = expressHandlebars.create({\n defaultLayout: 'embed',\n handlebars : Handlebars,\n });\n app.engine('handlebars', hbs.engine);\n app.set('view engine', 'handlebars');\n\n // set the routes on the app\n require('./server/routes/auth-routes.js')(app);\n require('./server/routes/api-routes.js')(app);\n require('./server/routes/page-routes.js')(app);\n require('./server/routes/asset-routes.js')(app);\n require('./server/routes/fallback-routes.js')(app);\n\n this.app = app;\n };\n this.initialize = () => {\n require('./server/helpers/configureLogger.js')(logger);\n require('./server/helpers/configureSlack.js')(logger);\n this.createApp();\n this.server = http.Server(this.app);\n };\n this.start = () => {\n const db = require('./server/models/index');\n // sync sequelize\n db.sequelize.sync()\n // start the server\n .then(() => {\n this.server.listen(this.PORT, () => {\n logger.info(`Server is listening on PORT ${this.PORT}`);\n });\n })\n .catch((error) => {\n logger.error(`Startup Error:`, error);\n });\n };\n};\n\nmodule.exports = SpeechServer;\n\n\n\n// WEBPACK FOOTER //\n// ./server.js","module.exports = require(\"express\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"express\"\n// module id = 51\n// module chunks = 0","module.exports = require(\"body-parser\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"body-parser\"\n// module id = 52\n// module chunks = 0","module.exports = require(\"express-handlebars\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"express-handlebars\"\n// module id = 53\n// module chunks = 0","module.exports = require(\"handlebars\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"handlebars\"\n// module id = 54\n// module chunks = 0","module.exports = require(\"helmet\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"helmet\"\n// module id = 55\n// module chunks = 0","const logger = require('winston');\n\nmodule.exports = {\n serializeSpeechUser (user, done) { // returns user data to be serialized into session\n logger.debug('serializing user');\n done(null, user);\n },\n deserializeSpeechUser (user, done) { // deserializes session and populates additional info to req.user\n logger.debug('deserializing user');\n done(null, user);\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/authHelpers.js","module.exports = require(\"cookie-session\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"cookie-session\"\n// module id = 57\n// module chunks = 0","module.exports = require(\"http\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"http\"\n// module id = 58\n// module chunks = 0","const PassportLocalStrategy = require('passport-local').Strategy;\nconst lbryApi = require('../helpers/lbryApi.js');\nconst logger = require('winston');\nconst db = require('../models/index');\n\nmodule.exports = new PassportLocalStrategy(\n {\n usernameField: 'username',\n passwordField: 'password',\n },\n (username, password, done) => {\n logger.verbose(`new channel signup request. user: ${username} pass: ${password} .`);\n let userInfo = {};\n // server-side validaton of inputs (username, password)\n\n // create the channel and retrieve the metadata\n return lbryApi.createChannel(`@${username}`)\n .then(tx => {\n // create user record\n const userData = {\n userName: username,\n password: password,\n };\n logger.verbose('userData >', userData);\n // create user record\n const channelData = {\n channelName : `@${username}`,\n channelClaimId: tx.claim_id,\n };\n logger.verbose('channelData >', channelData);\n // create certificate record\n const certificateData = {\n claimId: tx.claim_id,\n name : `@${username}`,\n // address,\n };\n logger.verbose('certificateData >', certificateData);\n // save user and certificate to db\n return Promise.all([db.User.create(userData), db.Channel.create(channelData), db.Certificate.create(certificateData)]);\n })\n .then(([newUser, newChannel, newCertificate]) => {\n logger.verbose('user and certificate successfully created');\n // store the relevant newUser info to be passed back for req.User\n userInfo['id'] = newUser.id;\n userInfo['userName'] = newUser.userName;\n userInfo['channelName'] = newChannel.channelName;\n userInfo['channelClaimId'] = newChannel.channelClaimId;\n // associate the instances\n return Promise.all([newCertificate.setChannel(newChannel), newChannel.setUser(newUser)]);\n })\n .then(() => {\n logger.verbose('user and certificate successfully associated');\n return db.Certificate.getShortChannelIdFromLongChannelId(userInfo.channelClaimId, userInfo.channelName);\n })\n .then(shortChannelId => {\n userInfo['shortChannelId'] = shortChannelId;\n return done(null, userInfo);\n })\n .catch(error => {\n logger.error('signup error', error);\n return done(error);\n });\n }\n);\n\n\n\n// WEBPACK FOOTER //\n// ./server/passport/local-signup.js","module.exports = require(\"axios\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"axios\"\n// module id = 60\n// module chunks = 0","const lbryConfig = {\n api: {\n apiHost: 'localhost',\n apiPort: '5279',\n },\n};\n\nmodule.exports = lbryConfig;\n\n\n\n// WEBPACK FOOTER //\n// ./config/lbryConfig.js","module.exports = require(\"universal-analytics\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"universal-analytics\"\n// module id = 62\n// module chunks = 0","const logger = require('winston');\nconst { returnShortId } = require('../helpers/sequelizeHelpers.js');\n\nmodule.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => {\n const Certificate = sequelize.define(\n 'Certificate',\n {\n address: {\n type : STRING,\n default: null,\n },\n amount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n claimId: {\n type : STRING,\n default: null,\n },\n claimSequence: {\n type : INTEGER,\n default: null,\n },\n decodedClaim: {\n type : BOOLEAN,\n default: null,\n },\n depth: {\n type : INTEGER,\n default: null,\n },\n effectiveAmount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n hasSignature: {\n type : BOOLEAN,\n default: null,\n },\n height: {\n type : INTEGER,\n default: null,\n },\n hex: {\n type : TEXT('long'),\n default: null,\n },\n name: {\n type : STRING,\n default: null,\n },\n nout: {\n type : INTEGER,\n default: null,\n },\n txid: {\n type : STRING,\n default: null,\n },\n validAtHeight: {\n type : INTEGER,\n default: null,\n },\n outpoint: {\n type : STRING,\n default: null,\n },\n valueVersion: {\n type : STRING,\n default: null,\n },\n claimType: {\n type : STRING,\n default: null,\n },\n certificateVersion: {\n type : STRING,\n default: null,\n },\n keyType: {\n type : STRING,\n default: null,\n },\n publicKey: {\n type : TEXT('long'),\n default: null,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Certificate.associate = db => {\n Certificate.belongsTo(db.Channel, {\n foreignKey: {\n allowNull: true,\n },\n });\n };\n\n Certificate.getShortChannelIdFromLongChannelId = function (longChannelId, channelName) {\n logger.debug(`getShortChannelIdFromLongChannelId ${channelName}:${longChannelId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: {name: channelName},\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n throw new Error('No channel(s) found with that channel name');\n default:\n return resolve(returnShortId(result, longChannelId));\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromShortChannelId = function (channelName, channelClaimId) {\n logger.debug(`getLongChannelIdFromShortChannelId(${channelName}, ${channelClaimId})`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: {\n name : channelName,\n claimId: {\n $like: `${channelClaimId}%`,\n },\n },\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n default: // note results must be sorted\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromChannelName = function (channelName) {\n logger.debug(`getLongChannelIdFromChannelName(${channelName})`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name: channelName },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.validateLongChannelId = function (name, claimId) {\n logger.debug(`validateLongChannelId(${name}, ${claimId})`);\n return new Promise((resolve, reject) => {\n this.findOne({\n where: {name, claimId},\n })\n .then(result => {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelId = function (channelName, channelClaimId) {\n logger.debug(`getLongChannelId(${channelName}, ${channelClaimId})`);\n if (channelClaimId && (channelClaimId.length === 40)) { // if a full channel id is provided\n return this.validateLongChannelId(channelName, channelClaimId);\n } else if (channelClaimId && channelClaimId.length < 40) { // if a short channel id is provided\n return this.getLongChannelIdFromShortChannelId(channelName, channelClaimId);\n } else {\n return this.getLongChannelIdFromChannelName(channelName); // if no channel id provided\n }\n };\n\n return Certificate;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/certificate.js","module.exports = (sequelize, { STRING }) => {\n const Channel = sequelize.define(\n 'Channel',\n {\n channelName: {\n type : STRING,\n allowNull: false,\n },\n channelClaimId: {\n type : STRING,\n allowNull: false,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Channel.associate = db => {\n Channel.belongsTo(db.User);\n Channel.hasOne(db.Certificate);\n };\n\n return Channel;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/channel.js","const logger = require('winston');\nconst { returnShortId } = require('../helpers/sequelizeHelpers.js');\nconst { assetDefaults: { thumbnail: defaultThumbnail }, details: { host } } = require('../../config/siteConfig.js');\n\nfunction determineFileExtensionFromContentType (contentType) {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n return 'jpeg';\n case 'image/png':\n return 'png';\n case 'image/gif':\n return 'gif';\n case 'video/mp4':\n return 'mp4';\n default:\n logger.debug('setting unknown file type as file extension jpeg');\n return 'jpeg';\n }\n};\n\nfunction determineThumbnail (storedThumbnail, defaultThumbnail) {\n if (storedThumbnail === '') {\n return defaultThumbnail;\n }\n return storedThumbnail;\n};\n\nfunction prepareClaimData (claim) {\n // logger.debug('preparing claim data based on resolved data:', claim);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['host'] = host;\n return claim;\n};\n\nmodule.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => {\n const Claim = sequelize.define(\n 'Claim',\n {\n address: {\n type : STRING,\n default: null,\n },\n amount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n claimId: {\n type : STRING,\n default: null,\n },\n claimSequence: {\n type : INTEGER,\n default: null,\n },\n decodedClaim: {\n type : BOOLEAN,\n default: null,\n },\n depth: {\n type : INTEGER,\n default: null,\n },\n effectiveAmount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n hasSignature: {\n type : BOOLEAN,\n default: null,\n },\n height: {\n type : INTEGER,\n default: null,\n },\n hex: {\n type : TEXT('long'),\n default: null,\n },\n name: {\n type : STRING,\n default: null,\n },\n nout: {\n type : INTEGER,\n default: null,\n },\n txid: {\n type : STRING,\n default: null,\n },\n validAtHeight: {\n type : INTEGER,\n default: null,\n },\n outpoint: {\n type : STRING,\n default: null,\n },\n claimType: {\n type : STRING,\n default: null,\n },\n certificateId: {\n type : STRING,\n default: null,\n },\n author: {\n type : STRING,\n default: null,\n },\n description: {\n type : TEXT('long'),\n default: null,\n },\n language: {\n type : STRING,\n default: null,\n },\n license: {\n type : STRING,\n default: null,\n },\n licenseUrl: {\n type : STRING,\n default: null,\n },\n nsfw: {\n type : BOOLEAN,\n default: null,\n },\n preview: {\n type : STRING,\n default: null,\n },\n thumbnail: {\n type : STRING,\n default: null,\n },\n title: {\n type : STRING,\n default: null,\n },\n metadataVersion: {\n type : STRING,\n default: null,\n },\n contentType: {\n type : STRING,\n default: null,\n },\n source: {\n type : STRING,\n default: null,\n },\n sourceType: {\n type : STRING,\n default: null,\n },\n sourceVersion: {\n type : STRING,\n default: null,\n },\n streamVersion: {\n type : STRING,\n default: null,\n },\n valueVersion: {\n type : STRING,\n default: null,\n },\n channelName: {\n type : STRING,\n allowNull: true,\n default : null,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Claim.associate = db => {\n Claim.belongsTo(db.File, {\n foreignKey: {\n allowNull: true,\n },\n });\n };\n\n Claim.getShortClaimIdFromLongClaimId = function (claimId, claimName) {\n logger.debug(`Claim.getShortClaimIdFromLongClaimId for ${claimName}#${claimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name: claimName },\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n throw new Error('No claim(s) found with that claim name');\n default:\n resolve(returnShortId(result, claimId));\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getAllChannelClaims = function (channelClaimId) {\n logger.debug(`Claim.getAllChannelClaims for ${channelClaimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { certificateId: channelClaimId },\n order: [['height', 'ASC']],\n raw : true, // returns an array of only data, not an array of instances\n })\n .then(channelClaimsArray => {\n // logger.debug('channelclaimsarray length:', channelClaimsArray.length);\n switch (channelClaimsArray.length) {\n case 0:\n return resolve(null);\n default:\n channelClaimsArray.forEach(claim => {\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n return claim;\n });\n return resolve(channelClaimsArray);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getClaimIdByLongChannelId = function (channelClaimId, claimName) {\n logger.debug(`finding claim id for claim ${claimName} from channel ${channelClaimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name: claimName, certificateId: channelClaimId },\n order: [['id', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(result[0].claimId);\n default:\n logger.error(`${result.length} records found for \"${claimName}\" in channel \"${channelClaimId}\"`);\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimIdFromShortClaimId = function (name, shortId) {\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: {\n name,\n claimId: {\n $like: `${shortId}%`,\n }},\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n default: // note results must be sorted\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getTopFreeClaimIdByClaimName = function (name) {\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']], // note: maybe height and effective amount need to switch?\n })\n .then(result => {\n logger.debug('length of result', result.length);\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].dataValues.claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.validateLongClaimId = function (name, claimId) {\n return new Promise((resolve, reject) => {\n this.findOne({\n where: {name, claimId},\n })\n .then(result => {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimId = function (claimName, claimId) {\n logger.debug(`getLongClaimId(${claimName}, ${claimId})`);\n if (claimId && (claimId.length === 40)) { // if a full claim id is provided\n return this.validateLongClaimId(claimName, claimId);\n } else if (claimId && claimId.length < 40) {\n return this.getLongClaimIdFromShortClaimId(claimName, claimId); // if a short claim id is provided\n } else {\n return this.getTopFreeClaimIdByClaimName(claimName); // if no claim id is provided\n }\n };\n\n Claim.resolveClaim = function (name, claimId) {\n logger.debug(`Claim.resolveClaim: ${name} ${claimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name, claimId },\n })\n .then(claimArray => {\n switch (claimArray.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(prepareClaimData(claimArray[0].dataValues));\n default:\n logger.error(`more than one record matches ${name}#${claimId} in db.Claim`);\n return resolve(prepareClaimData(claimArray[0].dataValues));\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n return Claim;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/claim.js","module.exports = (sequelize, { STRING, BOOLEAN, INTEGER }) => {\n const File = sequelize.define(\n 'File',\n {\n name: {\n type : STRING,\n allowNull: false,\n },\n claimId: {\n type : STRING,\n allowNull: false,\n },\n address: {\n type : STRING,\n allowNull: false,\n },\n outpoint: {\n type : STRING,\n allowNull: false,\n },\n height: {\n type : INTEGER,\n allowNull: false,\n default : 0,\n },\n fileName: {\n type : STRING,\n allowNull: false,\n },\n filePath: {\n type : STRING,\n allowNull: false,\n },\n fileType: {\n type: STRING,\n },\n nsfw: {\n type : BOOLEAN,\n allowNull : false,\n defaultValue: false,\n },\n trendingEligible: {\n type : BOOLEAN,\n allowNull : false,\n defaultValue: true,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n File.associate = db => {\n File.hasMany(db.Request);\n File.hasOne(db.Claim);\n };\n\n File.getRecentClaims = function () {\n return this.findAll({\n where: { nsfw: false, trendingEligible: true },\n order: [['createdAt', 'DESC']],\n limit: 25,\n });\n };\n\n return File;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/file.js","module.exports = (sequelize, { STRING, BOOLEAN, TEXT }) => {\n const Request = sequelize.define(\n 'Request',\n {\n action: {\n type : STRING,\n allowNull: false,\n },\n url: {\n type : STRING,\n allowNull: false,\n },\n ipAddress: {\n type : STRING,\n allowNull: true,\n },\n result: {\n type : TEXT('long'),\n allowNull: true,\n default : null,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Request.associate = db => {\n Request.belongsTo(db.File, {\n foreignKey: {\n allowNull: true,\n },\n });\n };\n\n return Request;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/request.js","'use strict';\nconst bcrypt = require('bcrypt');\nconst logger = require('winston');\n\nmodule.exports = (sequelize, { STRING }) => {\n const User = sequelize.define(\n 'User',\n {\n userName: {\n type : STRING,\n allowNull: false,\n },\n password: {\n type : STRING,\n allowNull: false,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n User.associate = db => {\n User.hasOne(db.Channel);\n };\n\n User.prototype.comparePassword = function (password) {\n return bcrypt.compare(password, this.password);\n };\n\n User.prototype.changePassword = function (newPassword) {\n return new Promise((resolve, reject) => {\n // generate a salt string to use for hashing\n bcrypt.genSalt((saltError, salt) => {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(newPassword, salt, (hashError, hash) => {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the current password with the new hash\n this\n .update({password: hash})\n .then(() => {\n resolve();\n })\n .catch(error => {\n reject(error);\n });\n });\n });\n });\n };\n\n // pre-save hook method to hash the user's password before the user's info is saved to the db.\n User.hook('beforeCreate', (user, options) => {\n logger.debug('User.beforeCreate hook...');\n return new Promise((resolve, reject) => {\n // generate a salt string to use for hashing\n bcrypt.genSalt((saltError, salt) => {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(user.password, salt, (hashError, hash) => {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the password string with the hash password value\n user.password = hash;\n resolve();\n });\n });\n });\n });\n\n return User;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/user.js","module.exports = require(\"bcrypt\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"bcrypt\"\n// module id = 69\n// module chunks = 0","const PassportLocalStrategy = require('passport-local').Strategy;\nconst logger = require('winston');\nconst db = require('../models/index');\n\nconst returnUserAndChannelInfo = (userInstance) => {\n return new Promise((resolve, reject) => {\n let userInfo = {};\n userInfo['id'] = userInstance.id;\n userInfo['userName'] = userInstance.userName;\n userInstance\n .getChannel()\n .then(({channelName, channelClaimId}) => {\n userInfo['channelName'] = channelName;\n userInfo['channelClaimId'] = channelClaimId;\n return db.Certificate.getShortChannelIdFromLongChannelId(channelClaimId, channelName);\n })\n .then(shortChannelId => {\n userInfo['shortChannelId'] = shortChannelId;\n resolve(userInfo);\n })\n .catch(error => {\n reject(error);\n });\n });\n};\n\nmodule.exports = new PassportLocalStrategy(\n {\n usernameField: 'username',\n passwordField: 'password',\n },\n (username, password, done) => {\n return db.User\n .findOne({\n where: {userName: username},\n })\n .then(user => {\n if (!user) {\n logger.debug('no user found');\n return done(null, false, {message: 'Incorrect username or password'});\n }\n return user.comparePassword(password)\n .then(isMatch => {\n if (!isMatch) {\n logger.debug('incorrect password');\n return done(null, false, {message: 'Incorrect username or password'});\n }\n logger.debug('Password was a match, returning User');\n return returnUserAndChannelInfo(user)\n .then(userInfo => {\n return done(null, userInfo);\n })\n .catch(error => {\n return error;\n });\n })\n .catch(error => {\n return error;\n });\n })\n .catch(error => {\n return done(error);\n });\n },\n);\n\n\n\n// WEBPACK FOOTER //\n// ./server/passport/local-login.js","const logger = require('winston');\nconst passport = require('passport');\n\nmodule.exports = (app) => {\n // route for sign up\n app.post('/signup', passport.authenticate('local-signup'), (req, res) => {\n logger.verbose(`successful signup for ${req.user.channelName}`);\n res.status(200).json({\n success : true,\n channelName : req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId,\n });\n });\n // route for log in\n app.post('/login', (req, res, next) => {\n passport.authenticate('local-login', (err, user, info) => {\n if (err) {\n return next(err);\n }\n if (!user) {\n return res.status(400).json({\n success: false,\n message: info.message,\n });\n }\n logger.debug('successful login');\n req.logIn(user, (err) => {\n if (err) {\n return next(err);\n }\n return res.status(200).json({\n success : true,\n channelName : req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId,\n });\n });\n })(req, res, next);\n });\n // route to log out\n app.get('/logout', (req, res) => {\n req.logout();\n res.status(200).json({success: true, message: 'you successfully logged out'});\n });\n // see if user is authenticated, and return credentials if so\n app.get('/user', (req, res) => {\n if (req.user) {\n res.status(200).json({success: true, data: req.user});\n } else {\n res.status(401).json({success: false, message: 'user is not logged in'});\n }\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/auth-routes.js","const logger = require('winston');\nconst multipart = require('connect-multiparty');\nconst { publishing: { uploadDirectory }, details: { host } } = require('../../config/siteConfig.js');\nconst multipartMiddleware = multipart({uploadDir: uploadDirectory});\nconst db = require('../models/index');\nconst { claimNameIsAvailable, checkChannelAvailability, publish } = require('../controllers/publishController.js');\nconst { getClaimList, resolveUri, getClaim } = require('../helpers/lbryApi.js');\nconst { addGetResultsToFileData, createBasicPublishParams, createThumbnailPublishParams, parsePublishApiRequestBody, parsePublishApiRequestFiles, createFileData } = require('../helpers/publishHelpers.js');\nconst errorHandlers = require('../helpers/errorHandlers.js');\nconst { sendGATimingEvent } = require('../helpers/googleAnalytics.js');\nconst { authenticateUser } = require('../auth/authentication.js');\nconst { getChannelData, getChannelClaims, getClaimId } = require('../controllers/serveController.js');\n\nconst NO_CHANNEL = 'NO_CHANNEL';\nconst NO_CLAIM = 'NO_CLAIM';\n\nmodule.exports = (app) => {\n // route to check whether site has published to a channel\n app.get('/api/channel/availability/:name', ({ ip, originalUrl, params: { name } }, res) => {\n const gaStartTime = Date.now();\n checkChannelAvailability(name)\n .then(availableName => {\n res.status(200).json(availableName);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short channel id from long channel Id\n app.get('/api/channel/short-id/:longId/:name', ({ ip, originalUrl, params }, res) => {\n db.Certificate.getShortChannelIdFromLongChannelId(params.longId, params.name)\n .then(shortId => {\n res.status(200).json(shortId);\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/data/:channelName/:channelClaimId', ({ ip, originalUrl, body, params }, res) => {\n const channelName = params.channelName;\n let channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n getChannelData(channelName, channelClaimId, 0)\n .then(data => {\n if (data === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'No matching channel was found'});\n }\n res.status(200).json({success: true, data});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/claims/:channelName/:channelClaimId/:page', ({ ip, originalUrl, body, params }, res) => {\n const channelName = params.channelName;\n let channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n const page = params.page;\n getChannelClaims(channelName, channelClaimId, page)\n .then(data => {\n if (data === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'No matching channel was found'});\n }\n res.status(200).json({success: true, data});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a claim_list request on the daemon\n app.get('/api/claim/list/:name', ({ ip, originalUrl, params }, res) => {\n getClaimList(params.name)\n .then(claimsList => {\n res.status(200).json(claimsList);\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get an asset\n app.get('/api/claim/get/:name/:claimId', ({ ip, originalUrl, params }, res) => {\n const name = params.name;\n const claimId = params.claimId;\n // resolve the claim\n db.Claim.resolveClaim(name, claimId)\n .then(resolveResult => {\n // make sure a claim actually exists at that uri\n if (!resolveResult) {\n throw new Error('No matching uri found in Claim table');\n }\n let fileData = createFileData(resolveResult);\n // get the claim\n return Promise.all([fileData, getClaim(`${name}#${claimId}`)]);\n })\n .then(([ fileData, getResult ]) => {\n fileData = addGetResultsToFileData(fileData, getResult);\n return Promise.all([db.upsert(db.File, fileData, {name, claimId}, 'File'), getResult]);\n })\n .then(([ fileRecord, {message, completed} ]) => {\n res.status(200).json({ success: true, message, completed });\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to check whether this site published to a claim\n app.get('/api/claim/availability/:name', ({ ip, originalUrl, params: { name } }, res) => {\n const gaStartTime = Date.now();\n claimNameIsAvailable(name)\n .then(result => {\n res.status(200).json(result);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a resolve request on the daemon\n app.get('/api/claim/resolve/:name/:claimId', ({ headers, ip, originalUrl, params }, res) => {\n resolveUri(`${params.name}#${params.claimId}`)\n .then(resolvedUri => {\n res.status(200).json(resolvedUri);\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a publish request on the daemon\n app.post('/api/claim/publish', multipartMiddleware, ({ body, files, headers, ip, originalUrl, user }, res) => {\n // define variables\n let channelName, channelId, channelPassword, description, fileName, filePath, fileType, gaStartTime, license, name, nsfw, thumbnail, thumbnailFileName, thumbnailFilePath, thumbnailFileType, title;\n // record the start time of the request\n gaStartTime = Date.now();\n // validate the body and files of the request\n try {\n // validateApiPublishRequest(body, files);\n ({name, nsfw, license, title, description, thumbnail} = parsePublishApiRequestBody(body));\n ({fileName, filePath, fileType, thumbnailFileName, thumbnailFilePath, thumbnailFileType} = parsePublishApiRequestFiles(files));\n ({channelName, channelId, channelPassword} = body);\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n // check channel authorization\n Promise.all([\n authenticateUser(channelName, channelId, channelPassword, user),\n claimNameIsAvailable(name),\n createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail),\n createThumbnailPublishParams(thumbnailFilePath, name, license, nsfw),\n ])\n .then(([{channelName, channelClaimId}, validatedClaimName, publishParams, thumbnailPublishParams]) => {\n // add channel details to the publish params\n if (channelName && channelClaimId) {\n publishParams['channel_name'] = channelName;\n publishParams['channel_id'] = channelClaimId;\n }\n // publish the thumbnail\n if (thumbnailPublishParams) {\n publish(thumbnailPublishParams, thumbnailFileName, thumbnailFileType);\n }\n // publish the asset\n return publish(publishParams, fileName, fileType);\n })\n .then(result => {\n res.status(200).json({\n success: true,\n message: 'publish completed successfully',\n data : {\n name,\n claimId: result.claim_id,\n url : `${host}/${result.claim_id}/${name}`,\n lbryTx : result,\n },\n });\n // record the publish end time and send to google analytics\n sendGATimingEvent('end-to-end', 'publish', fileType, gaStartTime, Date.now());\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short claim id from long claim Id\n app.get('/api/claim/short-id/:longId/:name', ({ ip, originalUrl, body, params }, res) => {\n db.Claim.getShortClaimIdFromLongClaimId(params.longId, params.name)\n .then(shortId => {\n res.status(200).json({success: true, data: shortId});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.post('/api/claim/long-id', ({ ip, originalUrl, body, params }, res) => {\n logger.debug('body:', body);\n const channelName = body.channelName;\n const channelClaimId = body.channelClaimId;\n const claimName = body.claimName;\n const claimId = body.claimId;\n getClaimId(channelName, channelClaimId, claimName, claimId)\n .then(result => {\n if (result === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'No matching channel could be found'});\n }\n if (result === NO_CLAIM) {\n return res.status(404).json({success: false, message: 'No matching claim id could be found'});\n }\n res.status(200).json({success: true, data: result});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/claim/data/:claimName/:claimId', ({ ip, originalUrl, body, params }, res) => {\n const claimName = params.claimName;\n let claimId = params.claimId;\n if (claimId === 'none') claimId = null;\n db.Claim.resolveClaim(claimName, claimId)\n .then(claimInfo => {\n if (!claimInfo) {\n return res.status(404).json({success: false, message: 'No claim could be found'});\n }\n res.status(200).json({success: true, data: claimInfo});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to see if asset is available locally\n app.get('/api/file/availability/:name/:claimId', ({ ip, originalUrl, params }, res) => {\n const name = params.name;\n const claimId = params.claimId;\n db.File.findOne({where: {name, claimId}})\n .then(result => {\n if (result) {\n return res.status(200).json({success: true, data: true});\n }\n res.status(200).json({success: true, data: false});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/api-routes.js","module.exports = require(\"connect-multiparty\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"connect-multiparty\"\n// module id = 73\n// module chunks = 0","const logger = require('winston');\nconst db = require('../models/index');\nconst lbryApi = require('../helpers/lbryApi.js');\nconst publishHelpers = require('../helpers/publishHelpers.js');\nconst { publishing: { primaryClaimAddress, additionalClaimAddresses } } = require('../../config/siteConfig.js');\nconst Sequelize = require('sequelize');\nconst Op = Sequelize.Op;\n\nmodule.exports = {\n publish (publishParams, fileName, fileType) {\n return new Promise((resolve, reject) => {\n let publishResults, certificateId, channelName;\n // publish the file\n return lbryApi.publishClaim(publishParams)\n .then(tx => {\n logger.info(`Successfully published ${publishParams.name} ${fileName}`, tx);\n publishResults = tx;\n // get the channel information\n if (publishParams.channel_name) {\n logger.debug(`this claim was published in channel: ${publishParams.channel_name}`);\n return db.Channel.findOne({where: {channelName: publishParams.channel_name}});\n } else {\n logger.debug('this claim was not published in a channel');\n return null;\n }\n })\n .then(channel => {\n // set channel information\n certificateId = null;\n channelName = null;\n if (channel) {\n certificateId = channel.channelClaimId;\n channelName = channel.channelName;\n }\n logger.debug(`certificateId: ${certificateId}`);\n })\n .then(() => {\n // create the File record\n const fileRecord = {\n name : publishParams.name,\n claimId : publishResults.claim_id,\n title : publishParams.metadata.title,\n description: publishParams.metadata.description,\n address : publishParams.claim_address,\n outpoint : `${publishResults.txid}:${publishResults.nout}`,\n height : 0,\n fileName,\n filePath : publishParams.file_path,\n fileType,\n nsfw : publishParams.metadata.nsfw,\n };\n // create the Claim record\n const claimRecord = {\n name : publishParams.name,\n claimId : publishResults.claim_id,\n title : publishParams.metadata.title,\n description: publishParams.metadata.description,\n address : publishParams.claim_address,\n thumbnail : publishParams.metadata.thumbnail,\n outpoint : `${publishResults.txid}:${publishResults.nout}`,\n height : 0,\n contentType: fileType,\n nsfw : publishParams.metadata.nsfw,\n amount : publishParams.bid,\n certificateId,\n channelName,\n };\n // upsert criteria\n const upsertCriteria = {\n name : publishParams.name,\n claimId: publishResults.claim_id,\n };\n // upsert the records\n return Promise.all([db.upsert(db.File, fileRecord, upsertCriteria, 'File'), db.upsert(db.Claim, claimRecord, upsertCriteria, 'Claim')]);\n })\n .then(([file, claim]) => {\n logger.debug('File and Claim records successfully created');\n return Promise.all([file.setClaim(claim), claim.setFile(file)]);\n })\n .then(() => {\n logger.debug('File and Claim records successfully associated');\n resolve(publishResults); // resolve the promise with the result from lbryApi.publishClaim;\n })\n .catch(error => {\n logger.error('PUBLISH ERROR', error);\n publishHelpers.deleteTemporaryFile(publishParams.file_path); // delete the local file\n reject(error);\n });\n });\n },\n claimNameIsAvailable (name) {\n const claimAddresses = additionalClaimAddresses || [];\n claimAddresses.push(primaryClaimAddress);\n // find any records where the name is used\n return db.Claim\n .findAll({\n attributes: ['address'],\n where : {\n name,\n address: {\n [Op.or]: claimAddresses,\n },\n },\n })\n .then(result => {\n if (result.length >= 1) {\n throw new Error('That claim is already in use');\n };\n return name;\n })\n .catch(error => {\n throw error;\n });\n },\n checkChannelAvailability (name) {\n return db.Channel\n .findAll({\n where: { channelName: name },\n })\n .then(result => {\n if (result.length >= 1) {\n throw new Error('That channel has already been claimed');\n }\n return name;\n })\n .catch(error => {\n throw error;\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/controllers/publishController.js","module.exports = require(\"fs\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"fs\"\n// module id = 75\n// module chunks = 0","const db = require('../models/index');\nconst logger = require('winston');\n\nmodule.exports = {\n authenticateUser (channelName, channelId, channelPassword, user) {\n // case: no channelName or channel Id are provided (anonymous), regardless of whether user token is provided\n if (!channelName && !channelId) {\n return {\n channelName : null,\n channelClaimId: null,\n };\n }\n // case: channelName or channel Id are provided with user token\n if (user) {\n if (channelName && channelName !== user.channelName) {\n throw new Error('the provided channel name does not match user credentials');\n }\n if (channelId && channelId !== user.channelClaimId) {\n throw new Error('the provided channel id does not match user credentials');\n }\n return {\n channelName : user.channelName,\n channelClaimId: user.channelClaimId,\n };\n }\n // case: channelName or channel Id are provided with password instead of user token\n if (!channelPassword) throw new Error('no channel password provided');\n return module.exports.authenticateChannelCredentials(channelName, channelId, channelPassword);\n },\n authenticateChannelCredentials (channelName, channelId, userPassword) {\n return new Promise((resolve, reject) => {\n // hoisted variables\n let channelData;\n // build the params for finding the channel\n let channelFindParams = {};\n if (channelName) channelFindParams['channelName'] = channelName;\n if (channelId) channelFindParams['channelClaimId'] = channelId;\n // find the channel\n db.Channel\n .findOne({\n where: channelFindParams,\n })\n .then(channel => {\n if (!channel) {\n logger.debug('no channel found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n channelData = channel.get();\n logger.debug('channel data:', channelData);\n return db.User.findOne({\n where: { userName: channelData.channelName.substring(1) },\n });\n })\n .then(user => {\n if (!user) {\n logger.debug('no user found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n return user.comparePassword(userPassword);\n })\n .then(isMatch => {\n if (!isMatch) {\n logger.debug('incorrect password');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n logger.debug('...password was a match...');\n resolve(channelData);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/auth/authentication.js","const CLAIMS_PER_PAGE = 12;\n\nmodule.exports = {\n returnPaginatedChannelClaims (channelName, longChannelClaimId, claims, page) {\n const totalPages = module.exports.determineTotalPages(claims);\n const paginationPage = module.exports.getPageFromQuery(page);\n const viewData = {\n channelName : channelName,\n longChannelClaimId: longChannelClaimId,\n claims : module.exports.extractPageFromClaims(claims, paginationPage),\n previousPage : module.exports.determinePreviousPage(paginationPage),\n currentPage : paginationPage,\n nextPage : module.exports.determineNextPage(totalPages, paginationPage),\n totalPages : totalPages,\n totalResults : module.exports.determineTotalClaims(claims),\n };\n return viewData;\n },\n getPageFromQuery (page) {\n if (page) {\n return parseInt(page);\n }\n return 1;\n },\n extractPageFromClaims (claims, pageNumber) {\n if (!claims) {\n return []; // if no claims, return this default\n }\n // logger.debug('claims is array?', Array.isArray(claims));\n // logger.debug(`pageNumber ${pageNumber} is number?`, Number.isInteger(pageNumber));\n const claimStartIndex = (pageNumber - 1) * CLAIMS_PER_PAGE;\n const claimEndIndex = claimStartIndex + CLAIMS_PER_PAGE;\n const pageOfClaims = claims.slice(claimStartIndex, claimEndIndex);\n return pageOfClaims;\n },\n determineTotalPages (claims) {\n if (!claims) {\n return 0;\n } else {\n const totalClaims = claims.length;\n if (totalClaims < CLAIMS_PER_PAGE) {\n return 1;\n }\n const fullPages = Math.floor(totalClaims / CLAIMS_PER_PAGE);\n const remainder = totalClaims % CLAIMS_PER_PAGE;\n if (remainder === 0) {\n return fullPages;\n }\n return fullPages + 1;\n }\n },\n determinePreviousPage (currentPage) {\n if (currentPage === 1) {\n return null;\n }\n return currentPage - 1;\n },\n determineNextPage (totalPages, currentPage) {\n if (currentPage === totalPages) {\n return null;\n }\n return currentPage + 1;\n },\n determineTotalClaims (claims) {\n if (!claims) {\n return 0;\n }\n return claims.length;\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/channelPagination.js","const { details: host } = require('../../config/siteConfig.js');\nconst handlePageRender = require('../helpers/handlePageRender.jsx');\n\nmodule.exports = (app) => {\n // route for the home page\n app.get('/', (req, res) => {\n handlePageRender(req, res);\n });\n // route to display login page\n app.get('/login', (req, res) => {\n handlePageRender(req, res);\n });\n // route to show 'about' page\n app.get('/about', (req, res) => {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/trending', (req, res) => {\n res.status(301).redirect('/popular');\n });\n app.get('/popular', (req, res) => {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/new', (req, res) => {\n handlePageRender(req, res);\n });\n // route to send embedable video player (for twitter)\n app.get('/embed/:claimId/:name', ({ params }, res) => {\n const claimId = params.claimId;\n const name = params.name;\n // get and render the content\n res.status(200).render('embed', { layout: 'embed', host, claimId, name });\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/page-routes.js","import * as actions from 'constants/publish_action_types';\nimport { LOGIN } from 'constants/publish_channel_select_states';\nconst { publishing } = require('../../config/siteConfig.js');\n\nconst initialState = {\n disabled : publishing.disabled,\n disabledMessage : publishing.disabledMessage,\n publishInChannel : false,\n selectedChannel : LOGIN,\n showMetadataInputs: false,\n status : {\n status : null,\n message: null,\n },\n error: {\n file : null,\n url : null,\n channel : null,\n publishSubmit: null,\n },\n file : null,\n claim : '',\n metadata: {\n title : '',\n description: '',\n license : '',\n nsfw : false,\n },\n thumbnail: null,\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n case actions.FILE_SELECTED:\n return Object.assign({}, initialState, { // note: clears to initial state\n file: action.data,\n });\n case actions.FILE_CLEAR:\n return initialState;\n case actions.METADATA_UPDATE:\n return Object.assign({}, state, {\n metadata: Object.assign({}, state.metadata, {\n [action.data.name]: action.data.value,\n }),\n });\n case actions.CLAIM_UPDATE:\n return Object.assign({}, state, {\n claim: action.data,\n });\n case actions.SET_PUBLISH_IN_CHANNEL:\n return Object.assign({}, state, {\n publishInChannel: action.channel,\n });\n case actions.PUBLISH_STATUS_UPDATE:\n return Object.assign({}, state, {\n status: action.data,\n });\n case actions.ERROR_UPDATE:\n return Object.assign({}, state, {\n error: Object.assign({}, state.error, {\n [action.data.name]: action.data.value,\n }),\n });\n case actions.SELECTED_CHANNEL_UPDATE:\n return Object.assign({}, state, {\n selectedChannel: action.data,\n });\n case actions.TOGGLE_METADATA_INPUTS:\n return Object.assign({}, state, {\n showMetadataInputs: action.data,\n });\n case actions.THUMBNAIL_NEW:\n return Object.assign({}, state, {\n thumbnail: action.data,\n });\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/publish.js","import * as actions from 'constants/channel_action_types';\n\nconst initialState = {\n loggedInChannel: {\n name : null,\n shortId: null,\n longId : null,\n },\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n case actions.CHANNEL_UPDATE:\n return Object.assign({}, state, {\n loggedInChannel: action.data,\n });\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/channel.js","import * as actions from 'constants/show_action_types';\nimport { LOCAL_CHECK, ERROR } from 'constants/asset_display_states';\n\nconst initialState = {\n request: {\n error: null,\n type : null,\n id : null,\n },\n requestList : {},\n channelList : {},\n assetList : {},\n displayAsset: {\n error : null,\n status: LOCAL_CHECK,\n },\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n // handle request\n case actions.REQUEST_ERROR:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n error: action.data,\n }),\n });\n case actions.REQUEST_UPDATE:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n type: action.data.requestType,\n id : action.data.requestId,\n }),\n });\n // store requests\n case actions.REQUEST_LIST_ADD:\n return Object.assign({}, state, {\n requestList: Object.assign({}, state.requestList, {\n [action.data.id]: {\n error: action.data.error,\n key : action.data.key,\n },\n }),\n });\n // asset data\n case actions.ASSET_ADD:\n return Object.assign({}, state, {\n assetList: Object.assign({}, state.assetList, {\n [action.data.id]: {\n error : action.data.error,\n name : action.data.name,\n claimId : action.data.claimId,\n shortId : action.data.shortId,\n claimData: action.data.claimData,\n },\n }),\n });\n // channel data\n case actions.CHANNEL_ADD:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, {\n [action.data.id]: {\n name : action.data.name,\n longId : action.data.longId,\n shortId : action.data.shortId,\n claimsData: action.data.claimsData,\n },\n }),\n });\n case actions.CHANNEL_CLAIMS_UPDATE_SUCCESS:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, {\n [action.data.channelListId]: Object.assign({}, state.channelList[action.data.channelListId], {\n claimsData: action.data.claimsData,\n }),\n }),\n });\n // display an asset\n case actions.FILE_AVAILABILITY_UPDATE:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n status: action.data,\n }),\n });\n case actions.DISPLAY_ASSET_ERROR:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n error : action.data,\n status: ERROR,\n }),\n });\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/show.js","const siteConfig = require('../../config/siteConfig.js');\n\nconst {\n analytics: {\n googleId: googleAnalyticsId,\n },\n assetDefaults: {\n thumbnail: defaultThumbnail,\n description: defaultDescription,\n },\n details: {\n description,\n host,\n title,\n twitter,\n },\n} = siteConfig;\n\nconst initialState = {\n description,\n googleAnalyticsId,\n host,\n title,\n twitter,\n defaultDescription,\n defaultThumbnail,\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/site.js","module.exports = require(\"react-ga\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-ga\"\n// module id = 83\n// module chunks = 0","import React from 'react';\nimport SEO from 'components/SEO';\nimport NavBar from 'containers/NavBar';\nimport PublishTool from 'containers/PublishTool';\n\nclass HomePage extends React.Component {\n render () {\n return (\n
\n \n \n
\n \n
\n
\n );\n }\n};\n\nexport default HomePage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/HomePage/index.jsx","import React from 'react';\nimport Helmet from 'react-helmet';\nimport PropTypes from 'prop-types';\n\nimport { createPageTitle } from 'utils/pageTitle';\nimport { createMetaTags } from 'utils/metaTags';\nimport { createCanonicalLink } from 'utils/canonicalLink';\n\nclass SEO extends React.Component {\n render () {\n // props from state\n const { defaultDescription, defaultThumbnail, siteDescription, siteHost, siteTitle, siteTwitter } = this.props;\n // props from parent\n const { asset, channel, pageUri } = this.props;\n let { pageTitle } = this.props;\n // create page title, tags, and canonical link\n pageTitle = createPageTitle(siteTitle, pageTitle);\n const metaTags = createMetaTags(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail);\n const canonicalLink = createCanonicalLink(asset, channel, pageUri, siteHost);\n // render results\n return (\n \n );\n }\n};\n\nSEO.propTypes = {\n pageTitle: PropTypes.string,\n pageUri : PropTypes.string,\n channel : PropTypes.object,\n asset : PropTypes.object,\n};\n\nexport default SEO;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/SEO/view.jsx","export const createPageTitle = (siteTitle, pageTitle) => {\n if (!pageTitle) {\n return `${siteTitle}`;\n }\n return `${siteTitle} - ${pageTitle}`;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/pageTitle.js","const determineOgThumbnailContentType = (thumbnail) => {\n if (thumbnail) {\n const fileExt = thumbnail.substring(thumbnail.lastIndexOf('.'));\n switch (fileExt) {\n case 'jpeg':\n case 'jpg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'gif':\n return 'image/gif';\n case 'mp4':\n return 'video/mp4';\n default:\n return 'image/jpeg';\n }\n }\n return '';\n};\n\nconst createBasicMetaTags = (siteHost, siteDescription, siteTitle, siteTwitter) => {\n return [\n {property: 'og:title', content: siteTitle},\n {property: 'og:url', content: siteHost},\n {property: 'og:site_name', content: siteTitle},\n {property: 'og:description', content: siteDescription},\n {property: 'twitter:site', content: siteTwitter},\n {property: 'twitter:card', content: 'summary'},\n ];\n};\n\nconst createChannelMetaTags = (siteTitle, siteHost, siteTwitter, channel) => {\n const { name, longId } = channel;\n return [\n {property: 'og:title', content: `${name} on ${siteTitle}`},\n {property: 'og:url', content: `${siteHost}/${name}:${longId}`},\n {property: 'og:site_name', content: siteTitle},\n {property: 'og:description', content: `${name}, a channel on ${siteTitle}`},\n {property: 'twitter:site', content: siteTwitter},\n {property: 'twitter:card', content: 'summary'},\n ];\n};\n\nconst createAssetMetaTags = (siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail) => {\n const { claimData } = asset;\n const { contentType } = claimData;\n const embedUrl = `${siteHost}/${claimData.claimId}/${claimData.name}`;\n const showUrl = `${siteHost}/${claimData.claimId}/${claimData.name}`;\n const source = `${siteHost}/${claimData.claimId}/${claimData.name}.${claimData.fileExt}`;\n const ogTitle = claimData.title || claimData.name;\n const ogDescription = claimData.description || defaultDescription;\n const ogThumbnailContentType = determineOgThumbnailContentType(claimData.thumbnail);\n const ogThumbnail = claimData.thumbnail || defaultThumbnail;\n const metaTags = [\n {property: 'og:title', content: ogTitle},\n {property: 'og:url', content: showUrl},\n {property: 'og:site_name', content: siteTitle},\n {property: 'og:description', content: ogDescription},\n {property: 'og:image:width', content: 600},\n {property: 'og:image:height', content: 315},\n {property: 'twitter:site', content: siteTwitter},\n ];\n if (contentType === 'video/mp4' || contentType === 'video/webm') {\n metaTags.push({property: 'og:video', content: source});\n metaTags.push({property: 'og:video:secure_url', content: source});\n metaTags.push({property: 'og:video:type', content: contentType});\n metaTags.push({property: 'og:image', content: ogThumbnail});\n metaTags.push({property: 'og:image:type', content: ogThumbnailContentType});\n metaTags.push({property: 'og:type', content: 'video'});\n metaTags.push({property: 'twitter:card', content: 'player'});\n metaTags.push({property: 'twitter:player', content: embedUrl});\n metaTags.push({property: 'twitter:player:width', content: 600});\n metaTags.push({property: 'twitter:text:player_width', content: 600});\n metaTags.push({property: 'twitter:player:height', content: 337});\n metaTags.push({property: 'twitter:player:stream', content: source});\n metaTags.push({property: 'twitter:player:stream:content_type', content: contentType});\n } else {\n metaTags.push({property: 'og:image', content: source});\n metaTags.push({property: 'og:image:type', content: contentType});\n metaTags.push({property: 'og:type', content: 'article'});\n metaTags.push({property: 'twitter:card', content: 'summary_large_image'});\n }\n return metaTags;\n};\n\nexport const createMetaTags = (siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail) => {\n if (asset) {\n return createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail);\n };\n if (channel) {\n return createChannelMetaTags(siteHost, siteTitle, siteTwitter, channel);\n };\n return createBasicMetaTags(siteDescription, siteHost, siteTitle, siteTwitter);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/metaTags.js","const createBasicCanonicalLink = (page, siteHost) => {\n return `${siteHost}/${page}`;\n};\n\nconst createAssetCanonicalLink = (asset, siteHost) => {\n let channelName, certificateId, name, claimId;\n if (asset.claimData) {\n ({ channelName, certificateId, name, claimId } = asset.claimData);\n };\n if (channelName) {\n return `${siteHost}/${channelName}:${certificateId}/${name}`;\n };\n return `${siteHost}/${claimId}/${name}`;\n};\n\nconst createChannelCanonicalLink = (channel, siteHost) => {\n const { name, longId } = channel;\n return `${siteHost}/${name}:${longId}`;\n};\n\nexport const createCanonicalLink = (asset, channel, page, siteHost) => {\n if (asset) {\n return createAssetCanonicalLink(asset, siteHost);\n }\n if (channel) {\n return createChannelCanonicalLink(channel, siteHost);\n }\n return createBasicCanonicalLink(page, siteHost);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/canonicalLink.js","import React from 'react';\nimport { NavLink, withRouter } from 'react-router-dom';\nimport Logo from 'components/Logo';\nimport NavBarChannelDropdown from 'components/NavBarChannelOptionsDropdown';\nimport request from 'utils/request';\n\nconst VIEW = 'VIEW';\nconst LOGOUT = 'LOGOUT';\n\nclass NavBar extends React.Component {\n constructor (props) {\n super(props);\n this.checkForLoggedInUser = this.checkForLoggedInUser.bind(this);\n this.logoutUser = this.logoutUser.bind(this);\n this.handleSelection = this.handleSelection.bind(this);\n }\n componentDidMount () {\n // check to see if the user is already logged in\n this.checkForLoggedInUser();\n }\n checkForLoggedInUser () {\n const params = {credentials: 'include'};\n request('/user', params)\n .then(({ data }) => {\n this.props.onChannelLogin(data.channelName, data.shortChannelId, data.channelClaimId);\n })\n .catch(error => {\n console.log('/user error:', error.message);\n });\n }\n logoutUser () {\n const params = {credentials: 'include'};\n request('/logout', params)\n .then(() => {\n this.props.onChannelLogout();\n })\n .catch(error => {\n console.log('/logout error', error.message);\n });\n }\n handleSelection (event) {\n const value = event.target.selectedOptions[0].value;\n switch (value) {\n case LOGOUT:\n this.logoutUser();\n break;\n case VIEW:\n // redirect to channel page\n this.props.history.push(`/${this.props.channelName}:${this.props.channelLongId}`);\n break;\n default:\n break;\n }\n }\n render () {\n const { siteDescription } = this.props;\n return (\n
\n
\n \n
\n {siteDescription}\n
\n
\n Publish\n About\n { this.props.channelName ? (\n \n ) : (\n Channel\n )}\n
\n
\n
\n );\n }\n}\n\nexport default withRouter(NavBar);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/NavBar/view.jsx","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nfunction Logo () {\n return (\n \n \n Logo\n Spee.ch logo\n \n \n \n Spee<h\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Logo;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/Logo/index.jsx","import React from 'react';\n\nfunction NavBarChannelDropdown ({ channelName, handleSelection, defaultSelection, VIEW, LOGOUT }) {\n return (\n \n );\n};\n\nexport default NavBarChannelDropdown;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/NavBarChannelOptionsDropdown/index.jsx","module.exports = require(\"cross-fetch/polyfill\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"cross-fetch/polyfill\"\n// module id = 92\n// module chunks = 0","import {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n disabled: publish.disabled,\n file : publish.file,\n status : publish.status.status,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTool/index.js","import React from 'react';\nimport Dropzone from 'containers/Dropzone';\nimport PublishDetails from 'containers/PublishDetails';\nimport PublishStatus from 'containers/PublishStatus';\nimport PublishDisabledMessage from 'containers/PublishDisabledMessage';\n\nclass PublishTool extends React.Component {\n render () {\n if (this.props.disabled) {\n console.log('publish is disabled');\n return (\n \n );\n } else {\n console.log('publish is not disabled');\n if (this.props.file) {\n if (this.props.status) {\n return (\n \n );\n } else {\n return ;\n }\n }\n return ;\n }\n }\n};\n\nexport default PublishTool;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTool/view.jsx","import React from 'react';\nimport { validateFile } from 'utils/file';\nimport PublishPreview from 'components/PublishPreview';\n\nclass Dropzone extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n dragOver : false,\n mouseOver : false,\n dimPreview: false,\n };\n this.handleDrop = this.handleDrop.bind(this);\n this.handleDragOver = this.handleDragOver.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleDragEnter = this.handleDragEnter.bind(this);\n this.handleDragLeave = this.handleDragLeave.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleClick = this.handleClick.bind(this);\n this.handleFileInput = this.handleFileInput.bind(this);\n this.chooseFile = this.chooseFile.bind(this);\n }\n handleDrop (event) {\n event.preventDefault();\n this.setState({dragOver: false});\n // if dropped items aren't files, reject them\n const dt = event.dataTransfer;\n if (dt.items) {\n if (dt.items[0].kind === 'file') {\n const droppedFile = dt.items[0].getAsFile();\n this.chooseFile(droppedFile);\n }\n }\n }\n handleDragOver (event) {\n event.preventDefault();\n }\n handleDragEnd (event) {\n var dt = event.dataTransfer;\n if (dt.items) {\n for (var i = 0; i < dt.items.length; i++) {\n dt.items.remove(i);\n }\n } else {\n event.dataTransfer.clearData();\n }\n }\n handleDragEnter () {\n this.setState({dragOver: true, dimPreview: true});\n }\n handleDragLeave () {\n this.setState({dragOver: false, dimPreview: false});\n }\n handleMouseEnter () {\n this.setState({mouseOver: true, dimPreview: true});\n }\n handleMouseLeave () {\n this.setState({mouseOver: false, dimPreview: false});\n }\n handleClick (event) {\n event.preventDefault();\n document.getElementById('file_input').click();\n }\n handleFileInput (event) {\n event.preventDefault();\n const fileList = event.target.files;\n this.chooseFile(fileList[0]);\n }\n chooseFile (file) {\n if (file) {\n try {\n validateFile(file); // validate the file's name, type, and size\n } catch (error) {\n return this.props.setFileError(error.message);\n }\n // stage it so it will be ready when the publish button is clicked\n this.props.selectFile(file);\n }\n }\n render () {\n return (\n
\n
\n \n
\n
\n {this.props.file ? (\n
\n \n
\n { this.state.dragOver ? (\n
\n

Drop it.

\n
\n ) : (\n null\n )}\n { this.state.mouseOver ? (\n
\n

{this.props.fileError}

\n

Drag & drop image or video here to publish

\n

OR

\n

CHOOSE FILE

\n
\n ) : (\n null\n )}\n
\n
\n ) : (\n
\n { this.state.dragOver ? (\n
\n

Drop it.

\n
\n ) : (\n
\n

{this.props.fileError}

\n

Drag & drop image or video here to publish

\n

OR

\n

CHOOSE FILE

\n
\n )}\n
\n )}\n
\n
\n );\n }\n};\n\nexport default Dropzone;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/Dropzone/view.jsx","module.exports = {\n validateFile (file) {\n if (!file) {\n throw new Error('no file provided');\n }\n if (/'/.test(file.name)) {\n throw new Error('apostrophes are not allowed in the file name');\n }\n // validate size and type\n switch (file.type) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n if (file.size > 10000000) {\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n throw new Error('Sorry, GIFs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n throw new Error(file.type + ' is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/file.js","import React from 'react';\nimport PropTypes from 'prop-types';\n\nclass PublishPreview extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n imgSource : '',\n defaultThumbnail: '/assets/img/video_thumb_default.png',\n };\n }\n componentDidMount () {\n this.setPreviewImageSource(this.props.file);\n }\n componentWillReceiveProps (newProps) {\n if (newProps.file !== this.props.file) {\n this.setPreviewImageSource(newProps.file);\n }\n if (newProps.thumbnail !== this.props.thumbnail) {\n if (newProps.thumbnail) {\n this.setPreviewImageSourceFromFile(newProps.thumbnail);\n } else {\n this.setState({imgSource: this.state.defaultThumbnail});\n }\n }\n }\n setPreviewImageSourceFromFile (file) {\n const previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = () => {\n this.setState({imgSource: previewReader.result});\n };\n }\n setPreviewImageSource (file) {\n if (file.type !== 'video/mp4') {\n this.setPreviewImageSourceFromFile(file);\n } else {\n if (this.props.thumbnail) {\n this.setPreviewImageSourceFromFile(this.props.thumbnail);\n }\n this.setState({imgSource: this.state.defaultThumbnail});\n }\n }\n render () {\n return (\n \n );\n }\n};\n\nPublishPreview.propTypes = {\n dimPreview: PropTypes.bool.isRequired,\n file : PropTypes.object.isRequired,\n thumbnail : PropTypes.object,\n};\n\nexport default PublishPreview;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/PublishPreview/index.jsx","import {connect} from 'react-redux';\nimport {clearFile, startPublish} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, publish }) => {\n return {\n file: publish.file,\n };\n};\n\nconst mapDispatchToProps = {\n clearFile,\n startPublish,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDetails/index.js","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport Dropzone from 'containers/Dropzone';\nimport PublishTitleInput from 'containers/PublishTitleInput';\nimport PublishUrlInput from 'containers/PublishUrlInput';\nimport PublishThumbnailInput from 'containers/PublishThumbnailInput';\nimport PublishMetadataInputs from 'containers/PublishMetadataInputs';\nimport ChannelSelect from 'containers/ChannelSelect';\n\nclass PublishDetails extends React.Component {\n constructor (props) {\n super(props)\n this.onPublishSubmit = this.onPublishSubmit.bind(this);\n }\n onPublishSubmit () {\n this.props.startPublish(this.props.history);\n }\n render () {\n return (\n
\n
\n \n
\n {/* left column */}\n
\n
\n \n
\n
\n {/* right column */}\n
\n
\n
\n \n
\n
\n \n
\n { (this.props.file.type === 'video/mp4') && (\n
\n \n
\n )}\n
\n \n
\n
\n \n
\n
\n \n
\n
\n

By clicking 'Publish', you affirm that you have the rights to publish this content to the LBRY network, and that you understand the properties of publishing it to a decentralized, user-controlled network. Read more.

\n
\n
\n
\n
\n );\n }\n};\n\nexport default withRouter(PublishDetails);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDetails/view.jsx","import {connect} from 'react-redux';\nimport {updateMetadata} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n title: publish.metadata.title,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onMetadataChange: (name, value) => {\n dispatch(updateMetadata(name, value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTitleInput/index.js","import React from 'react';\n\nclass PublishTitleInput extends React.Component {\n constructor (props) {\n super(props);\n this.handleInput = this.handleInput.bind(this);\n }\n handleInput (e) {\n const name = e.target.name;\n const value = e.target.value;\n this.props.onMetadataChange(name, value);\n }\n render () {\n return (\n \n );\n }\n}\n\nexport default PublishTitleInput;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTitleInput/view.jsx","import {updateClaim, updateError} from 'actions/publish';\nimport {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, publish }) => {\n return {\n loggedInChannelName : channel.loggedInChannel.name,\n loggedInChannelShortId: channel.loggedInChannel.shortId,\n fileName : publish.file.name,\n publishInChannel : publish.publishInChannel,\n selectedChannel : publish.selectedChannel,\n claim : publish.claim,\n urlError : publish.error.url,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onClaimChange: (value) => {\n dispatch(updateClaim(value));\n dispatch(updateError('publishSubmit', null));\n },\n onUrlError: (value) => {\n dispatch(updateError('url', value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishUrlInput/index.js","import React from 'react';\nimport request from 'utils/request';\nimport UrlMiddle from 'components/PublishUrlMiddleDisplay';\n\nclass PublishUrlInput extends React.Component {\n constructor (props) {\n super(props);\n this.handleInput = this.handleInput.bind(this);\n }\n componentDidMount () {\n const { claim, fileName } = this.props;\n if (!claim) {\n this.setClaimName(fileName);\n }\n }\n componentWillReceiveProps ({ claim, fileName }) {\n // if a new file was chosen, update the claim name\n if (fileName !== this.props.fileName) {\n return this.setClaimName(fileName);\n }\n // if the claim has updated, check its availability\n if (claim !== this.props.claim) {\n this.validateClaim(claim);\n }\n }\n handleInput (event) {\n let value = event.target.value;\n value = this.cleanseInput(value);\n // update the state\n this.props.onClaimChange(value);\n }\n cleanseInput (input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n setClaimName (fileName) {\n const fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.'));\n const cleanClaimName = this.cleanseInput(fileNameWithoutEnding);\n this.props.onClaimChange(cleanClaimName);\n }\n validateClaim (claim) {\n if (!claim) {\n return this.props.onUrlError('Enter a url above');\n }\n request(`/api/claim/availability/${claim}`)\n .then(() => {\n this.props.onUrlError(null);\n })\n .catch((error) => {\n this.props.onUrlError(error.message);\n });\n }\n render () {\n const { claim, loggedInChannelName, loggedInChannelShortId, publishInChannel, selectedChannel, urlError } = this.props;\n return (\n
\n
\n spee.ch / \n \n \n { (claim && !urlError) && {'\\u2713'} }\n { urlError && {'\\u2716'} }\n
\n
\n { urlError ? (\n

{urlError}

\n ) : (\n

Choose a custom url

\n )}\n
\n
\n );\n }\n}\n\nexport default PublishUrlInput;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishUrlInput/view.jsx","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction UrlMiddle ({publishInChannel, selectedChannel, loggedInChannelName, loggedInChannelShortId}) {\n if (publishInChannel) {\n if (selectedChannel === loggedInChannelName) {\n return {loggedInChannelName}:{loggedInChannelShortId} /;\n }\n return @channelSelect a channel below /;\n }\n return (\n xyzThis will be a random id /\n );\n}\n\nUrlMiddle.propTypes = {\n publishInChannel : PropTypes.bool.isRequired,\n loggedInChannelName : PropTypes.string,\n loggedInChannelShortId: PropTypes.string,\n};\n\nexport default UrlMiddle;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/PublishUrlMiddleDisplay/index.jsx","import { connect } from 'react-redux';\nimport { onNewThumbnail } from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish: { file } }) => {\n return {\n file,\n };\n};\n\nconst mapDispatchToProps = {\n onNewThumbnail,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishThumbnailInput/index.js","import React from 'react';\n\nfunction dataURItoBlob(dataURI) {\n // convert base64/URLEncoded data component to raw binary data held in a string\n let byteString = atob(dataURI.split(',')[1]);\n // separate out the mime component\n let mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n // write the bytes of the string to a typed array\n let ia = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n return new Blob([ia], {type: mimeString});\n}\n\nclass PublishThumbnailInput extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n videoSource : null,\n error : null,\n sliderMinRange: 1,\n sliderMaxRange: null,\n sliderValue : null,\n };\n this.handleVideoLoadedData = this.handleVideoLoadedData.bind(this);\n this.handleSliderChange = this.handleSliderChange.bind(this);\n this.createThumbnail = this.createThumbnail.bind(this);\n }\n componentDidMount () {\n const { file } = this.props;\n this.setVideoSource(file);\n }\n componentWillReceiveProps (nextProps) {\n // if file changes\n if (nextProps.file && nextProps.file !== this.props.file) {\n const { file } = nextProps;\n this.setVideoSource(file);\n };\n }\n setVideoSource (file) {\n const previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = () => {\n const dataUri = previewReader.result;\n const blob = dataURItoBlob(dataUri);\n const videoSource = URL.createObjectURL(blob);\n this.setState({ videoSource });\n };\n }\n handleVideoLoadedData (event) {\n const duration = event.target.duration;\n const totalMinutes = Math.floor(duration / 60);\n const totalSeconds = Math.floor(duration % 60);\n // set the slider\n this.setState({\n sliderMaxRange: duration * 100,\n sliderValue : duration * 100 / 2,\n totalMinutes,\n totalSeconds,\n });\n // update the current time of the video\n let video = document.getElementById('video-thumb-player');\n video.currentTime = duration / 2;\n }\n handleSliderChange (event) {\n const value = parseInt(event.target.value);\n // update the slider value\n this.setState({\n sliderValue: value,\n });\n // update the current time of the video\n let video = document.getElementById('video-thumb-player');\n video.currentTime = value / 100;\n }\n createThumbnail () {\n // take a snapshot\n let video = document.getElementById('video-thumb-player');\n let canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);\n const dataUrl = canvas.toDataURL();\n const blob = dataURItoBlob(dataUrl);\n const snapshot = new File([blob], `thumbnail.png`, {\n type: 'image/png',\n });\n // set the thumbnail in redux store\n if (snapshot) {\n this.props.onNewThumbnail(snapshot);\n }\n }\n render () {\n const { error, videoSource, sliderMinRange, sliderMaxRange, sliderValue, totalMinutes, totalSeconds } = this.state;\n return (\n
\n \n \n {\n sliderValue ? (\n
\n
\n 0'00\"\n {totalMinutes}'{totalSeconds}\"\n
\n
\n \n
\n
\n ) : (\n

loading...

\n )\n }\n { error ? (\n

{error}

\n ) : (\n

Use slider to set thumbnail

\n )}\n
\n );\n }\n}\n\nexport default PublishThumbnailInput;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishThumbnailInput/view.jsx","import {connect} from 'react-redux';\nimport {updateMetadata, toggleMetadataInputs} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n showMetadataInputs: publish.showMetadataInputs,\n description : publish.metadata.description,\n license : publish.metadata.license,\n nsfw : publish.metadata.nsfw,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onMetadataChange: (name, value) => {\n dispatch(updateMetadata(name, value));\n },\n onToggleMetadataInputs: (value) => {\n dispatch(toggleMetadataInputs(value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishMetadataInputs/index.js","import React from 'react';\nimport ExpandingTextArea from 'components/ExpandingTextArea';\n\nclass PublishMetadataInputs extends React.Component {\n constructor (props) {\n super(props);\n this.toggleShowInputs = this.toggleShowInputs.bind(this);\n this.handleInput = this.handleInput.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n }\n toggleShowInputs () {\n this.props.onToggleMetadataInputs(!this.props.showMetadataInputs);\n }\n handleInput (event) {\n const target = event.target;\n const value = target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n this.props.onMetadataChange(name, value);\n }\n handleSelect (event) {\n const name = event.target.name;\n const selectedOption = event.target.selectedOptions[0].value;\n this.props.onMetadataChange(name, selectedOption);\n }\n render () {\n return (\n
\n {this.props.showMetadataInputs && (\n
\n
\n
\n \n
\n \n
\n
\n\n
\n
\n \n
\n \n
\n
\n\n
\n
\n \n
\n \n
\n
\n
\n )}\n \n
\n );\n }\n}\n\nexport default PublishMetadataInputs;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishMetadataInputs/view.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nclass ExpandingTextarea extends Component {\n constructor (props) {\n super(props);\n this._handleChange = this._handleChange.bind(this);\n }\n componentDidMount () {\n this.adjustTextarea({});\n }\n _handleChange (event) {\n const { onChange } = this.props;\n if (onChange) onChange(event);\n this.adjustTextarea(event);\n }\n adjustTextarea ({ target = this.el }) {\n target.style.height = 0;\n target.style.height = `${target.scrollHeight}px`;\n }\n render () {\n const { ...rest } = this.props;\n return (\n this.el = x}\n onChange={this._handleChange}\n />\n );\n }\n}\n\nExpandingTextarea.propTypes = {\n onChange: PropTypes.func,\n};\n\nexport default ExpandingTextarea;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/ExpandingTextArea/index.jsx","import {connect} from 'react-redux';\nimport {setPublishInChannel, updateSelectedChannel, updateError} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, publish }) => {\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n publishInChannel : publish.publishInChannel,\n selectedChannel : publish.selectedChannel,\n channelError : publish.error.channel,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onPublishInChannelChange: (value) => {\n dispatch(updateError('channel', null));\n dispatch(setPublishInChannel(value));\n },\n onChannelSelect: (value) => {\n dispatch(updateError('channel', null));\n dispatch(updateSelectedChannel(value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelSelect/index.js","import React from 'react';\nimport ChannelLoginForm from 'containers/ChannelLoginForm';\nimport ChannelCreateForm from 'containers/ChannelCreateForm';\nimport * as states from 'constants/publish_channel_select_states';\n\nclass ChannelSelect extends React.Component {\n constructor (props) {\n super(props);\n this.toggleAnonymousPublish = this.toggleAnonymousPublish.bind(this);\n this.handleSelection = this.handleSelection.bind(this);\n }\n toggleAnonymousPublish (event) {\n const value = event.target.value;\n if (value === 'anonymous') {\n this.props.onPublishInChannelChange(false);\n } else {\n this.props.onPublishInChannelChange(true);\n }\n }\n handleSelection (event) {\n const selectedOption = event.target.selectedOptions[0].value;\n this.props.onChannelSelect(selectedOption);\n }\n render () {\n return (\n
\n
\n
\n \n \n
\n
\n \n \n
\n { this.props.channelError ? (\n

{this.props.channelError}

\n ) : (\n

Publish anonymously or in a channel

\n )}\n
\n { this.props.publishInChannel && (\n
\n
\n \n
\n \n
\n { (this.props.selectedChannel === states.LOGIN) && }\n { (this.props.selectedChannel === states.CREATE) && }\n
\n )}\n
\n );\n }\n}\n\nexport default ChannelSelect;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelSelect/view.jsx","import React from 'react';\nimport request from 'utils/request';\n\nclass ChannelLoginForm extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n error : null,\n name : '',\n password: '',\n };\n this.handleInput = this.handleInput.bind(this);\n this.loginToChannel = this.loginToChannel.bind(this);\n }\n handleInput (event) {\n const name = event.target.name;\n const value = event.target.value;\n this.setState({[name]: value});\n }\n loginToChannel (event) {\n event.preventDefault();\n const params = {\n method : 'POST',\n body : JSON.stringify({username: this.state.name, password: this.state.password}),\n headers: new Headers({\n 'Content-Type': 'application/json',\n }),\n credentials: 'include',\n };\n request('login', params)\n .then(({success, channelName, shortChannelId, channelClaimId, message}) => {\n if (success) {\n this.props.onChannelLogin(channelName, shortChannelId, channelClaimId);\n } else {\n this.setState({'error': message});\n };\n })\n .catch(error => {\n if (error.message) {\n this.setState({'error': error.message});\n } else {\n this.setState({'error': error});\n }\n });\n }\n render () {\n return (\n
\n
\n
\n \n
\n
\n @\n \n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n { this.state.error ? (\n

{this.state.error}

\n ) : (\n

Enter the name and password for your channel

\n )}\n
\n \n
\n
\n );\n }\n}\n\nexport default ChannelLoginForm;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelLoginForm/view.jsx","import React from 'react';\nimport ProgressBar from 'components/ProgressBar';\nimport request from 'utils/request';\n\nclass ChannelCreateForm extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n error : null,\n channel : '',\n password: '',\n status : null,\n };\n this.handleChannelInput = this.handleChannelInput.bind(this);\n this.handleInput = this.handleInput.bind(this);\n this.createChannel = this.createChannel.bind(this);\n }\n cleanseChannelInput (input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n handleChannelInput (event) {\n let value = event.target.value;\n value = this.cleanseChannelInput(value);\n this.setState({channel: value});\n if (value) {\n this.updateIsChannelAvailable(value);\n } else {\n this.setState({error: 'Please enter a channel name'});\n }\n }\n handleInput (event) {\n const name = event.target.name;\n const value = event.target.value;\n this.setState({[name]: value});\n }\n updateIsChannelAvailable (channel) {\n const channelWithAtSymbol = `@${channel}`;\n request(`/api/channel/availability/${channelWithAtSymbol}`)\n .then(() => {\n this.setState({'error': null});\n })\n .catch((error) => {\n this.setState({'error': error.message});\n });\n }\n checkIsChannelAvailable (channel) {\n const channelWithAtSymbol = `@${channel}`;\n return request(`/api/channel/availability/${channelWithAtSymbol}`);\n }\n checkIsPasswordProvided (password) {\n return new Promise((resolve, reject) => {\n if (!password || password.length < 1) {\n return reject(new Error('Please provide a password'));\n }\n resolve();\n });\n }\n makePublishChannelRequest (username, password) {\n const params = {\n method : 'POST',\n body : JSON.stringify({username, password}),\n headers: new Headers({\n 'Content-Type': 'application/json',\n }),\n credentials: 'include',\n };\n return new Promise((resolve, reject) => {\n request('/signup', params)\n .then(result => {\n return resolve(result);\n })\n .catch(error => {\n reject(new Error(`Unfortunately, we encountered an error while creating your channel. Please let us know in Discord! ${error.message}`));\n });\n });\n }\n createChannel (event) {\n event.preventDefault();\n this.checkIsPasswordProvided(this.state.password)\n .then(() => {\n return this.checkIsChannelAvailable(this.state.channel);\n })\n .then(() => {\n this.setState({status: 'We are publishing your new channel. Sit tight...'});\n return this.makePublishChannelRequest(this.state.channel, this.state.password);\n })\n .then(result => {\n this.setState({status: null});\n this.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId);\n })\n .catch((error) => {\n if (error.message) {\n this.setState({'error': error.message, status: null});\n } else {\n this.setState({'error': error, status: null});\n };\n });\n }\n render () {\n return (\n
\n { !this.state.status ? (\n
\n
\n
\n \n
\n
\n @\n \n { (this.state.channel && !this.state.error) && {'\\u2713'} }\n { this.state.error && {'\\u2716'} }\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n {this.state.error ? (\n

{this.state.error}

\n ) : (\n

Choose a name and password for your channel

\n )}\n
\n \n
\n
\n ) : (\n
\n

{this.state.status}

\n \n
\n )}\n
\n );\n }\n}\n\nexport default ChannelCreateForm;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelCreateForm/view.jsx","import React from 'react';\n\nconst ActiveStatusBar = () => {\n return | ;\n};\n\nexport default ActiveStatusBar;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/ActiveStatusBar/index.jsx","import React from 'react';\n\nconst InactiveStatusBar = () => {\n return | ;\n};\n\nexport default InactiveStatusBar;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/InactiveStatusBar/index.jsx","import {connect} from 'react-redux';\nimport {clearFile} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n status : publish.status.status,\n message: publish.status.message,\n };\n};\n\nconst mapDispatchToProps = {\n clearFile,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishStatus/index.js","import React from 'react';\nimport ProgressBar from 'components/ProgressBar';\nimport * as publishStates from 'constants/publish_claim_states';\n\nclass PublishStatus extends React.Component {\n render () {\n const { status, message, clearFile } = this.props;\n return (\n
\n {status === publishStates.LOAD_START &&\n
\n

File is loading to server

\n

0%

\n
\n }\n {status === publishStates.LOADING &&\n
\n
\n

File is loading to server

\n

{message}

\n
\n
\n }\n {status === publishStates.PUBLISHING &&\n
\n

Upload complete. Your file is now being published on the blockchain...

\n \n

Curious what magic is happening here? Learn more.

\n
\n }\n {status === publishStates.SUCCESS &&\n
\n

Your publish is complete! You are being redirected to it now.

\n

If you are not automatically redirected, click here.

\n
\n }\n {status === publishStates.FAILED &&\n
\n

Something went wrong...

\n

{message}

\n

For help, post the above error text in the #speech channel on the lbry discord

\n \n
\n }\n
\n );\n }\n};\n\nexport default PublishStatus;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishStatus/view.jsx","export const LOAD_START = 'LOAD_START';\nexport const LOADING = 'LOADING';\nexport const PUBLISHING = 'PUBLISHING';\nexport const SUCCESS = 'SUCCESS';\nexport const FAILED = 'FAILED';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/publish_claim_states.js","import {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n message: publish.disabledMessage,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDisabledMessage/index.js","import React from 'react';\n\nclass PublishDisabledMessage extends React.Component {\n render () {\n const message = this.props.message;\n console.log('this.props.message:', message);\n return (\n
\n

Publishing is currently disabled.

\n

{message}

\n
\n );\n }\n}\n\nexport default PublishDisabledMessage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDisabledMessage/view.jsx","import React from 'react';\nimport NavBar from 'containers/NavBar';\nimport SEO from 'components/SEO';\n\nclass AboutPage extends React.Component {\n render () {\n return (\n
\n \n \n
\n
\n
\n

Spee.ch is an open-source project. Please contribute to the existing site, or fork it and make your own.

\n

TWITTER

\n

GITHUB

\n

DISCORD CHANNEL

\n

DOCUMENTATION

\n
\n
\n
\n

Spee.ch is a media-hosting site that reads from and publishes content to the LBRY blockchain.

\n

Spee.ch is a hosting service, but with the added benefit that it stores your content on a decentralized network of computers -- the LBRY network. This means that your images are stored in multiple locations without a single point of failure.

\n

Contribute

\n

If you have an idea for your own spee.ch-like site on top of LBRY, fork our github repo and go to town!

\n

If you want to improve spee.ch, join our discord channel or solve one of our github issues.

\n
\n
\n
\n
\n );\n }\n};\n\nexport default AboutPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/AboutPage/index.jsx","import {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ channel }) => {\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/LoginPage/index.js","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport SEO from 'components/SEO';\nimport NavBar from 'containers/NavBar';\nimport ChannelLoginForm from 'containers/ChannelLoginForm';\nimport ChannelCreateForm from 'containers/ChannelCreateForm';\n\nclass LoginPage extends React.Component {\n componentWillReceiveProps (newProps) {\n // re-route the user to the homepage if the user is logged in\n if (newProps.loggedInChannelName !== this.props.loggedInChannelName) {\n this.props.history.push(`/`);\n }\n }\n render () {\n return (\n
\n \n \n
\n
\n
\n

Channels allow you to publish and group content under an identity. You can create a channel for yourself, or share one with like-minded friends. You can create 1 channel, or 100, so whether you're documenting important events, or making a public repository for cat gifs (password: '1234'), try creating a channel for it!

\n
\n
\n
\n

Log in to an existing channel:

\n \n

Create a brand new channel:

\n \n
\n
\n
\n
\n );\n }\n};\n\nexport default withRouter(LoginPage);\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/LoginPage/view.jsx","import { connect } from 'react-redux';\nimport { onHandleShowPageUri } from 'actions/show';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n return {\n error : show.request.error,\n requestType: show.request.type,\n };\n};\n\nconst mapDispatchToProps = {\n onHandleShowPageUri,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/ShowPage/index.js","import React from 'react';\nimport ErrorPage from 'pages/ErrorPage';\nimport ShowAssetLite from 'containers/ShowAssetLite';\nimport ShowAssetDetails from 'containers/ShowAssetDetails';\nimport ShowChannel from 'containers/ShowChannel';\n\nimport { CHANNEL, ASSET_LITE, ASSET_DETAILS } from 'constants/show_request_types';\n\nclass ShowPage extends React.Component {\n componentDidMount () {\n this.props.onHandleShowPageUri(this.props.match.params);\n }\n componentWillReceiveProps (nextProps) {\n if (nextProps.match.params !== this.props.match.params) {\n this.props.onHandleShowPageUri(nextProps.match.params);\n }\n }\n render () {\n const { error, requestType } = this.props;\n if (error) {\n return (\n \n );\n }\n switch (requestType) {\n case CHANNEL:\n return ;\n case ASSET_LITE:\n return ;\n case ASSET_DETAILS:\n return ;\n default:\n return

loading...

;\n }\n }\n};\n\nexport default ShowPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/ShowPage/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select request info\n const requestId = show.request.id;\n // select asset info\n let asset;\n const request = show.requestList[requestId] || null;\n const assetList = show.assetList;\n if (request && assetList) {\n const assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetLite/index.js","import React from 'react';\nimport SEO from 'components/SEO';\nimport { Link } from 'react-router-dom';\nimport AssetDisplay from 'containers/AssetDisplay';\n\nclass ShowLite extends React.Component {\n render () {\n const { asset } = this.props;\n if (asset) {\n const { name, claimId } = asset.claimData;\n return (\n
\n \n \n hosted\n via Spee.ch\n
\n );\n }\n return (\n
\n

loading asset data...

\n
\n );\n }\n};\n\nexport default ShowLite;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetLite/view.jsx","import React from 'react';\nimport ProgressBar from 'components/ProgressBar';\nimport { LOCAL_CHECK, UNAVAILABLE, ERROR, AVAILABLE } from 'constants/asset_display_states';\n\nclass AssetDisplay extends React.Component {\n componentDidMount () {\n const { asset: { claimData: { name, claimId } } } = this.props;\n this.props.onFileRequest(name, claimId);\n }\n render () {\n const { status, error, asset: { claimData: { name, claimId, contentType, fileExt, thumbnail } } } = this.props;\n return (\n
\n {(status === LOCAL_CHECK) &&\n
\n

Checking to see if Spee.ch has your asset locally...

\n
\n }\n {(status === UNAVAILABLE) &&\n
\n

Sit tight, we're searching the LBRY blockchain for your asset!

\n \n

Curious what magic is happening here? Learn more.

\n
\n }\n {(status === ERROR) &&\n
\n

Unfortunately, we couldn't download your asset from LBRY. You can help us out by sharing the below error message in the LBRY discord.

\n

{error}

\n
\n }\n {(status === AVAILABLE) &&\n (() => {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n return (\n \n );\n case 'image/gif':\n return (\n \n );\n case 'video/mp4':\n return (\n \n );\n default:\n return (\n

Unsupported file type

\n );\n }\n })()\n }\n
\n );\n }\n};\n\nexport default AssetDisplay;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetDisplay/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select request info\n const requestId = show.request.id;\n // select asset info\n let asset;\n const request = show.requestList[requestId] || null;\n const assetList = show.assetList;\n if (request && assetList) {\n const assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetDetails/index.js","import React from 'react';\nimport SEO from 'components/SEO';\nimport NavBar from 'containers/NavBar';\nimport ErrorPage from 'pages/ErrorPage';\nimport AssetTitle from 'containers/AssetTitle';\nimport AssetDisplay from 'containers/AssetDisplay';\nimport AssetInfo from 'containers/AssetInfo';\n\nclass ShowAssetDetails extends React.Component {\n render () {\n const { asset } = this.props;\n if (asset) {\n const { claimData: { name } } = asset;\n return (\n
\n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n );\n };\n return (\n \n );\n }\n};\n\nexport default ShowAssetDetails;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetDetails/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\nimport { selectAsset } from 'selectors/show';\n\nconst mapStateToProps = ({ show }) => {\n const { claimData: { title } } = selectAsset(show);\n return {\n title,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetTitle/index.js","import React from 'react';\n\nconst AssetTitle = ({ title }) => {\n return (\n
\n {title}\n
\n );\n};\n\nexport default AssetTitle;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetTitle/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\nimport { selectAsset } from 'selectors/show';\n\nconst mapStateToProps = ({ show }) => {\n // select asset\n const asset = selectAsset(show);\n // return props\n return {\n asset,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetInfo/index.js","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nclass AssetInfo extends React.Component {\n constructor (props) {\n super(props);\n this.copyToClipboard = this.copyToClipboard.bind(this);\n }\n copyToClipboard (event) {\n var elementToCopy = event.target.dataset.elementtocopy;\n var element = document.getElementById(elementToCopy);\n element.select();\n try {\n document.execCommand('copy');\n } catch (err) {\n this.setState({error: 'Oops, unable to copy'});\n }\n }\n render () {\n const { asset: { shortId, claimData : { channelName, certificateId, description, name, claimId, fileExt, contentType, thumbnail, host } } } = this.props;\n return (\n
\n {channelName &&\n
\n
\n Channel:\n
\n
\n {channelName}\n
\n
\n }\n\n {description &&\n
\n {description}\n
\n }\n\n
\n
\n
\n Share:\n
\n
\n \n twitter\n facebook\n tumblr\n reddit\n
\n
\n
\n
\n\n
\n \n );\n }\n};\n\nexport default AssetInfo;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetInfo/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select request info\n const requestId = show.request.id;\n // select request\n const previousRequest = show.requestList[requestId] || null;\n // select channel\n let channel;\n if (previousRequest) {\n const channelKey = previousRequest.key;\n channel = show.channelList[channelKey] || null;\n }\n return {\n channel,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowChannel/index.js","import React from 'react';\nimport SEO from 'components/SEO';\nimport ErrorPage from 'pages/ErrorPage';\nimport NavBar from 'containers/NavBar';\nimport ChannelClaimsDisplay from 'containers/ChannelClaimsDisplay';\n\nclass ShowChannel extends React.Component {\n render () {\n const { channel } = this.props;\n if (channel) {\n const { name, longId, shortId } = channel;\n return (\n
\n \n \n
\n
\n

channel name: {name}

\n

full channel id: {longId}

\n

short channel id: {shortId}

\n
\n
\n \n
\n
\n
\n );\n };\n return (\n \n );\n }\n};\n\nexport default ShowChannel;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowChannel/view.jsx","import { connect } from 'react-redux';\nimport { onUpdateChannelClaims } from 'actions/show';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select channel key\n const request = show.requestList[show.request.id];\n const channelKey = request.key;\n // select channel claims\n const channel = show.channelList[channelKey] || null;\n // return props\n return {\n channelKey,\n channel,\n };\n};\n\nconst mapDispatchToProps = {\n onUpdateChannelClaims,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelClaimsDisplay/index.js","import React from 'react';\nimport AssetPreview from 'components/AssetPreview';\n\nclass ChannelClaimsDisplay extends React.Component {\n constructor (props) {\n super(props);\n this.showNextResultsPage = this.showNextResultsPage.bind(this);\n this.showPreviousResultsPage = this.showPreviousResultsPage.bind(this);\n }\n showPreviousResultsPage () {\n const { channel: { claimsData: { currentPage } } } = this.props;\n const previousPage = parseInt(currentPage) - 1;\n this.showNewPage(previousPage);\n }\n showNextResultsPage () {\n const { channel: { claimsData: { currentPage } } } = this.props;\n const nextPage = parseInt(currentPage) + 1;\n this.showNewPage(nextPage);\n }\n showNewPage (page) {\n const { channelKey, channel: { name, longId } } = this.props;\n this.props.onUpdateChannelClaims(channelKey, name, longId, page);\n }\n render () {\n const { channel: { claimsData: { claims, currentPage, totalPages } } } = this.props;\n return (\n
\n {(claims.length > 0) ? (\n
\n {claims.map((claim, index) => )}\n
\n {(currentPage > 1) &&\n \n }\n {(currentPage < totalPages) &&\n \n }\n
\n
\n ) : (\n

There are no claims in this channel

\n )}\n
\n );\n }\n};\n\nexport default ChannelClaimsDisplay;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelClaimsDisplay/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({site: {defaults: { defaultThumbnail }}}) => {\n return {\n defaultThumbnail,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/AssetPreview/index.js","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nconst AssetPreview = ({ defaultThumbnail, claimData: { name, claimId, fileExt, contentType, thumbnail } }) => {\n const directSourceLink = `${claimId}/${name}.${fileExt}`;\n const showUrlLink = `/${claimId}/${name}`;\n return (\n
\n \n {(() => {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n case 'image/gif':\n return (\n \n );\n case 'video/mp4':\n return (\n \n );\n default:\n return (\n

unsupported file type

\n );\n }\n })()}\n \n
\n );\n};\n\nexport default AssetPreview;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/AssetPreview/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ site: { host, title } }) => {\n return {\n host,\n title,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/FourOhFourPage/index.jsx","import React from 'react';\nimport NavBar from 'containers/NavBar';\nimport Helmet from 'react-helmet';\n\nclass FourOhForPage extends React.Component {\n render () {\n const {title, host} = this.props;\n return (\n
\n \n {title} - 404\n \n \n \n
\n

404

\n

That page does not exist

\n
\n
\n );\n }\n};\n\nexport default FourOhForPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/FourOhFourPage/view.jsx","const { sendGAServeEvent } = require('../helpers/googleAnalytics');\nconst { determineResponseType, flipClaimNameAndIdForBackwardsCompatibility, logRequestData, getClaimIdAndServeAsset } = require('../helpers/serveHelpers.js');\nconst lbryUri = require('../helpers/lbryUri.js');\nconst handleShowRender = require('../helpers/handleShowRender.jsx');\nconst SERVE = 'SERVE';\n\nmodule.exports = (app) => {\n // route to serve a specific asset using the channel or claim id\n app.get('/:identifier/:claim', (req, res) => {\n const { headers, ip, originalUrl, params } = req;\n // decide if this is a show request\n let hasFileExtension;\n try {\n ({ hasFileExtension } = lbryUri.parseModifier(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n let responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n let claimName;\n try {\n ({ claimName } = lbryUri.parseClaim(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n // parse the identifier\n let isChannel, channelName, channelClaimId, claimId;\n try {\n ({ isChannel, channelName, channelClaimId, claimId } = lbryUri.parseIdentifier(params.identifier));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n if (!isChannel) {\n [claimId, claimName] = flipClaimNameAndIdForBackwardsCompatibility(claimId, claimName);\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, channelName, claimId);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res);\n });\n // route to serve the winning asset at a claim or a channel page\n app.get('/:claim', (req, res) => {\n const { headers, ip, originalUrl, params } = req;\n // decide if this is a show request\n let hasFileExtension;\n try {\n ({ hasFileExtension } = lbryUri.parseModifier(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n let responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n let claimName;\n try {\n ({claimName} = lbryUri.parseClaim(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, null, null);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(null, null, claimName, null, originalUrl, ip, res);\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/asset-routes.js","const logger = require('winston');\nconst { getClaimId, getLocalFileRecord } = require('../controllers/serveController.js');\nconst { handleErrorResponse } = require('./errorHandlers.js');\n\nconst SERVE = 'SERVE';\nconst SHOW = 'SHOW';\nconst NO_FILE = 'NO_FILE';\nconst NO_CHANNEL = 'NO_CHANNEL';\nconst NO_CLAIM = 'NO_CLAIM';\n\nfunction clientAcceptsHtml ({accept}) {\n return accept && accept.match(/text\\/html/);\n};\n\nfunction requestIsFromBrowser (headers) {\n return headers['user-agent'] && headers['user-agent'].match(/Mozilla/);\n};\n\nfunction clientWantsAsset ({accept, range}) {\n const imageIsWanted = accept && accept.match(/image\\/.*/) && !accept.match(/text\\/html/) && !accept.match(/text\\/\\*/);\n const videoIsWanted = accept && range;\n return imageIsWanted || videoIsWanted;\n};\n\nfunction isValidClaimId (claimId) {\n return ((claimId.length === 40) && !/[^A-Za-z0-9]/g.test(claimId));\n};\n\nfunction isValidShortId (claimId) {\n return claimId.length === 1; // it should really evaluate the short url itself\n};\n\nfunction isValidShortIdOrClaimId (input) {\n return (isValidClaimId(input) || isValidShortId(input));\n};\n\nfunction serveAssetToClient (claimId, name, res) {\n return getLocalFileRecord(claimId, name)\n .then(fileRecord => {\n // check that a local record was found\n if (fileRecord === NO_FILE) {\n return res.status(307).redirect(`/api/claim/get/${name}/${claimId}`);\n }\n // serve the file\n const {filePath, fileType} = fileRecord;\n logger.verbose(`serving file: ${filePath}`);\n const sendFileOptions = {\n headers: {\n 'X-Content-Type-Options': 'nosniff',\n 'Content-Type' : fileType || 'image/jpeg',\n },\n };\n res.status(200).sendFile(filePath, sendFileOptions);\n })\n .catch(error => {\n throw error;\n });\n};\n\nmodule.exports = {\n getClaimIdAndServeAsset (channelName, channelClaimId, claimName, claimId, originalUrl, ip, res) {\n // get the claim Id and then serve the asset\n getClaimId(channelName, channelClaimId, claimName, claimId)\n .then(fullClaimId => {\n if (fullClaimId === NO_CLAIM) {\n return res.status(404).json({success: false, message: 'no claim id could be found'});\n } else if (fullClaimId === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'no channel id could be found'});\n }\n serveAssetToClient(fullClaimId, claimName, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'success');\n })\n .catch(error => {\n handleErrorResponse(originalUrl, ip, error, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'fail');\n });\n },\n determineResponseType (hasFileExtension, headers) {\n let responseType;\n if (hasFileExtension) {\n responseType = SERVE; // assume a serve request if file extension is present\n if (clientAcceptsHtml(headers)) { // if the request comes from a browser, change it to a show request\n responseType = SHOW;\n }\n } else {\n responseType = SHOW;\n if (clientWantsAsset(headers) && requestIsFromBrowser(headers)) { // this is in case someone embeds a show url\n logger.debug('Show request came from browser but wants an image/video. Changing response to serve...');\n responseType = SERVE;\n }\n }\n return responseType;\n },\n flipClaimNameAndIdForBackwardsCompatibility (identifier, name) {\n // this is a patch for backwards compatability with '/name/claim_id' url format\n if (isValidShortIdOrClaimId(name) && !isValidShortIdOrClaimId(identifier)) {\n const tempName = name;\n name = identifier;\n identifier = tempName;\n }\n return [identifier, name];\n },\n logRequestData (responseType, claimName, channelName, claimId) {\n logger.debug('responseType ===', responseType);\n logger.debug('claim name === ', claimName);\n logger.debug('channel name ===', channelName);\n logger.debug('claim id ===', claimId);\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/serveHelpers.js","const logger = require('winston');\n\nmodule.exports = {\n REGEXP_INVALID_CLAIM : /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS : /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR : '@',\n parseIdentifier : function (identifier) {\n logger.debug('parsing identifier:', identifier);\n const componentsRegex = new RegExp(\n '([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, value, modifierSeperator, modifier] = componentsRegex\n .exec(identifier)\n .map(match => match || null);\n logger.debug(`${proto}, ${value}, ${modifierSeperator}, ${modifier}`);\n\n // Validate and process name\n if (!value) {\n throw new Error(`Check your url. No channel name provided before \"${modifierSeperator}\"`);\n }\n const isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n const channelName = isChannel ? value : null;\n let claimId;\n if (isChannel) {\n if (!channelName) {\n throw new Error('No channel name after @.');\n }\n const nameBadChars = (channelName).match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error(`Invalid characters in channel name: ${nameBadChars.join(', ')}.`);\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n let channelClaimId;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error(`No modifier provided after separator \"${modifierSeperator}\"`);\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error(`The \"${modifierSeperator}\" modifier is not currently supported`);\n }\n }\n return {\n isChannel,\n channelName,\n channelClaimId,\n claimId,\n };\n },\n parseClaim: function (claim) {\n logger.debug('parsing name:', claim);\n const componentsRegex = new RegExp(\n '([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, claimName, modifierSeperator, modifier] = componentsRegex\n .exec(claim)\n .map(match => match || null);\n logger.debug(`${proto}, ${claimName}, ${modifierSeperator}, ${modifier}`);\n\n // Validate and process name\n if (!claimName) {\n throw new Error('No claim name provided before .');\n }\n const nameBadChars = (claimName).match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error(`Invalid characters in claim name: ${nameBadChars.join(', ')}.`);\n }\n // Validate and process modifier\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error(`No file extension provided after separator ${modifierSeperator}.`);\n }\n if (modifierSeperator !== '.') {\n throw new Error(`The ${modifierSeperator} modifier is not supported in the claim name`);\n }\n }\n // return results\n return {\n claimName,\n };\n },\n parseModifier: function (claim) {\n logger.debug('parsing modifier:', claim);\n const componentsRegex = new RegExp(\n '([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, claimName, modifierSeperator, modifier] = componentsRegex\n .exec(claim)\n .map(match => match || null);\n logger.debug(`${proto}, ${claimName}, ${modifierSeperator}, ${modifier}`);\n // Validate and process modifier\n let hasFileExtension = false;\n if (modifierSeperator) {\n hasFileExtension = true;\n }\n return {\n hasFileExtension,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/lbryUri.js","import React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport { createStore, applyMiddleware } from 'redux';\nimport Reducer from '../../client/reducers/index';\nimport { Provider } from 'react-redux';\nimport { StaticRouter } from 'react-router-dom';\nimport GAListener from '../../client/components/GAListener/index';\nimport App from '../../client/app';\nimport renderFullPage from './renderFullPage';\nimport createSagaMiddleware from 'redux-saga';\nimport { call } from 'redux-saga/effects';\nimport { handleShowPageUri } from '../../client/sagas/show_uri';\nimport { onHandleShowPageUri } from '../../client/actions/show';\n\nimport Helmet from 'react-helmet';\n\nconst returnSagaWithParams = (saga, params) => {\n return function * () {\n yield call(saga, params);\n };\n};\n\nmodule.exports = (req, res) => {\n let context = {};\n\n // create and apply middleware\n const sagaMiddleware = createSagaMiddleware();\n const middleware = applyMiddleware(sagaMiddleware);\n\n // create a new Redux store instance\n const store = createStore(Reducer, middleware);\n\n // create saga\n const action = onHandleShowPageUri(req.params);\n const saga = returnSagaWithParams(handleShowPageUri, action);\n\n // run the saga middleware\n sagaMiddleware\n .run(saga)\n .done\n .then(() => {\n // render component to a string\n const html = renderToString(\n \n \n \n \n \n \n \n );\n\n // get head tags from helmet\n const helmet = Helmet.renderStatic();\n\n // check for a redirect\n if (context.url) {\n return res.redirect(301, context.url);\n }\n\n // get the initial state from our Redux store\n const preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send(renderFullPage(helmet, html, preloadedState));\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/handleShowRender.jsx","module.exports = require(\"redux-saga\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"redux-saga\"\n// module id = 147\n// module chunks = 0","import { call, put, takeLatest } from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { onRequestError, onNewChannelRequest, onNewAssetRequest } from 'actions/show';\nimport { newAssetRequest } from 'sagas/show_asset';\nimport { newChannelRequest } from 'sagas/show_channel';\nimport lbryUri from 'utils/lbryUri';\n\nfunction * parseAndUpdateIdentifierAndClaim (modifier, claim) {\n // this is a request for an asset\n // claim will be an asset claim\n // the identifier could be a channel or a claim id\n let isChannel, channelName, channelClaimId, claimId, claimName, extension;\n try {\n ({ isChannel, channelName, channelClaimId, claimId } = lbryUri.parseIdentifier(modifier));\n ({ claimName, extension } = lbryUri.parseClaim(claim));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // trigger an new action to update the store\n if (isChannel) {\n return yield call(newAssetRequest, onNewAssetRequest(claimName, null, channelName, channelClaimId, extension));\n };\n yield call(newAssetRequest, onNewAssetRequest(claimName, claimId, null, null, extension));\n}\nfunction * parseAndUpdateClaimOnly (claim) {\n // this could be a request for an asset or a channel page\n // claim could be an asset claim or a channel claim\n let isChannel, channelName, channelClaimId;\n try {\n ({ isChannel, channelName, channelClaimId } = lbryUri.parseIdentifier(claim));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // trigger an new action to update the store\n // return early if this request is for a channel\n if (isChannel) {\n return yield call(newChannelRequest, onNewChannelRequest(channelName, channelClaimId));\n }\n // if not for a channel, parse the claim request\n let claimName, extension;\n try {\n ({claimName, extension} = lbryUri.parseClaim(claim));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n yield call(newAssetRequest, onNewAssetRequest(claimName, null, null, null, extension));\n}\n\nexport function * handleShowPageUri (action) {\n const { identifier, claim } = action.data;\n if (identifier) {\n return yield call(parseAndUpdateIdentifierAndClaim, identifier, claim);\n }\n yield call(parseAndUpdateClaimOnly, claim);\n};\n\nexport function * watchHandleShowPageUri () {\n yield takeLatest(actions.HANDLE_SHOW_URI, handleShowPageUri);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/show_uri.js","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { addRequestToRequestList, onRequestError, onRequestUpdate, addAssetToAssetList } from 'actions/show';\nimport { getLongClaimId, getShortId, getClaimData } from 'api/assetApi';\nimport { selectShowState } from 'selectors/show';\nimport { selectSiteHost } from 'selectors/site';\n\nexport function * newAssetRequest (action) {\n const { requestType, requestId, name, modifier } = action.data;\n // put an action to update the request in redux\n yield put(onRequestUpdate(requestType, requestId));\n // is this an existing request?\n // If this uri is in the request list, it's already been fetched\n const state = yield select(selectShowState);\n const host = yield select(selectSiteHost);\n if (state.requestList[requestId]) {\n return null;\n }\n // get long id && add request to request list\n let longId;\n try {\n ({data: longId} = yield call(getLongClaimId, host, name, modifier));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n const assetKey = `a#${name}#${longId}`;\n yield put(addRequestToRequestList(requestId, null, assetKey));\n // is this an existing asset?\n // If this asset is in the asset list, it's already been fetched\n if (state.assetList[assetKey]) {\n return null;\n }\n // get short Id\n let shortId;\n try {\n ({data: shortId} = yield call(getShortId, host, name, longId));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // get asset claim data\n let claimData;\n try {\n ({data: claimData} = yield call(getClaimData, host, name, longId));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // add asset to asset list\n yield put(addAssetToAssetList(assetKey, null, name, longId, shortId, claimData));\n // clear any errors in request error\n yield put(onRequestError(null));\n};\n\nexport function * watchNewAssetRequest () {\n yield takeLatest(actions.ASSET_REQUEST_NEW, newAssetRequest);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/show_asset.js","import Request from 'utils/request';\n\nexport function getLongClaimId (host, name, modifier) {\n let body = {};\n // create request params\n if (modifier) {\n if (modifier.id) {\n body['claimId'] = modifier.id;\n } else {\n body['channelName'] = modifier.channel.name;\n body['channelClaimId'] = modifier.channel.id;\n }\n }\n body['claimName'] = name;\n const params = {\n method : 'POST',\n headers: { 'Content-Type': 'application/json' },\n body : JSON.stringify(body),\n };\n // create url\n const url = `${host}/api/claim/long-id`;\n // return the request promise\n return Request(url, params);\n};\n\nexport function getShortId (host, name, claimId) {\n const url = `${host}/api/claim/short-id/${claimId}/${name}`;\n return Request(url);\n};\n\nexport function getClaimData (host, name, claimId) {\n const url = `${host}/api/claim/data/${name}/${claimId}`;\n return Request(url);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/api/assetApi.js","import {call, put, select, takeLatest} from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { addNewChannelToChannelList, addRequestToRequestList, onRequestError, onRequestUpdate, updateChannelClaims } from 'actions/show';\nimport { getChannelClaims, getChannelData } from 'api/channelApi';\nimport { selectShowState } from 'selectors/show';\nimport { selectSiteHost } from 'selectors/site';\n\nexport function * newChannelRequest (action) {\n const { requestType, requestId, channelName, channelId } = action.data;\n // put an action to update the request in redux\n yield put(onRequestUpdate(requestType, requestId));\n // is this an existing request?\n // If this uri is in the request list, it's already been fetched\n const state = yield select(selectShowState);\n const host = yield select(selectSiteHost);\n if (state.requestList[requestId]) {\n return null;\n }\n // get channel long id\n let longId, shortId;\n try {\n ({ data: {longChannelClaimId: longId, shortChannelClaimId: shortId} } = yield call(getChannelData, host, channelName, channelId));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // store the request in the channel requests list\n const channelKey = `c#${channelName}#${longId}`;\n yield put(addRequestToRequestList(requestId, null, channelKey));\n // is this an existing channel?\n // If this channel is in the channel list, it's already been fetched\n if (state.channelList[channelKey]) {\n return null;\n }\n // get channel claims data\n let claimsData;\n try {\n ({ data: claimsData } = yield call(getChannelClaims, host, longId, channelName, 1));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // store the channel data in the channel list\n yield put(addNewChannelToChannelList(channelKey, channelName, shortId, longId, claimsData));\n // clear any request errors\n yield put(onRequestError(null));\n}\n\nexport function * watchNewChannelRequest () {\n yield takeLatest(actions.CHANNEL_REQUEST_NEW, newChannelRequest);\n};\n\nfunction * getNewClaimsAndUpdateChannel (action) {\n const { channelKey, name, longId, page } = action.data;\n const host = yield select(selectSiteHost);\n let claimsData;\n try {\n ({ data: claimsData } = yield call(getChannelClaims, host, longId, name, page));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n yield put(updateChannelClaims(channelKey, claimsData));\n}\n\nexport function * watchUpdateChannelClaims () {\n yield takeLatest(actions.CHANNEL_CLAIMS_UPDATE_ASYNC, getNewClaimsAndUpdateChannel);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/show_channel.js","import Request from 'utils/request';\n\nexport function getChannelData (host, id, name) {\n if (!id) id = 'none';\n const url = `${host}/api/channel/data/${name}/${id}`;\n return Request(url);\n};\n\nexport function getChannelClaims (host, longId, name, page) {\n if (!page) page = 1;\n const url = `${host}/api/channel/claims/${name}/${longId}/${page}`;\n return Request(url);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/api/channelApi.js","module.exports = {\n REGEXP_INVALID_CLAIM : /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS : /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR : '@',\n parseIdentifier : function (identifier) {\n const componentsRegex = new RegExp(\n '([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, value, modifierSeperator, modifier] = componentsRegex // eslint-disable-line no-unused-vars\n .exec(identifier)\n .map(match => match || null);\n\n // Validate and process name\n if (!value) {\n throw new Error(`Check your URL. No channel name provided before \"${modifierSeperator}\"`);\n }\n const isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n const channelName = isChannel ? value : null;\n let claimId;\n if (isChannel) {\n if (!channelName) {\n throw new Error('Check your URL. No channel name after \"@\".');\n }\n const nameBadChars = (channelName).match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error(`Check your URL. Invalid characters in channel name: \"${nameBadChars.join(', ')}\".`);\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n let channelClaimId;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error(`Check your URL. No modifier provided after separator \"${modifierSeperator}\"`);\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error(`Check your URL. The \"${modifierSeperator}\" modifier is not currently supported`);\n }\n }\n return {\n isChannel,\n channelName,\n channelClaimId: channelClaimId || null,\n claimId : claimId || null,\n };\n },\n parseClaim: function (name) {\n const componentsRegex = new RegExp(\n '([^:$#/.]*)' + // name (stops at the first extension)\n '([:$#.]?)([^/]*)' // extension separator, extension (stops at the first path separator or end)\n );\n const [proto, claimName, extensionSeperator, extension] = componentsRegex // eslint-disable-line no-unused-vars\n .exec(name)\n .map(match => match || null);\n\n // Validate and process name\n if (!claimName) {\n throw new Error('Check your URL. No claim name provided before \".\"');\n }\n const nameBadChars = (claimName).match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error(`Check your URL. Invalid characters in claim name: \"${nameBadChars.join(', ')}\".`);\n }\n // Validate and process extension\n if (extensionSeperator) {\n if (!extension) {\n throw new Error(`Check your URL. No file extension provided after separator \"${extensionSeperator}\".`);\n }\n if (extensionSeperator !== '.') {\n throw new Error(`Check your URL. The \"${extensionSeperator}\" separator is not supported in the claim name.`);\n }\n }\n return {\n claimName,\n extension: extension || null,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/lbryUri.js","const handlePageRender = require('../helpers/handlePageRender.jsx');\n\nmodule.exports = app => {\n // a catch-all route if someone visits a page that does not exist\n app.use('*', (req, res) => {\n // send response\n handlePageRender(req, res);\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/fallback-routes.js","const { logLevel } = require('../../config/loggerConfig');\n\nmodule.exports = (winston) => {\n // configure\n winston.configure({\n transports: [\n new (winston.transports.Console)({\n level : logLevel,\n timestamp : false,\n colorize : true,\n prettyPrint : true,\n handleExceptions : true,\n humanReadableUnhandledException: true,\n }),\n ],\n });\n // test all the log levels\n winston.error('Level 0');\n winston.warn('Level 1');\n winston.info('Level 2');\n winston.verbose('Level 3');\n winston.debug('Level 4');\n winston.silly('Level 5');\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/configureLogger.js","const loggerConfig = {\n logLevel: 'debug', // options: silly, debug, verbose, info\n};\n\nmodule.exports = loggerConfig;\n\n\n\n// WEBPACK FOOTER //\n// ./config/loggerConfig.js","const winstonSlackWebHook = require('winston-slack-webhook').SlackWebHook;\nconst slackConfig = require('../../config/slackConfig.js');\n\nmodule.exports = (winston) => {\n const {slackWebHook, slackErrorChannel, slackInfoChannel} = slackConfig;\n if (slackWebHook) {\n // add a transport for errors to slack\n if (slackErrorChannel) {\n winston.add(winstonSlackWebHook, {\n name : 'slack-errors-transport',\n level : 'warn',\n webhookUrl: slackWebHook,\n channel : slackErrorChannel,\n username : 'spee.ch',\n iconEmoji : ':face_with_head_bandage:',\n });\n };\n if (slackInfoChannel) {\n winston.add(winstonSlackWebHook, {\n name : 'slack-info-transport',\n level : 'info',\n webhookUrl: slackWebHook,\n channel : slackInfoChannel,\n username : 'spee.ch',\n iconEmoji : ':nerd_face:',\n });\n };\n // send test message\n winston.error('Slack \"error\" logging is online.');\n winston.info('Slack \"info\" logging is online.');\n } else {\n winston.warn('Slack logging is not enabled because no slackWebHook config var provided.');\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/configureSlack.js","module.exports = require(\"winston-slack-webhook\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"winston-slack-webhook\"\n// module id = 158\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///index.js","webpack:///webpack/bootstrap e7360edfffe873533ea7","webpack:///external \"react\"","webpack:///external \"react-redux\"","webpack:///external \"winston\"","webpack:///external \"react-router-dom\"","webpack:///./client/actions/publish.js","webpack:///./config/siteConfig.js","webpack:///./server/models/index.js","webpack:///./client/containers/NavBar/index.js","webpack:///./client/actions/show.js","webpack:///./client/components/SEO/index.js","webpack:///external \"prop-types\"","webpack:///./client/utils/request.js","webpack:///./client/constants/show_action_types.js","webpack:///./client/selectors/show.js","webpack:///external \"react-helmet\"","webpack:///external \"redux-saga/effects\"","webpack:///./server/helpers/lbryApi.js","webpack:///./server/helpers/googleAnalytics.js","webpack:///external \"redux\"","webpack:///./client/actions/channel.js","webpack:///./client/components/ProgressBar/index.jsx","webpack:///./client/pages/ErrorPage/index.jsx","webpack:///external \"passport\"","webpack:///external \"passport-local\"","webpack:///external \"sequelize\"","webpack:///./server/helpers/sequelizeHelpers.js","webpack:///./server/helpers/publishHelpers.js","webpack:///./server/helpers/errorHandlers.js","webpack:///./server/controllers/serveController.js","webpack:///./server/helpers/handlePageRender.jsx","webpack:///external \"react-dom/server\"","webpack:///./client/reducers/index.js","webpack:///./client/constants/publish_action_types.js","webpack:///./client/constants/publish_channel_select_states.js","webpack:///./client/constants/channel_action_types.js","webpack:///./client/constants/asset_display_states.js","webpack:///./client/components/GAListener/index.jsx","webpack:///./client/app.jsx","webpack:///./client/containers/Dropzone/index.js","webpack:///./client/containers/ChannelLoginForm/index.js","webpack:///./client/containers/ChannelCreateForm/index.js","webpack:///./client/constants/show_request_types.js","webpack:///./client/containers/AssetDisplay/index.js","webpack:///./server/helpers/renderFullPage.js","webpack:///./client/selectors/site.js","webpack:///external \"babel-polyfill\"","webpack:///external \"whatwg-fetch\"","webpack:///./server/server.js","webpack:///external \"express\"","webpack:///external \"body-parser\"","webpack:///external \"express-handlebars\"","webpack:///external \"handlebars\"","webpack:///external \"helmet\"","webpack:///./server/helpers/authHelpers.js","webpack:///external \"cookie-session\"","webpack:///external \"http\"","webpack:///./server/passport/local-signup.js","webpack:///external \"axios\"","webpack:///./config/lbryConfig.js","webpack:///external \"universal-analytics\"","webpack:///./config/mysqlConfig.js","webpack:///./server/models/certificate.js","webpack:///./server/models/channel.js","webpack:///./server/models/claim.js","webpack:///./server/models/file.js","webpack:///./server/models/request.js","webpack:///./server/models/user.js","webpack:///external \"bcrypt\"","webpack:///./server/passport/local-login.js","webpack:///./server/routes/auth-routes.js","webpack:///./server/routes/api-routes.js","webpack:///external \"connect-multiparty\"","webpack:///./server/controllers/publishController.js","webpack:///external \"fs\"","webpack:///./server/auth/authentication.js","webpack:///./server/helpers/channelPagination.js","webpack:///./server/routes/page-routes.js","webpack:///./client/reducers/publish.js","webpack:///./client/reducers/channel.js","webpack:///./client/reducers/show.js","webpack:///./client/reducers/site.js","webpack:///external \"react-ga\"","webpack:///./client/pages/HomePage/index.jsx","webpack:///./client/components/SEO/view.jsx","webpack:///./client/utils/pageTitle.js","webpack:///./client/utils/metaTags.js","webpack:///./client/utils/canonicalLink.js","webpack:///./client/containers/NavBar/view.jsx","webpack:///./client/components/Logo/index.jsx","webpack:///./client/components/NavBarChannelOptionsDropdown/index.jsx","webpack:///external \"cross-fetch/polyfill\"","webpack:///./client/containers/PublishTool/index.js","webpack:///./client/containers/PublishTool/view.jsx","webpack:///./client/containers/Dropzone/view.jsx","webpack:///./client/utils/file.js","webpack:///./client/components/PublishPreview/index.jsx","webpack:///./client/containers/PublishDetails/index.js","webpack:///./client/containers/PublishDetails/view.jsx","webpack:///./client/containers/PublishTitleInput/index.js","webpack:///./client/containers/PublishTitleInput/view.jsx","webpack:///./client/containers/PublishUrlInput/index.js","webpack:///./client/containers/PublishUrlInput/view.jsx","webpack:///./client/components/PublishUrlMiddleDisplay/index.jsx","webpack:///./client/containers/PublishThumbnailInput/index.js","webpack:///./client/containers/PublishThumbnailInput/view.jsx","webpack:///./client/containers/PublishMetadataInputs/index.js","webpack:///./client/containers/PublishMetadataInputs/view.jsx","webpack:///./client/components/ExpandingTextArea/index.jsx","webpack:///./client/containers/ChannelSelect/index.js","webpack:///./client/containers/ChannelSelect/view.jsx","webpack:///./client/containers/ChannelLoginForm/view.jsx","webpack:///./client/containers/ChannelCreateForm/view.jsx","webpack:///./client/components/ActiveStatusBar/index.jsx","webpack:///./client/components/InactiveStatusBar/index.jsx","webpack:///./client/containers/PublishStatus/index.js","webpack:///./client/containers/PublishStatus/view.jsx","webpack:///./client/constants/publish_claim_states.js","webpack:///./client/containers/PublishDisabledMessage/index.js","webpack:///./client/containers/PublishDisabledMessage/view.jsx","webpack:///./client/pages/AboutPage/index.jsx","webpack:///./client/pages/LoginPage/index.js","webpack:///./client/pages/LoginPage/view.jsx","webpack:///./client/pages/ShowPage/index.js","webpack:///./client/pages/ShowPage/view.jsx","webpack:///./client/containers/ShowAssetLite/index.js","webpack:///./client/containers/ShowAssetLite/view.jsx","webpack:///./client/containers/AssetDisplay/view.jsx","webpack:///./client/containers/ShowAssetDetails/index.js","webpack:///./client/containers/ShowAssetDetails/view.jsx","webpack:///./client/containers/AssetTitle/index.js","webpack:///./client/containers/AssetTitle/view.jsx","webpack:///./client/containers/AssetInfo/index.js","webpack:///./client/containers/AssetInfo/view.jsx","webpack:///./client/containers/ShowChannel/index.js","webpack:///./client/containers/ShowChannel/view.jsx","webpack:///./client/containers/ChannelClaimsDisplay/index.js","webpack:///./client/containers/ChannelClaimsDisplay/view.jsx","webpack:///./client/components/AssetPreview/index.js","webpack:///./client/components/AssetPreview/view.jsx","webpack:///./client/containers/FourOhFourPage/index.jsx","webpack:///./client/containers/FourOhFourPage/view.jsx","webpack:///./server/routes/asset-routes.js","webpack:///./server/helpers/serveHelpers.js","webpack:///./server/helpers/lbryUri.js","webpack:///./server/helpers/handleShowRender.jsx","webpack:///external \"redux-saga\"","webpack:///./client/sagas/show_uri.js","webpack:///./client/sagas/show_asset.js","webpack:///./client/api/assetApi.js","webpack:///./client/sagas/show_channel.js","webpack:///./client/api/channelApi.js","webpack:///./client/utils/lbryUri.js","webpack:///./server/routes/fallback-routes.js","webpack:///./server/helpers/configureLogger.js","webpack:///./config/loggerConfig.js","webpack:///./server/helpers/configureSlack.js","webpack:///external \"winston-slack-webhook\"","webpack:///./config/slackConfig.js"],"names":["module","exports","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","require","selectFile","file","type","actions","FILE_SELECTED","data","clearFile","FILE_CLEAR","updateMetadata","value","METADATA_UPDATE","updateClaim","CLAIM_UPDATE","setPublishInChannel","channel","SET_PUBLISH_IN_CHANNEL","updatePublishStatus","status","message","PUBLISH_STATUS_UPDATE","updateError","ERROR_UPDATE","updateSelectedChannel","channelName","SELECTED_CHANNEL_UPDATE","toggleMetadataInputs","showMetadataInputs","TOGGLE_METADATA_INPUTS","onNewThumbnail","THUMBNAIL_NEW","startPublish","history","PUBLISH_START","_publish_action_types","obj","newObj","key","default","SiteConfig","this","analytics","googleId","assetDefaults","description","thumbnail","title","auth","sessionKey","details","host","port","twitter","publishing","additionalClaimAddresses","disabled","disabledMessage","primaryClaimAddress","thumbnailChannel","thumbnailChannelId","uploadDirectory","Sequelize","logger","console","log","_require","database","username","password","db","sequelize","dialect","dialectOptions","decimalNumbers","logging","pool","max","min","idle","acquire","authenticate","then","info","catch","err","error","Certificate","Channel","Claim","File","Request","User","import","keys","forEach","modelName","associate","upsert","Model","values","condition","tableName","findOne","where","debug","update","create","_reactRedux","_channel","_publish","_view","_view2","mapStateToProps","_ref","site","loggedInChannel","channelShortId","shortId","channelLongId","longId","siteDescription","mapDispatchToProps","dispatch","onChannelLogin","updateLoggedInChannel","onChannelLogout","connect","onHandleShowPageUri","params","HANDLE_SHOW_URI","onRequestError","REQUEST_ERROR","onNewChannelRequest","channelId","requestType","requestId","CHANNEL_REQUEST_NEW","onNewAssetRequest","id","extension","ASSET_REQUEST_NEW","modifier","onRequestUpdate","REQUEST_UPDATE","addRequestToRequestList","REQUEST_LIST_ADD","addAssetToAssetList","claimId","claimData","ASSET_ADD","addNewChannelToChannelList","claimsData","CHANNEL_ADD","onUpdateChannelClaims","channelKey","page","CHANNEL_CLAIMS_UPDATE_ASYNC","updateChannelClaims","channelListId","CHANNEL_CLAIMS_UPDATE_SUCCESS","fileRequested","FILE_REQUESTED","updateFileAvailability","FILE_AVAILABILITY_UPDATE","updateDisplayAssetError","DISPLAY_ASSET_ERROR","_show_action_types","_show_request_types","defaultDescription","defaultThumbnail","siteHost","siteTitle","siteTwitter","parseJSON","response","json","checkStatus","jsonResponse","Error","request","url","options","fetch","Promise","all","_ref2","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","length","Array","isArray","TypeError","selectAsset","show","requestList","assetKey","assetList","selectShowState","state","axios","_require$api","api","apiHost","apiPort","lbryApiUri","_require2","chooseGaLbrynetPublishLabel","sendGATimingEvent","handleLbrynetResponse","resolve","reject","result","JSON","stringify","publishClaim","publishParams","gaStartTime","Date","now","post","method","getClaim","uri","timeout","getClaimList","claimName","resolveUri","getDownloadDirectory","_ref3","download_directory","createChannel","channel_name","amount","createServeEventParams","headers","ip","originalUrl","eventCategory","eventAction","eventLabel","ipOverride","userAgentOverride","createPublishTimingEventParams","category","variable","label","startTime","endTime","userTimingCategory","userTimingVariableName","userTimingTime","userTimingLabel","sendGoogleAnalyticsEvent","visitorId","replace","ua","strictCidFormat","https","event","sendGoogleAnalyticsTiming","timing","sendGAServeEvent","channel_id","CHANNEL_UPDATE","_channel_action_types","_interopRequireDefault","_classCallCheck","instance","Constructor","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","constructor","writable","setPrototypeOf","__proto__","_createClass","defineProperties","target","props","descriptor","protoProps","staticProps","_react","_react2","_propTypes","_propTypes2","_ActiveStatusBar","_ActiveStatusBar2","_InactiveStatusBar","_InactiveStatusBar2","ProgressBar","_React$Component","_this","getPrototypeOf","bars","index","incrementer","createBars","bind","startProgressBar","updateProgressBar","stopProgressBar","size","isActive","setState","updateInterval","setInterval","clearInterval","createElement","map","bar","Component","propTypes","number","isRequired","_NavBar","_NavBar2","ErrorPage","apply","arguments","className","string","returnShortId","claimsArray","claimIndex","substring","shortIdLength","findIndex","element","possibleMatches","slice","filter","fs","parsePublishApiRequestBody","nsfw","license","exec","parsePublishApiRequestFiles","path","test","validateFileTypeAndSize","fileName","filePath","fileType","thumbnailFileName","thumbnailFilePath","thumbnailFileType","createBasicPublishParams","trim","file_path","bid","metadata","author","language","claim_address","createThumbnailPublishParams","deleteTemporaryFile","unlink","addGetResultsToFileData","fileInfo","getResult","file_name","download_path","createFileData","outpoint","height","address","contentType","handleErrorResponse","res","useObjectPropertiesIfNoKeys","_module$exports$retur","returnErrorMessageAndStatus","_module$exports$retur2","createErrorResponsePayload","code","newErrorObject","getOwnPropertyNames","success","returnPaginatedChannelClaims","getClaimId","channelClaimId","getClaimIdByChannel","getClaimIdByClaim","getLongClaimId","longClaimId","getLongChannelId","longChannelId","getClaimIdByLongChannelId","getChannelData","longChannelClaimId","getShortChannelIdFromLongChannelId","_ref4","shortChannelClaimId","getChannelClaims","getAllChannelClaims","_ref5","_ref6","channelClaimsArray","paginatedChannelViewData","getLocalFileRecord","dataValues","_server","_redux","_index","_index2","_reactRouterDom","_index3","_index4","_app","_app2","_renderFullPage","_renderFullPage2","_reactHelmet","_reactHelmet2","req","context","store","createStore","html","renderToString","Provider","StaticRouter","location","helmet","renderStatic","redirect","preloadedState","getState","send","_publish2","_channel2","_show","_show2","_site","_site2","combineReducers","publish","LOGIN","CREATE","LOCAL_CHECK","UNAVAILABLE","ERROR","AVAILABLE","_reactGa","_reactGa2","initialize","GAListener","sendPageView","listen","set","pathname","pageview","children","withRouter","_HomePage","_HomePage2","_AboutPage","_AboutPage2","_LoginPage","_LoginPage2","_ShowPage","_ShowPage2","_FourOhFourPage","_FourOhFourPage2","App","Switch","Route","exact","component","fileError","setFileError","CHANNEL","ASSET_LITE","ASSET_DETAILS","displayAsset","asset","onFileRequest","toString","meta","link","selectSiteState","selectSiteHost","express","bodyParser","expressHandlebars","Handlebars","passport","serializeSpeechUser","deserializeSpeechUser","cookieSession","http","PORT","app","enable","use","static","__dirname","urlencoded","extended","verbose","serializeUser","deserializeUser","localSignupStrategy","localLoginStrategy","maxAge","session","hbs","defaultLayout","handlebars","engine","server","Server","sync","user","PassportLocalStrategy","Strategy","lbryApi","usernameField","passwordField","userInfo","tx","userData","userName","channelData","claim_id","certificateData","newUser","newChannel","newCertificate","setChannel","setUser","shortChannelId","lbryConfig","MysqlConfig","STRING","BOOLEAN","INTEGER","TEXT","DECIMAL","define","claimSequence","decodedClaim","depth","effectiveAmount","hasSignature","hex","nout","txid","validAtHeight","valueVersion","claimType","certificateVersion","keyType","publicKey","freezeTableName","belongsTo","foreignKey","allowNull","findAll","order","getLongChannelIdFromShortChannelId","_this2","$like","getLongChannelIdFromChannelName","_this3","validateLongChannelId","_this4","hasOne","determineFileExtensionFromContentType","determineThumbnail","storedThumbnail","prepareClaimData","claim","certificateId","licenseUrl","preview","metadataVersion","source","sourceType","sourceVersion","streamVersion","getShortClaimIdFromLongClaimId","raw","getLongClaimIdFromShortClaimId","getTopFreeClaimIdByClaimName","_this5","validateLongClaimId","_this6","resolveClaim","_this7","claimArray","defaultValue","trendingEligible","hasMany","getRecentClaims","limit","action","ipAddress","bcrypt","comparePassword","compare","changePassword","newPassword","genSalt","saltError","salt","hash","hashError","hook","returnUserAndChannelInfo","userInstance","getChannel","isMatch","logIn","logout","multipart","multipartMiddleware","uploadDir","claimNameIsAvailable","checkChannelAvailability","_require3","_require4","errorHandlers","_require5","_require6","authenticateUser","_require7","availableName","body","claimsList","resolveResult","fileData","_ref7","_ref8","_ref9","_ref10","_ref10$","completed","_ref11","_ref12","resolvedUri","_ref13","files","channelPassword","_parsePublishApiReque","_parsePublishApiReque2","_ref14","_ref15","_ref15$","thumbnailPublishParams","lbryTx","_ref16","_ref17","_ref18","claimInfo","_ref19","_defineProperty","publishHelpers","_require$publishing","Op","publishResults","fileRecord","claimRecord","upsertCriteria","setClaim","setFile","claimAddresses","attributes","or","authenticateChannelCredentials","userPassword","channelFindParams","claims","totalPages","determineTotalPages","paginationPage","getPageFromQuery","extractPageFromClaims","previousPage","determinePreviousPage","currentPage","nextPage","determineNextPage","totalResults","determineTotalClaims","parseInt","pageNumber","claimStartIndex","claimEndIndex","totalClaims","fullPages","Math","floor","handlePageRender","render","layout","initialState","assign","publishInChannel","selectedChannel","_publish_channel_select_states","publishSubmit","channelList","_asset_display_states","siteConfig","googleAnalyticsId","_siteConfig$assetDefa","_siteConfig$details","_SEO","_SEO2","_PublishTool","_PublishTool2","HomePage","_pageTitle","_metaTags","_canonicalLink","SEO","_props","_props2","pageUri","pageTitle","createPageTitle","metaTags","createMetaTags","canonicalLink","createCanonicalLink","rel","href","determineOgThumbnailContentType","lastIndexOf","createBasicMetaTags","content","createChannelMetaTags","createAssetMetaTags","embedUrl","showUrl","fileExt","ogTitle","ogDescription","ogThumbnailContentType","ogThumbnail","createBasicCanonicalLink","createAssetCanonicalLink","_asset$claimData","createChannelCanonicalLink","_Logo","_Logo2","_NavBarChannelOptionsDropdown","_NavBarChannelOptionsDropdown2","_request","_request2","NavBar","checkForLoggedInUser","logoutUser","handleSelection","credentials","selectedOptions","NavLink","activeClassName","to","defaultSelection","VIEW","LOGOUT","Logo","version","x","y","viewBox","enableBackground","Link","transform","fontSize","fontFamily","fill","stroke","strokeWidth","strokeLinecap","NavBarChannelDropdown","onChange","_Dropzone","_Dropzone2","_PublishDetails","_PublishDetails2","_PublishStatus","_PublishStatus2","_PublishDisabledMessage","_PublishDisabledMessage2","PublishTool","_file","_PublishPreview","_PublishPreview2","Dropzone","dragOver","mouseOver","dimPreview","handleDrop","handleDragOver","handleDragEnd","handleDragEnter","handleDragLeave","handleMouseEnter","handleMouseLeave","handleClick","handleFileInput","chooseFile","preventDefault","dt","dataTransfer","items","kind","droppedFile","getAsFile","remove","clearData","document","getElementById","click","fileList","validateFile","accept","encType","onDrop","onDragOver","onDragEnd","onDragEnter","onDragLeave","onMouseEnter","onMouseLeave","onClick","PublishPreview","imgSource","setPreviewImageSource","newProps","setPreviewImageSourceFromFile","previewReader","FileReader","readAsDataURL","onloadend","src","alt","bool","_PublishTitleInput","_PublishTitleInput2","_PublishUrlInput","_PublishUrlInput2","_PublishThumbnailInput","_PublishThumbnailInput2","_PublishMetadataInputs","_PublishMetadataInputs2","_ChannelSelect","_ChannelSelect2","PublishDetails","onPublishSubmit","onMetadataChange","PublishTitleInput","handleInput","e","placeholder","loggedInChannelName","loggedInChannelShortId","urlError","onClaimChange","onUrlError","_PublishUrlMiddleDisplay","_PublishUrlMiddleDisplay2","PublishUrlInput","setClaimName","validateClaim","cleanseInput","input","fileNameWithoutEnding","cleanClaimName","UrlMiddle","dataURItoBlob","dataURI","byteString","atob","split","mimeString","ia","Uint8Array","charCodeAt","Blob","PublishThumbnailInput","videoSource","sliderMinRange","sliderMaxRange","sliderValue","handleVideoLoadedData","handleSliderChange","createThumbnail","setVideoSource","nextProps","dataUri","blob","URL","createObjectURL","duration","totalMinutes","totalSeconds","currentTime","video","canvas","width","videoWidth","videoHeight","getContext","drawImage","dataUrl","toDataURL","snapshot","_state","preload","muted","style","display","playsInline","onLoadedData","onSeeked","onToggleMetadataInputs","_ExpandingTextArea","_ExpandingTextArea2","PublishMetadataInputs","toggleShowInputs","handleSelect","checked","selectedOption","htmlFor","rows","maxLength","maxHeight","_objectWithoutProperties","indexOf","_extends","ExpandingTextarea","_Component","_handleChange","adjustTextarea","_ref$target","el","scrollHeight","rest","ref","func","channelError","onPublishInChannelChange","onChannelSelect","_ChannelLoginForm","_ChannelLoginForm2","_ChannelCreateForm","_ChannelCreateForm2","states","ChannelSelect","toggleAnonymousPublish","ChannelLoginForm","loginToChannel","Headers","Content-Type","_ProgressBar","_ProgressBar2","ChannelCreateForm","handleChannelInput","cleanseChannelInput","updateIsChannelAvailable","channelWithAtSymbol","checkIsPasswordProvided","checkIsChannelAvailable","makePublishChannelRequest","ActiveStatusBar","InactiveStatusBar","_publish_claim_states","publishStates","PublishStatus","LOAD_START","LOADING","PUBLISHING","SUCCESS","FAILED","PublishDisabledMessage","AboutPage","LoginPage","_ErrorPage","_ErrorPage2","_ShowAssetLite","_ShowAssetLite2","_ShowAssetDetails","_ShowAssetDetails2","_ShowChannel","_ShowChannel2","ShowPage","match","_AssetDisplay","_AssetDisplay2","ShowLite","AssetDisplay","_props$asset$claimDat","_props$asset$claimDat2","controls","poster","_AssetTitle","_AssetTitle2","_AssetInfo","_AssetInfo2","ShowAssetDetails","AssetTitle","AssetInfo","copyToClipboard","elementToCopy","dataset","elementtocopy","select","execCommand","_props$asset","hidden","readOnly","spellCheck","data-elementtocopy","download","previousRequest","_ChannelClaimsDisplay","_ChannelClaimsDisplay2","ShowChannel","_AssetPreview","_AssetPreview2","ChannelClaimsDisplay","showNextResultsPage","showPreviousResultsPage","showNewPage","_props$channel","_props$channel$claims","defaults","AssetPreview","_ref$claimData","directSourceLink","showUrlLink","_ref$site","FourOhForPage","determineResponseType","flipClaimNameAndIdForBackwardsCompatibility","logRequestData","getClaimIdAndServeAsset","lbryUri","handleShowRender","hasFileExtension","parseModifier","responseType","parseClaim","isChannel","_lbryUri$parseIdentif","parseIdentifier","identifier","_flipClaimNameAndIdFo","_flipClaimNameAndIdFo2","clientAcceptsHtml","requestIsFromBrowser","clientWantsAsset","range","imageIsWanted","videoIsWanted","isValidClaimId","isValidShortId","isValidShortIdOrClaimId","serveAssetToClient","NO_FILE","sendFileOptions","X-Content-Type-Options","sendFile","fullClaimId","tempName","REGEXP_INVALID_CLAIM","REGEXP_INVALID_CHANNEL","REGEXP_ADDRESS","CHANNEL_CHAR","componentsRegex","RegExp","_componentsRegex$exec","_componentsRegex$exec2","proto","modifierSeperator","startsWith","nameBadChars","join","_componentsRegex$exec3","_componentsRegex$exec4","_componentsRegex$exec5","_componentsRegex$exec6","_reduxSaga","_reduxSaga2","_effects","_show_uri","returnSagaWithParams","saga","regeneratorRuntime","mark","_callee","wrap","_context","prev","stop","sagaMiddleware","middleware","applyMiddleware","run","parseAndUpdateIdentifierAndClaim","_lbryUri$parseClaim","_lbryUri2","t0","put","abrupt","sent","_show_asset","newAssetRequest","_marked","parseAndUpdateClaimOnly","_lbryUri$parseIdentif2","_lbryUri$parseClaim2","_context2","_show_channel","newChannelRequest","t1","_marked2","handleShowPageUri","_action$data","_context3","_marked3","watchHandleShowPageUri","_context4","takeLatest","_marked4","_lbryUri","_assetApi","getShortId","getClaimData","t2","watchNewAssetRequest","_ref$data","_channelApi","watchNewChannelRequest","getNewClaimsAndUpdateChannel","_action$data2","watchUpdateChannelClaims","extensionSeperator","logLevel","winston","configure","transports","Console","level","timestamp","colorize","prettyPrint","handleExceptions","humanReadableUnhandledException","warn","silly","loggerConfig","winstonSlackWebHook","SlackWebHook","slackConfig","slackWebHook","slackErrorChannel","slackInfoChannel","add","webhookUrl","iconEmoji","SlackConfig"],"mappings":"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","file":"index.js","sourcesContent":["module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 45);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react\");\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-redux\");\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"winston\");\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-router-dom\");\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.selectFile = selectFile;\nexports.clearFile = clearFile;\nexports.updateMetadata = updateMetadata;\nexports.updateClaim = updateClaim;\nexports.setPublishInChannel = setPublishInChannel;\nexports.updatePublishStatus = updatePublishStatus;\nexports.updateError = updateError;\nexports.updateSelectedChannel = updateSelectedChannel;\nexports.toggleMetadataInputs = toggleMetadataInputs;\nexports.onNewThumbnail = onNewThumbnail;\nexports.startPublish = startPublish;\n\nvar _publish_action_types = __webpack_require__(32);\n\nvar actions = _interopRequireWildcard(_publish_action_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// export action creators\nfunction selectFile(file) {\n return {\n type: actions.FILE_SELECTED,\n data: file\n };\n};\n\nfunction clearFile() {\n return {\n type: actions.FILE_CLEAR\n };\n};\n\nfunction updateMetadata(name, value) {\n return {\n type: actions.METADATA_UPDATE,\n data: {\n name: name,\n value: value\n }\n };\n};\n\nfunction updateClaim(value) {\n return {\n type: actions.CLAIM_UPDATE,\n data: value\n };\n};\n\nfunction setPublishInChannel(channel) {\n return {\n type: actions.SET_PUBLISH_IN_CHANNEL,\n channel: channel\n };\n};\n\nfunction updatePublishStatus(status, message) {\n return {\n type: actions.PUBLISH_STATUS_UPDATE,\n data: {\n status: status,\n message: message\n }\n };\n};\n\nfunction updateError(name, value) {\n return {\n type: actions.ERROR_UPDATE,\n data: {\n name: name,\n value: value\n }\n };\n};\n\nfunction updateSelectedChannel(channelName) {\n return {\n type: actions.SELECTED_CHANNEL_UPDATE,\n data: channelName\n };\n};\n\nfunction toggleMetadataInputs(showMetadataInputs) {\n return {\n type: actions.TOGGLE_METADATA_INPUTS,\n data: showMetadataInputs\n };\n};\n\nfunction onNewThumbnail(file) {\n return {\n type: actions.THUMBNAIL_NEW,\n data: file\n };\n};\n\nfunction startPublish(history) {\n return {\n type: actions.PUBLISH_START,\n data: { history: history }\n };\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction SiteConfig() {\n this.analytics = {\n googleId: 'default'\n };\n this.assetDefaults = {\n description: 'An asset published on Spee.ch',\n thumbnail: 'https://spee.ch/assets/img/video_thumb_default.png',\n title: 'Spee.ch'\n };\n this.auth = {\n sessionKey: 'default'\n };\n this.details = {\n description: 'Open-source, decentralized image and video sharing.',\n host: 'default',\n port: 3000,\n title: 'Spee.ch',\n twitter: '@spee_ch'\n };\n this.publishing = {\n additionalClaimAddresses: [],\n disabled: false,\n disabledMessage: 'Please check back soon.',\n primaryClaimAddress: 'default',\n thumbnailChannel: 'default',\n thumbnailChannelId: 'default',\n uploadDirectory: '/home/lbry/Uploads'\n };\n};\n\nmodule.exports = new SiteConfig();\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Sequelize = __webpack_require__(24);\nvar logger = __webpack_require__(2);\n\nconsole.log('exporting sequelize models');\n\nvar _require = __webpack_require__(61),\n database = _require.database,\n username = _require.username,\n password = _require.password;\n\nvar db = {};\n// set sequelize options\nvar sequelize = new Sequelize(database, username, password, {\n host: 'localhost',\n dialect: 'mysql',\n dialectOptions: { decimalNumbers: true }, // fix to ensure DECIMAL will not be stored as a string\n logging: false,\n pool: {\n max: 5,\n min: 0,\n idle: 10000,\n acquire: 10000\n }\n});\n\n// establish mysql connection\nsequelize.authenticate().then(function () {\n logger.info('Sequelize has established mysql connection successfully.');\n}).catch(function (err) {\n logger.error('Sequelize was unable to connect to the database:', err);\n});\n\n// manually add each model to the db object\nvar Certificate = __webpack_require__(62);\nvar Channel = __webpack_require__(63);\nvar Claim = __webpack_require__(64);\nvar File = __webpack_require__(65);\nvar Request = __webpack_require__(66);\nvar User = __webpack_require__(67);\ndb['Certificate'] = sequelize.import('Certificate', Certificate);\ndb['Channel'] = sequelize.import('Channel', Channel);\ndb['Claim'] = sequelize.import('Claim', Claim);\ndb['File'] = sequelize.import('File', File);\ndb['Request'] = sequelize.import('Request', Request);\ndb['User'] = sequelize.import('User', User);\n\n// run model.association for each model in the db object that has an association\nObject.keys(db).forEach(function (modelName) {\n if (db[modelName].associate) {\n logger.info('Associating model:', modelName);\n db[modelName].associate(db);\n }\n});\n\ndb.sequelize = sequelize;\ndb.Sequelize = Sequelize;\n\n// add an 'upsert' method to the db object\ndb.upsert = function (Model, values, condition, tableName) {\n return Model.findOne({\n where: condition\n }).then(function (obj) {\n if (obj) {\n // update\n logger.debug('updating record in db.' + tableName);\n return obj.update(values);\n } else {\n // insert\n logger.debug('creating record in db.' + tableName);\n return Model.create(values);\n }\n }).catch(function (error) {\n logger.error(tableName + '.upsert error', error);\n throw error;\n });\n};\n\nmodule.exports = db;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _channel = __webpack_require__(19);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(88);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n site = _ref.site;\n\n return {\n channelName: channel.loggedInChannel.name,\n channelShortId: channel.loggedInChannel.shortId,\n channelLongId: channel.loggedInChannel.longId,\n siteDescription: site.description\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onChannelLogin: function onChannelLogin(name, shortId, longId) {\n dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));\n dispatch((0, _publish.updateSelectedChannel)(name));\n },\n onChannelLogout: function onChannelLogout() {\n dispatch((0, _channel.updateLoggedInChannel)(null, null, null));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.onHandleShowPageUri = onHandleShowPageUri;\nexports.onRequestError = onRequestError;\nexports.onNewChannelRequest = onNewChannelRequest;\nexports.onNewAssetRequest = onNewAssetRequest;\nexports.onRequestUpdate = onRequestUpdate;\nexports.addRequestToRequestList = addRequestToRequestList;\nexports.addAssetToAssetList = addAssetToAssetList;\nexports.addNewChannelToChannelList = addNewChannelToChannelList;\nexports.onUpdateChannelClaims = onUpdateChannelClaims;\nexports.updateChannelClaims = updateChannelClaims;\nexports.fileRequested = fileRequested;\nexports.updateFileAvailability = updateFileAvailability;\nexports.updateDisplayAssetError = updateDisplayAssetError;\n\nvar _show_action_types = __webpack_require__(12);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show_request_types = __webpack_require__(41);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// basic request parsing\nfunction onHandleShowPageUri(params) {\n return {\n type: actions.HANDLE_SHOW_URI,\n data: params\n };\n};\n\nfunction onRequestError(error) {\n return {\n type: actions.REQUEST_ERROR,\n data: error\n };\n};\n\nfunction onNewChannelRequest(channelName, channelId) {\n var requestType = _show_request_types.CHANNEL;\n var requestId = 'cr#' + channelName + '#' + channelId;\n return {\n type: actions.CHANNEL_REQUEST_NEW,\n data: { requestType: requestType, requestId: requestId, channelName: channelName, channelId: channelId }\n };\n};\n\nfunction onNewAssetRequest(name, id, channelName, channelId, extension) {\n var requestType = extension ? _show_request_types.ASSET_LITE : _show_request_types.ASSET_DETAILS;\n var requestId = 'ar#' + name + '#' + id + '#' + channelName + '#' + channelId;\n return {\n type: actions.ASSET_REQUEST_NEW,\n data: {\n requestType: requestType,\n requestId: requestId,\n name: name,\n modifier: {\n id: id,\n channel: {\n name: channelName,\n id: channelId\n }\n }\n }\n };\n};\n\nfunction onRequestUpdate(requestType, requestId) {\n return {\n type: actions.REQUEST_UPDATE,\n data: {\n requestType: requestType,\n requestId: requestId\n }\n };\n};\n\nfunction addRequestToRequestList(id, error, key) {\n return {\n type: actions.REQUEST_LIST_ADD,\n data: { id: id, error: error, key: key }\n };\n};\n\n// asset actions\n\nfunction addAssetToAssetList(id, error, name, claimId, shortId, claimData) {\n return {\n type: actions.ASSET_ADD,\n data: { id: id, error: error, name: name, claimId: claimId, shortId: shortId, claimData: claimData }\n };\n}\n\n// channel actions\n\nfunction addNewChannelToChannelList(id, name, shortId, longId, claimsData) {\n return {\n type: actions.CHANNEL_ADD,\n data: { id: id, name: name, shortId: shortId, longId: longId, claimsData: claimsData }\n };\n};\n\nfunction onUpdateChannelClaims(channelKey, name, longId, page) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_ASYNC,\n data: { channelKey: channelKey, name: name, longId: longId, page: page }\n };\n};\n\nfunction updateChannelClaims(channelListId, claimsData) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_SUCCESS,\n data: { channelListId: channelListId, claimsData: claimsData }\n };\n};\n\n// display a file\n\nfunction fileRequested(name, claimId) {\n return {\n type: actions.FILE_REQUESTED,\n data: { name: name, claimId: claimId }\n };\n};\n\nfunction updateFileAvailability(status) {\n return {\n type: actions.FILE_AVAILABILITY_UPDATE,\n data: status\n };\n};\n\nfunction updateDisplayAssetError(error) {\n return {\n type: actions.DISPLAY_ASSET_ERROR,\n data: error\n };\n};\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(84);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var site = _ref.site;\n var defaultDescription = site.defaultDescription,\n defaultThumbnail = site.defaultThumbnail,\n siteDescription = site.description,\n siteHost = site.host,\n siteTitle = site.title,\n siteTwitter = site.twitter;\n\n return {\n defaultDescription: defaultDescription,\n defaultThumbnail: defaultThumbnail,\n siteDescription: siteDescription,\n siteHost: siteHost,\n siteTitle: siteTitle,\n siteTwitter: siteTwitter\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"prop-types\");\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = request;\n\n__webpack_require__(91);\n\n/**\n * Parses the JSON returned by a network request\n *\n * @param {object} response A response from a network request\n *\n * @return {object} The parsed JSON from the request\n */\nfunction parseJSON(response) {\n if (response.status === 204 || response.status === 205) {\n return null;\n }\n return response.json();\n}\n\n/**\n * Parses the status returned by a network request\n *\n * @param {object} response A response from a network request\n * @param {object} response The parsed JSON from the network request\n *\n * @return {object | undefined} Returns object with status and statusText, or undefined\n */\nfunction checkStatus(response, jsonResponse) {\n if (response.status >= 200 && response.status < 300) {\n return jsonResponse;\n }\n var error = new Error(jsonResponse.message);\n error.response = response;\n throw error;\n}\n\n/**\n * Requests a URL, returning a promise\n *\n * @param {string} url The URL we want to request\n * @param {object} [options] The options we want to pass to \"fetch\"\n *\n * @return {object} The response data\n */\n\nfunction request(url, options) {\n return fetch(url, options).then(function (response) {\n return Promise.all([response, parseJSON(response)]);\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n response = _ref2[0],\n jsonResponse = _ref2[1];\n\n return checkStatus(response, jsonResponse);\n });\n}\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// request actions\nvar HANDLE_SHOW_URI = exports.HANDLE_SHOW_URI = 'HANDLE_SHOW_URI';\nvar REQUEST_ERROR = exports.REQUEST_ERROR = 'REQUEST_ERROR';\nvar REQUEST_UPDATE = exports.REQUEST_UPDATE = 'REQUEST_UPDATE';\nvar ASSET_REQUEST_NEW = exports.ASSET_REQUEST_NEW = 'ASSET_REQUEST_NEW';\nvar CHANNEL_REQUEST_NEW = exports.CHANNEL_REQUEST_NEW = 'CHANNEL_REQUEST_NEW';\nvar REQUEST_LIST_ADD = exports.REQUEST_LIST_ADD = 'REQUEST_LIST_ADD';\n\n// asset actions\nvar ASSET_ADD = exports.ASSET_ADD = 'ASSET_ADD';\n\n// channel actions\nvar CHANNEL_ADD = exports.CHANNEL_ADD = 'CHANNEL_ADD';\n\nvar CHANNEL_CLAIMS_UPDATE_ASYNC = exports.CHANNEL_CLAIMS_UPDATE_ASYNC = 'CHANNEL_CLAIMS_UPDATE_ASYNC';\nvar CHANNEL_CLAIMS_UPDATE_SUCCESS = exports.CHANNEL_CLAIMS_UPDATE_SUCCESS = 'CHANNEL_CLAIMS_UPDATE_SUCCESS';\n\n// asset/file display actions\nvar FILE_REQUESTED = exports.FILE_REQUESTED = 'FILE_REQUESTED';\nvar FILE_AVAILABILITY_UPDATE = exports.FILE_AVAILABILITY_UPDATE = 'FILE_AVAILABILITY_UPDATE';\nvar DISPLAY_ASSET_ERROR = exports.DISPLAY_ASSET_ERROR = 'DISPLAY_ASSET_ERROR';\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar selectAsset = exports.selectAsset = function selectAsset(show) {\n var request = show.requestList[show.request.id];\n var assetKey = request.key;\n return show.assetList[assetKey];\n};\n\nvar selectShowState = exports.selectShowState = function selectShowState(state) {\n return state.show;\n};\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-helmet\");\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"redux-saga/effects\");\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar axios = __webpack_require__(58);\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(59),\n _require$api = _require.api,\n apiHost = _require$api.apiHost,\n apiPort = _require$api.apiPort;\n\nvar lbryApiUri = 'http://' + apiHost + ':' + apiPort;\n\nvar _require2 = __webpack_require__(17),\n chooseGaLbrynetPublishLabel = _require2.chooseGaLbrynetPublishLabel,\n sendGATimingEvent = _require2.sendGATimingEvent;\n\nvar handleLbrynetResponse = function handleLbrynetResponse(_ref, resolve, reject) {\n var data = _ref.data;\n\n logger.debug('lbry api data:', data);\n if (data.result) {\n // check for an error\n if (data.result.error) {\n logger.debug('Lbrynet api error:', data.result.error);\n reject(new Error(data.result.error));\n return;\n };\n resolve(data.result);\n return;\n }\n // fallback in case it just timed out\n reject(JSON.stringify(data));\n};\n\nmodule.exports = {\n publishClaim: function publishClaim(publishParams) {\n logger.debug('lbryApi >> Publishing claim to \"' + publishParams.name + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'publish',\n params: publishParams\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'publish', chooseGaLbrynetPublishLabel(publishParams), gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getClaim: function getClaim(uri) {\n logger.debug('lbryApi >> Getting Claim for \"' + uri + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'get',\n params: { uri: uri, timeout: 20 }\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'getClaim', 'GET', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getClaimList: function getClaimList(claimName) {\n logger.debug('lbryApi >> Getting claim_list for \"' + claimName + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'claim_list',\n params: { name: claimName }\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'getClaimList', 'CLAIM_LIST', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n resolveUri: function resolveUri(uri) {\n logger.debug('lbryApi >> Resolving URI for \"' + uri + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'resolve',\n params: { uri: uri }\n }).then(function (_ref2) {\n var data = _ref2.data;\n\n sendGATimingEvent('lbrynet', 'resolveUri', 'RESOLVE', gaStartTime, Date.now());\n if (data.result[uri].error) {\n // check for errors\n reject(data.result[uri].error);\n } else {\n // if no errors, resolve\n resolve(data.result[uri]);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getDownloadDirectory: function getDownloadDirectory() {\n logger.debug('lbryApi >> Retrieving the download directory path from lbry daemon...');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'settings_get'\n }).then(function (_ref3) {\n var data = _ref3.data;\n\n sendGATimingEvent('lbrynet', 'getDownloadDirectory', 'SETTINGS_GET', gaStartTime, Date.now());\n if (data.result) {\n resolve(data.result.download_directory);\n } else {\n return new Error('Successfully connected to lbry daemon, but unable to retrieve the download directory.');\n }\n }).catch(function (error) {\n logger.error('Lbrynet Error:', error);\n resolve('/home/lbry/Downloads/');\n });\n });\n },\n createChannel: function createChannel(name) {\n logger.debug('lbryApi >> Creating channel for ' + name + '...');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'channel_new',\n params: {\n channel_name: name,\n amount: 0.1\n }\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'createChannel', 'CHANNEL_NEW', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n }\n};\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\nvar ua = __webpack_require__(60);\n\nvar _require = __webpack_require__(5),\n googleId = _require.analytics.googleId,\n title = _require.details.title;\n\nfunction createServeEventParams(headers, ip, originalUrl) {\n return {\n eventCategory: 'client requests',\n eventAction: 'serve request',\n eventLabel: originalUrl,\n ipOverride: ip,\n userAgentOverride: headers['user-agent']\n };\n};\n\nfunction createPublishTimingEventParams(category, variable, label, startTime, endTime) {\n var duration = endTime - startTime;\n return {\n userTimingCategory: category,\n userTimingVariableName: variable,\n userTimingTime: duration,\n userTimingLabel: label\n };\n};\n\nfunction sendGoogleAnalyticsEvent(ip, params) {\n var visitorId = ip.replace(/\\./g, '-');\n var visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.event(params, function (err) {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n });\n};\n\nfunction sendGoogleAnalyticsTiming(visitorId, params) {\n var visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.timing(params, function (err) {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n logger.debug('Timing event successfully sent to google analytics');\n });\n};\n\nmodule.exports = {\n sendGAServeEvent: function sendGAServeEvent(headers, ip, originalUrl) {\n var params = createServeEventParams(headers, ip, originalUrl);\n sendGoogleAnalyticsEvent(ip, params);\n },\n sendGATimingEvent: function sendGATimingEvent(category, variable, label, startTime, endTime) {\n var params = createPublishTimingEventParams(category, variable, label, startTime, endTime);\n sendGoogleAnalyticsTiming(title, params);\n },\n chooseGaLbrynetPublishLabel: function chooseGaLbrynetPublishLabel(_ref) {\n var channelName = _ref.channel_name,\n channelId = _ref.channel_id;\n\n return channelName || channelId ? 'PUBLISH_IN_CHANNEL_CLAIM' : 'PUBLISH_ANONYMOUS_CLAIM';\n }\n};\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"redux\");\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.updateLoggedInChannel = updateLoggedInChannel;\n\nvar _channel_action_types = __webpack_require__(34);\n\nvar actions = _interopRequireWildcard(_channel_action_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// export action creators\n\nfunction updateLoggedInChannel(name, shortId, longId) {\n return {\n type: actions.CHANNEL_UPDATE,\n data: {\n name: name,\n shortId: shortId,\n longId: longId\n }\n };\n};\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _ActiveStatusBar = __webpack_require__(113);\n\nvar _ActiveStatusBar2 = _interopRequireDefault(_ActiveStatusBar);\n\nvar _InactiveStatusBar = __webpack_require__(114);\n\nvar _InactiveStatusBar2 = _interopRequireDefault(_InactiveStatusBar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ProgressBar = function (_React$Component) {\n _inherits(ProgressBar, _React$Component);\n\n function ProgressBar(props) {\n _classCallCheck(this, ProgressBar);\n\n var _this = _possibleConstructorReturn(this, (ProgressBar.__proto__ || Object.getPrototypeOf(ProgressBar)).call(this, props));\n\n _this.state = {\n bars: [],\n index: 0,\n incrementer: 1\n };\n _this.createBars = _this.createBars.bind(_this);\n _this.startProgressBar = _this.startProgressBar.bind(_this);\n _this.updateProgressBar = _this.updateProgressBar.bind(_this);\n _this.stopProgressBar = _this.stopProgressBar.bind(_this);\n return _this;\n }\n\n _createClass(ProgressBar, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.createBars();\n this.startProgressBar();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.stopProgressBar();\n }\n }, {\n key: 'createBars',\n value: function createBars() {\n var bars = [];\n for (var i = 0; i <= this.props.size; i++) {\n bars.push({ isActive: false });\n }\n this.setState({ bars: bars });\n }\n }, {\n key: 'startProgressBar',\n value: function startProgressBar() {\n this.updateInterval = setInterval(this.updateProgressBar.bind(this), 300);\n }\n }, {\n key: 'updateProgressBar',\n value: function updateProgressBar() {\n var index = this.state.index;\n var incrementer = this.state.incrementer;\n var bars = this.state.bars;\n // flip incrementer if necessary, to stay in bounds\n if (index < 0 || index > this.props.size) {\n incrementer = incrementer * -1;\n index += incrementer;\n }\n // update the indexed bar\n if (incrementer > 0) {\n bars[index].isActive = true;\n } else {\n bars[index].isActive = false;\n };\n // increment index\n index += incrementer;\n // update state\n this.setState({\n bars: bars,\n incrementer: incrementer,\n index: index\n });\n }\n }, {\n key: 'stopProgressBar',\n value: function stopProgressBar() {\n clearInterval(this.updateInterval);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n this.state.bars.map(function (bar, index) {\n return bar.isActive ? _react2.default.createElement(_ActiveStatusBar2.default, { key: index }) : _react2.default.createElement(_InactiveStatusBar2.default, { key: index });\n })\n );\n }\n }]);\n\n return ProgressBar;\n}(_react2.default.Component);\n\n;\n\nProgressBar.propTypes = {\n size: _propTypes2.default.number.isRequired\n};\n\nexports.default = ProgressBar;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ErrorPage = function (_React$Component) {\n _inherits(ErrorPage, _React$Component);\n\n function ErrorPage() {\n _classCallCheck(this, ErrorPage);\n\n return _possibleConstructorReturn(this, (ErrorPage.__proto__ || Object.getPrototypeOf(ErrorPage)).apply(this, arguments));\n }\n\n _createClass(ErrorPage, [{\n key: 'render',\n value: function render() {\n var error = this.props.error;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'p',\n null,\n error\n )\n )\n );\n }\n }]);\n\n return ErrorPage;\n}(_react2.default.Component);\n\n;\n\nErrorPage.propTypes = {\n error: _propTypes2.default.string.isRequired\n};\n\nexports.default = ErrorPage;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"passport\");\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"passport-local\");\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"sequelize\");\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = {\n returnShortId: function returnShortId(claimsArray, longId) {\n var claimIndex = void 0;\n var shortId = longId.substring(0, 1); // default short id is the first letter\n var shortIdLength = 0;\n // find the index of this claim id\n claimIndex = claimsArray.findIndex(function (element) {\n return element.claimId === longId;\n });\n if (claimIndex < 0) {\n throw new Error('claim id not found in claims list');\n }\n // get an array of all claims with lower height\n var possibleMatches = claimsArray.slice(0, claimIndex);\n // remove certificates with the same prefixes until none are left.\n while (possibleMatches.length > 0) {\n shortIdLength += 1;\n shortId = longId.substring(0, shortIdLength);\n possibleMatches = possibleMatches.filter(function (element) {\n return element.claimId && element.claimId.substring(0, shortIdLength) === shortId;\n });\n }\n return shortId;\n }\n};\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\nvar fs = __webpack_require__(74);\n\nvar _require = __webpack_require__(5),\n details = _require.details,\n publishing = _require.publishing;\n\nmodule.exports = {\n parsePublishApiRequestBody: function parsePublishApiRequestBody(_ref) {\n var name = _ref.name,\n nsfw = _ref.nsfw,\n license = _ref.license,\n title = _ref.title,\n description = _ref.description,\n thumbnail = _ref.thumbnail;\n\n // validate name\n if (!name) {\n throw new Error('no name field found in request');\n }\n var invalidNameCharacters = /[^A-Za-z0-9,-]/.exec(name);\n if (invalidNameCharacters) {\n throw new Error('The claim name you provided is not allowed. Only the following characters are allowed: A-Z, a-z, 0-9, and \"-\"');\n }\n // optional parameters\n nsfw = nsfw === 'true';\n license = license || null;\n title = title || null;\n description = description || null;\n thumbnail = thumbnail || null;\n // return results\n return {\n name: name,\n nsfw: nsfw,\n license: license,\n title: title,\n description: description,\n thumbnail: thumbnail\n };\n },\n parsePublishApiRequestFiles: function parsePublishApiRequestFiles(_ref2) {\n var file = _ref2.file,\n thumbnail = _ref2.thumbnail;\n\n // make sure a file was provided\n if (!file) {\n throw new Error('no file with key of [file] found in request');\n }\n if (!file.path) {\n throw new Error('no file path found');\n }\n if (!file.type) {\n throw new Error('no file type found');\n }\n if (!file.size) {\n throw new Error('no file type found');\n }\n // validate the file name\n if (/'/.test(file.name)) {\n throw new Error('apostrophes are not allowed in the file name');\n }\n // validate the file\n module.exports.validateFileTypeAndSize(file);\n // return results\n return {\n fileName: file.name,\n filePath: file.path,\n fileType: file.type,\n thumbnailFileName: thumbnail ? thumbnail.name : null,\n thumbnailFilePath: thumbnail ? thumbnail.path : null,\n thumbnailFileType: thumbnail ? thumbnail.type : null\n };\n },\n validateFileTypeAndSize: function validateFileTypeAndSize(file) {\n // check file type and size\n switch (file.type) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n if (file.size > 10000000) {\n logger.debug('publish > file validation > .jpeg/.jpg/.png was too big');\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .gif was too big');\n throw new Error('Sorry, .gifs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .mp4 was too big');\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n logger.debug('publish > file validation > unrecognized file type');\n throw new Error('The ' + file.type + ' content type is not supported. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n return file;\n },\n createBasicPublishParams: function createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail) {\n logger.debug('Creating Publish Parameters');\n // provide defaults for title\n if (title === null || title.trim() === '') {\n title = name;\n }\n // provide default for description\n if (description === null || description.trim() === '') {\n description = '';\n }\n // provide default for license\n if (license === null || license.trim() === '') {\n license = ' '; // default to empty string\n }\n // create the publish params\n var publishParams = {\n name: name,\n file_path: filePath,\n bid: 0.01,\n metadata: {\n description: description,\n title: title,\n author: details.title,\n language: 'en',\n license: license,\n nsfw: nsfw\n },\n claim_address: publishing.primaryClaimAddress\n };\n // add thumbnail to channel if video\n if (thumbnail) {\n publishParams['metadata']['thumbnail'] = thumbnail;\n }\n return publishParams;\n },\n createThumbnailPublishParams: function createThumbnailPublishParams(thumbnailFilePath, claimName, license, nsfw) {\n if (!thumbnailFilePath) {\n return;\n }\n logger.debug('Creating Thumbnail Publish Parameters');\n // create the publish params\n return {\n name: claimName + '-thumb',\n file_path: thumbnailFilePath,\n bid: 0.01,\n metadata: {\n title: claimName + ' thumbnail',\n description: 'a thumbnail for ' + claimName,\n author: details.title,\n language: 'en',\n license: license,\n nsfw: nsfw\n },\n claim_address: publishing.primaryClaimAddress,\n channel_name: publishing.thumbnailChannel,\n channel_id: publishing.thumbnailChannelId\n };\n },\n deleteTemporaryFile: function deleteTemporaryFile(filePath) {\n fs.unlink(filePath, function (err) {\n if (err) {\n logger.error('error deleting temporary file ' + filePath);\n throw err;\n }\n logger.debug('successfully deleted ' + filePath);\n });\n },\n addGetResultsToFileData: function addGetResultsToFileData(fileInfo, getResult) {\n fileInfo.fileName = getResult.file_name;\n fileInfo.filePath = getResult.download_path;\n return fileInfo;\n },\n createFileData: function createFileData(_ref3) {\n var name = _ref3.name,\n claimId = _ref3.claimId,\n outpoint = _ref3.outpoint,\n height = _ref3.height,\n address = _ref3.address,\n nsfw = _ref3.nsfw,\n contentType = _ref3.contentType;\n\n return {\n name: name,\n claimId: claimId,\n outpoint: outpoint,\n height: height,\n address: address,\n fileName: '',\n filePath: '',\n fileType: contentType,\n nsfw: nsfw\n };\n }\n};\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n handleErrorResponse: function handleErrorResponse(originalUrl, ip, error, res) {\n logger.error('Error on ' + originalUrl, module.exports.useObjectPropertiesIfNoKeys(error));\n\n var _module$exports$retur = module.exports.returnErrorMessageAndStatus(error),\n _module$exports$retur2 = _slicedToArray(_module$exports$retur, 2),\n status = _module$exports$retur2[0],\n message = _module$exports$retur2[1];\n\n res.status(status).json(module.exports.createErrorResponsePayload(status, message));\n },\n returnErrorMessageAndStatus: function returnErrorMessageAndStatus(error) {\n var status = void 0,\n message = void 0;\n // check for daemon being turned off\n if (error.code === 'ECONNREFUSED') {\n status = 503;\n message = 'Connection refused. The daemon may not be running.';\n // fallback for everything else\n } else {\n status = 400;\n if (error.message) {\n message = error.message;\n } else {\n message = error;\n };\n };\n return [status, message];\n },\n useObjectPropertiesIfNoKeys: function useObjectPropertiesIfNoKeys(err) {\n if (Object.keys(err).length === 0) {\n var newErrorObject = {};\n Object.getOwnPropertyNames(err).forEach(function (key) {\n newErrorObject[key] = err[key];\n });\n return newErrorObject;\n }\n return err;\n },\n createErrorResponsePayload: function createErrorResponsePayload(status, message) {\n return {\n status: status,\n success: false,\n message: message\n };\n }\n};\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar db = __webpack_require__(6);\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(76),\n returnPaginatedChannelClaims = _require.returnPaginatedChannelClaims;\n\nvar NO_CHANNEL = 'NO_CHANNEL';\nvar NO_CLAIM = 'NO_CLAIM';\nvar NO_FILE = 'NO_FILE';\n\nmodule.exports = {\n getClaimId: function getClaimId(channelName, channelClaimId, name, claimId) {\n if (channelName) {\n return module.exports.getClaimIdByChannel(channelName, channelClaimId, name);\n } else {\n return module.exports.getClaimIdByClaim(name, claimId);\n }\n },\n getClaimIdByClaim: function getClaimIdByClaim(claimName, claimId) {\n logger.debug('getClaimIdByClaim(' + claimName + ', ' + claimId + ')');\n return new Promise(function (resolve, reject) {\n db.Claim.getLongClaimId(claimName, claimId).then(function (longClaimId) {\n if (!longClaimId) {\n resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getClaimIdByChannel: function getClaimIdByChannel(channelName, channelClaimId, claimName) {\n logger.debug('getClaimIdByChannel(' + channelName + ', ' + channelClaimId + ', ' + claimName + ')');\n return new Promise(function (resolve, reject) {\n db.Certificate.getLongChannelId(channelName, channelClaimId) // 1. get the long channel id\n .then(function (longChannelId) {\n if (!longChannelId) {\n return [null, null];\n }\n return Promise.all([longChannelId, db.Claim.getClaimIdByLongChannelId(longChannelId, claimName)]); // 2. get the long claim id\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n longChannelId = _ref2[0],\n longClaimId = _ref2[1];\n\n if (!longChannelId) {\n return resolve(NO_CHANNEL);\n }\n if (!longClaimId) {\n return resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getChannelData: function getChannelData(channelName, channelClaimId, page) {\n return new Promise(function (resolve, reject) {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId).then(function (longChannelClaimId) {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Certificate.getShortChannelIdFromLongChannelId(longChannelClaimId, channelName)]);\n }).then(function (_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n longChannelClaimId = _ref4[0],\n shortChannelClaimId = _ref4[1];\n\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. return all the channel information\n resolve({\n channelName: channelName,\n longChannelClaimId: longChannelClaimId,\n shortChannelClaimId: shortChannelClaimId\n });\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getChannelClaims: function getChannelClaims(channelName, channelClaimId, page) {\n return new Promise(function (resolve, reject) {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId).then(function (longChannelClaimId) {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Claim.getAllChannelClaims(longChannelClaimId)]);\n }).then(function (_ref5) {\n var _ref6 = _slicedToArray(_ref5, 2),\n longChannelClaimId = _ref6[0],\n channelClaimsArray = _ref6[1];\n\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. format the data for the view, including pagination\n var paginatedChannelViewData = returnPaginatedChannelClaims(channelName, longChannelClaimId, channelClaimsArray, page);\n // 4. return all the channel information and contents\n resolve(paginatedChannelViewData);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getLocalFileRecord: function getLocalFileRecord(claimId, name) {\n return db.File.findOne({ where: { claimId: claimId, name: name } }).then(function (file) {\n if (!file) {\n return NO_FILE;\n }\n return file.dataValues;\n });\n }\n};\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _server = __webpack_require__(30);\n\nvar _redux = __webpack_require__(18);\n\nvar _index = __webpack_require__(31);\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _index3 = __webpack_require__(36);\n\nvar _index4 = _interopRequireDefault(_index3);\n\nvar _app = __webpack_require__(37);\n\nvar _app2 = _interopRequireDefault(_app);\n\nvar _renderFullPage = __webpack_require__(43);\n\nvar _renderFullPage2 = _interopRequireDefault(_renderFullPage);\n\nvar _reactHelmet = __webpack_require__(14);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = function (req, res) {\n var context = {};\n\n // create a new Redux store instance\n var store = (0, _redux.createStore)(_index2.default);\n\n // render component to a string\n var html = (0, _server.renderToString)(_react2.default.createElement(\n _reactRedux.Provider,\n { store: store },\n _react2.default.createElement(\n _reactRouterDom.StaticRouter,\n { location: req.url, context: context },\n _react2.default.createElement(\n _index4.default,\n null,\n _react2.default.createElement(_app2.default, null)\n )\n )\n ));\n\n // get head tags from helmet\n var helmet = _reactHelmet2.default.renderStatic();\n\n // check for a redirect\n if (context.url) {\n // Somewhere a `` was rendered\n return res.redirect(301, context.url);\n } else {}\n // we're good, send the response\n\n\n // get the initial state from our Redux store\n var preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send((0, _renderFullPage2.default)(helmet, html, preloadedState));\n};\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-dom/server\");\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _redux = __webpack_require__(18);\n\nvar _publish = __webpack_require__(78);\n\nvar _publish2 = _interopRequireDefault(_publish);\n\nvar _channel = __webpack_require__(79);\n\nvar _channel2 = _interopRequireDefault(_channel);\n\nvar _show = __webpack_require__(80);\n\nvar _show2 = _interopRequireDefault(_show);\n\nvar _site = __webpack_require__(81);\n\nvar _site2 = _interopRequireDefault(_site);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = (0, _redux.combineReducers)({\n channel: _channel2.default,\n publish: _publish2.default,\n show: _show2.default,\n site: _site2.default\n});\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar FILE_SELECTED = exports.FILE_SELECTED = 'FILE_SELECTED';\nvar FILE_CLEAR = exports.FILE_CLEAR = 'FILE_CLEAR';\nvar METADATA_UPDATE = exports.METADATA_UPDATE = 'METADATA_UPDATE';\nvar CLAIM_UPDATE = exports.CLAIM_UPDATE = 'CLAIM_UPDATE';\nvar SET_PUBLISH_IN_CHANNEL = exports.SET_PUBLISH_IN_CHANNEL = 'SET_PUBLISH_IN_CHANNEL';\nvar PUBLISH_STATUS_UPDATE = exports.PUBLISH_STATUS_UPDATE = 'PUBLISH_STATUS_UPDATE';\nvar ERROR_UPDATE = exports.ERROR_UPDATE = 'ERROR_UPDATE';\nvar SELECTED_CHANNEL_UPDATE = exports.SELECTED_CHANNEL_UPDATE = 'SELECTED_CHANNEL_UPDATE';\nvar TOGGLE_METADATA_INPUTS = exports.TOGGLE_METADATA_INPUTS = 'TOGGLE_METADATA_INPUTS';\nvar THUMBNAIL_NEW = exports.THUMBNAIL_NEW = 'THUMBNAIL_NEW';\nvar PUBLISH_START = exports.PUBLISH_START = 'PUBLISH_START';\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LOGIN = exports.LOGIN = 'Existing';\nvar CREATE = exports.CREATE = 'New';\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CHANNEL_UPDATE = exports.CHANNEL_UPDATE = 'CHANNEL_UPDATE';\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LOCAL_CHECK = exports.LOCAL_CHECK = 'LOCAL_CHECK';\nvar UNAVAILABLE = exports.UNAVAILABLE = 'UNAVAILABLE';\nvar ERROR = exports.ERROR = 'ERROR';\nvar AVAILABLE = exports.AVAILABLE = 'AVAILABLE';\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactGa = __webpack_require__(82);\n\nvar _reactGa2 = _interopRequireDefault(_reactGa);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(5),\n googleId = _require.analytics.googleId;\n\n_reactGa2.default.initialize(googleId);\n\nvar GAListener = function (_React$Component) {\n _inherits(GAListener, _React$Component);\n\n function GAListener() {\n _classCallCheck(this, GAListener);\n\n return _possibleConstructorReturn(this, (GAListener.__proto__ || Object.getPrototypeOf(GAListener)).apply(this, arguments));\n }\n\n _createClass(GAListener, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.sendPageView(this.props.history.location);\n this.props.history.listen(this.sendPageView);\n }\n }, {\n key: 'sendPageView',\n value: function sendPageView(location) {\n _reactGa2.default.set({ page: location.pathname });\n _reactGa2.default.pageview(location.pathname);\n }\n }, {\n key: 'render',\n value: function render() {\n return this.props.children;\n }\n }]);\n\n return GAListener;\n}(_react2.default.Component);\n\nexports.default = (0, _reactRouterDom.withRouter)(GAListener);\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _HomePage = __webpack_require__(83);\n\nvar _HomePage2 = _interopRequireDefault(_HomePage);\n\nvar _AboutPage = __webpack_require__(120);\n\nvar _AboutPage2 = _interopRequireDefault(_AboutPage);\n\nvar _LoginPage = __webpack_require__(121);\n\nvar _LoginPage2 = _interopRequireDefault(_LoginPage);\n\nvar _ShowPage = __webpack_require__(123);\n\nvar _ShowPage2 = _interopRequireDefault(_ShowPage);\n\nvar _FourOhFourPage = __webpack_require__(140);\n\nvar _FourOhFourPage2 = _interopRequireDefault(_FourOhFourPage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// or use the provided local homepage\nvar App = function App() {\n return _react2.default.createElement(\n _reactRouterDom.Switch,\n null,\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/', component: _HomePage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/about', component: _AboutPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/login', component: _LoginPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/:identifier/:claim', component: _ShowPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/:claim', component: _ShowPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { component: _FourOhFourPage2.default })\n );\n};\n\nexports.default = App;\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(94);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n file: publish.file,\n thumbnail: publish.thumbnail,\n fileError: publish.error.file\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n selectFile: function selectFile(file) {\n dispatch((0, _publish.selectFile)(file));\n },\n setFileError: function setFileError(value) {\n dispatch((0, _publish.clearFile)());\n dispatch((0, _publish.updateError)('file', value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _channel = __webpack_require__(19);\n\nvar _view = __webpack_require__(111);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _publish = __webpack_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onChannelLogin: function onChannelLogin(name, shortId, longId) {\n dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));\n dispatch((0, _publish.updateSelectedChannel)(name));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(null, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _channel = __webpack_require__(19);\n\nvar _view = __webpack_require__(112);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _publish = __webpack_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onChannelLogin: function onChannelLogin(name, shortId, longId) {\n dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));\n dispatch((0, _publish.updateSelectedChannel)(name));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(null, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CHANNEL = exports.CHANNEL = 'CHANNEL';\nvar ASSET_LITE = exports.ASSET_LITE = 'ASSET_LITE';\nvar ASSET_DETAILS = exports.ASSET_DETAILS = 'ASSET_DETAILS';\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(127);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _show = __webpack_require__(8);\n\nvar _show2 = __webpack_require__(13);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select error and status\n var error = show.displayAsset.error;\n var status = show.displayAsset.status;\n // select asset\n var asset = (0, _show2.selectAsset)(show);\n // return props\n return {\n error: error,\n status: status,\n asset: asset\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onFileRequest: function onFileRequest(name, claimId) {\n dispatch((0, _show.fileRequested)(name, claimId));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (helmet, html, preloadedState) {\n // take the html and preloadedState and return the full page\n return '\\n \\n \\n \\n \\n \\n \\n \\n ' + helmet.title.toString() + '\\n ' + helmet.meta.toString() + '\\n ' + helmet.link.toString() + '\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
' + html + '
\\n
\\n \\n \\n \\n \\n ';\n};\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar selectSiteState = exports.selectSiteState = function selectSiteState(state) {\n return state.site;\n};\n\nvar selectSiteHost = exports.selectSiteHost = function selectSiteHost(state) {\n return state.site.host;\n};\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(46);\n__webpack_require__(47);\nmodule.exports = __webpack_require__(48);\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"babel-polyfill\");\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"whatwg-fetch\");\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// app dependencies\nvar express = __webpack_require__(49);\nvar bodyParser = __webpack_require__(50);\nvar expressHandlebars = __webpack_require__(51);\nvar Handlebars = __webpack_require__(52);\nvar helmet = __webpack_require__(53);\nvar passport = __webpack_require__(22);\n\nvar _require = __webpack_require__(54),\n serializeSpeechUser = _require.serializeSpeechUser,\n deserializeSpeechUser = _require.deserializeSpeechUser;\n\nvar cookieSession = __webpack_require__(55);\nvar http = __webpack_require__(56);\n// logging dependencies\nvar logger = __webpack_require__(2);\n\nvar _require2 = __webpack_require__(5),\n sessionKey = _require2.auth.sessionKey,\n PORT = _require2.details.port;\n\n// create an Express application\n\n\nvar app = express();\n\n// trust the proxy to get ip address for us\napp.enable('trust proxy');\n\n// add middleware\napp.use(helmet()); // set HTTP headers to protect against well-known web vulnerabilties\napp.use(express.static(__dirname + '/public')); // 'express.static' to serve static files from public directory\napp.use(bodyParser.json()); // 'body parser' for parsing application/json\napp.use(bodyParser.urlencoded({ extended: true })); // 'body parser' for parsing application/x-www-form-urlencoded\napp.use(function (req, res, next) {\n // custom logging middleware to log all incoming http requests\n logger.verbose('Request on ' + req.originalUrl + ' from ' + req.ip);\n next();\n});\n\n// configure passport\npassport.serializeUser(serializeSpeechUser);\npassport.deserializeUser(deserializeSpeechUser);\nvar localSignupStrategy = __webpack_require__(57);\nvar localLoginStrategy = __webpack_require__(69);\npassport.use('local-signup', localSignupStrategy);\npassport.use('local-login', localLoginStrategy);\n// initialize passport\napp.use(cookieSession({\n name: 'session',\n keys: [sessionKey],\n maxAge: 24 * 60 * 60 * 1000 // i.e. 24 hours\n}));\napp.use(passport.initialize());\napp.use(passport.session());\n\n// configure handlebars & register it with express app\nvar hbs = expressHandlebars.create({\n defaultLayout: 'embed',\n handlebars: Handlebars\n});\napp.engine('handlebars', hbs.engine);\napp.set('view engine', 'handlebars');\n\n// set the routes on the app\n__webpack_require__(70)(app);\n__webpack_require__(71)(app);\n__webpack_require__(77)(app);\n__webpack_require__(142)(app);\n__webpack_require__(153)(app);\n\n// create server\nvar server = http.Server(app);\n\n// configure logger\n__webpack_require__(154)(logger);\n__webpack_require__(156)(logger);\n\n// sync sequelize\nvar db = __webpack_require__(6);\ndb.sequelize.sync()\n// start the server\n.then(function () {\n server.listen(PORT, function () {\n logger.info('Server is listening on PORT ' + PORT);\n });\n}).catch(function (error) {\n logger.error('Startup Error:', error);\n});\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"express\");\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"body-parser\");\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"express-handlebars\");\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"handlebars\");\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"helmet\");\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n serializeSpeechUser: function serializeSpeechUser(user, done) {\n // returns user data to be serialized into session\n logger.debug('serializing user');\n done(null, user);\n },\n deserializeSpeechUser: function deserializeSpeechUser(user, done) {\n // deserializes session and populates additional info to req.user\n logger.debug('deserializing user');\n done(null, user);\n }\n};\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"cookie-session\");\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"http\");\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar PassportLocalStrategy = __webpack_require__(23).Strategy;\nvar lbryApi = __webpack_require__(16);\nvar logger = __webpack_require__(2);\nvar db = __webpack_require__(6);\n\nmodule.exports = new PassportLocalStrategy({\n usernameField: 'username',\n passwordField: 'password'\n}, function (username, password, done) {\n logger.verbose('new channel signup request. user: ' + username + ' pass: ' + password + ' .');\n var userInfo = {};\n // server-side validaton of inputs (username, password)\n\n // create the channel and retrieve the metadata\n return lbryApi.createChannel('@' + username).then(function (tx) {\n // create user record\n var userData = {\n userName: username,\n password: password\n };\n logger.verbose('userData >', userData);\n // create user record\n var channelData = {\n channelName: '@' + username,\n channelClaimId: tx.claim_id\n };\n logger.verbose('channelData >', channelData);\n // create certificate record\n var certificateData = {\n claimId: tx.claim_id,\n name: '@' + username\n // address,\n };\n logger.verbose('certificateData >', certificateData);\n // save user and certificate to db\n return Promise.all([db.User.create(userData), db.Channel.create(channelData), db.Certificate.create(certificateData)]);\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 3),\n newUser = _ref2[0],\n newChannel = _ref2[1],\n newCertificate = _ref2[2];\n\n logger.verbose('user and certificate successfully created');\n // store the relevant newUser info to be passed back for req.User\n userInfo['id'] = newUser.id;\n userInfo['userName'] = newUser.userName;\n userInfo['channelName'] = newChannel.channelName;\n userInfo['channelClaimId'] = newChannel.channelClaimId;\n // associate the instances\n return Promise.all([newCertificate.setChannel(newChannel), newChannel.setUser(newUser)]);\n }).then(function () {\n logger.verbose('user and certificate successfully associated');\n return db.Certificate.getShortChannelIdFromLongChannelId(userInfo.channelClaimId, userInfo.channelName);\n }).then(function (shortChannelId) {\n userInfo['shortChannelId'] = shortChannelId;\n return done(null, userInfo);\n }).catch(function (error) {\n logger.error('signup error', error);\n return done(error);\n });\n});\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"axios\");\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar lbryConfig = {\n api: {\n apiHost: 'localhost',\n apiPort: '5279'\n }\n};\n\nmodule.exports = lbryConfig;\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"universal-analytics\");\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction MysqlConfig() {\n this.database = 'default';\n this.username = 'default';\n this.password = 'default';\n};\n\nmodule.exports = new MysqlConfig();\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(25),\n returnShortId = _require.returnShortId;\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n INTEGER = _ref.INTEGER,\n TEXT = _ref.TEXT,\n DECIMAL = _ref.DECIMAL;\n\n var Certificate = sequelize.define('Certificate', {\n address: {\n type: STRING,\n default: null\n },\n amount: {\n type: DECIMAL(19, 8),\n default: null\n },\n claimId: {\n type: STRING,\n default: null\n },\n claimSequence: {\n type: INTEGER,\n default: null\n },\n decodedClaim: {\n type: BOOLEAN,\n default: null\n },\n depth: {\n type: INTEGER,\n default: null\n },\n effectiveAmount: {\n type: DECIMAL(19, 8),\n default: null\n },\n hasSignature: {\n type: BOOLEAN,\n default: null\n },\n height: {\n type: INTEGER,\n default: null\n },\n hex: {\n type: TEXT('long'),\n default: null\n },\n name: {\n type: STRING,\n default: null\n },\n nout: {\n type: INTEGER,\n default: null\n },\n txid: {\n type: STRING,\n default: null\n },\n validAtHeight: {\n type: INTEGER,\n default: null\n },\n outpoint: {\n type: STRING,\n default: null\n },\n valueVersion: {\n type: STRING,\n default: null\n },\n claimType: {\n type: STRING,\n default: null\n },\n certificateVersion: {\n type: STRING,\n default: null\n },\n keyType: {\n type: STRING,\n default: null\n },\n publicKey: {\n type: TEXT('long'),\n default: null\n }\n }, {\n freezeTableName: true\n });\n\n Certificate.associate = function (db) {\n Certificate.belongsTo(db.Channel, {\n foreignKey: {\n allowNull: true\n }\n });\n };\n\n Certificate.getShortChannelIdFromLongChannelId = function (longChannelId, channelName) {\n var _this = this;\n\n logger.debug('getShortChannelIdFromLongChannelId ' + channelName + ':' + longChannelId);\n return new Promise(function (resolve, reject) {\n _this.findAll({\n where: { name: channelName },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n throw new Error('No channel(s) found with that channel name');\n default:\n return resolve(returnShortId(result, longChannelId));\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromShortChannelId = function (channelName, channelClaimId) {\n var _this2 = this;\n\n logger.debug('getLongChannelIdFromShortChannelId(' + channelName + ', ' + channelClaimId + ')');\n return new Promise(function (resolve, reject) {\n _this2.findAll({\n where: {\n name: channelName,\n claimId: {\n $like: channelClaimId + '%'\n }\n },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n // note results must be sorted\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromChannelName = function (channelName) {\n var _this3 = this;\n\n logger.debug('getLongChannelIdFromChannelName(' + channelName + ')');\n return new Promise(function (resolve, reject) {\n _this3.findAll({\n where: { name: channelName },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.validateLongChannelId = function (name, claimId) {\n var _this4 = this;\n\n logger.debug('validateLongChannelId(' + name + ', ' + claimId + ')');\n return new Promise(function (resolve, reject) {\n _this4.findOne({\n where: { name: name, claimId: claimId }\n }).then(function (result) {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelId = function (channelName, channelClaimId) {\n logger.debug('getLongChannelId(' + channelName + ', ' + channelClaimId + ')');\n if (channelClaimId && channelClaimId.length === 40) {\n // if a full channel id is provided\n return this.validateLongChannelId(channelName, channelClaimId);\n } else if (channelClaimId && channelClaimId.length < 40) {\n // if a short channel id is provided\n return this.getLongChannelIdFromShortChannelId(channelName, channelClaimId);\n } else {\n return this.getLongChannelIdFromChannelName(channelName); // if no channel id provided\n }\n };\n\n return Certificate;\n};\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING;\n\n var Channel = sequelize.define('Channel', {\n channelName: {\n type: STRING,\n allowNull: false\n },\n channelClaimId: {\n type: STRING,\n allowNull: false\n }\n }, {\n freezeTableName: true\n });\n\n Channel.associate = function (db) {\n Channel.belongsTo(db.User);\n Channel.hasOne(db.Certificate);\n };\n\n return Channel;\n};\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(25),\n returnShortId = _require.returnShortId;\n\nvar _require2 = __webpack_require__(5),\n defaultThumbnail = _require2.assetDefaults.thumbnail,\n host = _require2.details.host;\n\nfunction determineFileExtensionFromContentType(contentType) {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n return 'jpeg';\n case 'image/png':\n return 'png';\n case 'image/gif':\n return 'gif';\n case 'video/mp4':\n return 'mp4';\n default:\n logger.debug('setting unknown file type as file extension jpeg');\n return 'jpeg';\n }\n};\n\nfunction determineThumbnail(storedThumbnail, defaultThumbnail) {\n if (storedThumbnail === '') {\n return defaultThumbnail;\n }\n return storedThumbnail;\n};\n\nfunction prepareClaimData(claim) {\n // logger.debug('preparing claim data based on resolved data:', claim);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['host'] = host;\n return claim;\n};\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n INTEGER = _ref.INTEGER,\n TEXT = _ref.TEXT,\n DECIMAL = _ref.DECIMAL;\n\n var Claim = sequelize.define('Claim', {\n address: {\n type: STRING,\n default: null\n },\n amount: {\n type: DECIMAL(19, 8),\n default: null\n },\n claimId: {\n type: STRING,\n default: null\n },\n claimSequence: {\n type: INTEGER,\n default: null\n },\n decodedClaim: {\n type: BOOLEAN,\n default: null\n },\n depth: {\n type: INTEGER,\n default: null\n },\n effectiveAmount: {\n type: DECIMAL(19, 8),\n default: null\n },\n hasSignature: {\n type: BOOLEAN,\n default: null\n },\n height: {\n type: INTEGER,\n default: null\n },\n hex: {\n type: TEXT('long'),\n default: null\n },\n name: {\n type: STRING,\n default: null\n },\n nout: {\n type: INTEGER,\n default: null\n },\n txid: {\n type: STRING,\n default: null\n },\n validAtHeight: {\n type: INTEGER,\n default: null\n },\n outpoint: {\n type: STRING,\n default: null\n },\n claimType: {\n type: STRING,\n default: null\n },\n certificateId: {\n type: STRING,\n default: null\n },\n author: {\n type: STRING,\n default: null\n },\n description: {\n type: TEXT('long'),\n default: null\n },\n language: {\n type: STRING,\n default: null\n },\n license: {\n type: STRING,\n default: null\n },\n licenseUrl: {\n type: STRING,\n default: null\n },\n nsfw: {\n type: BOOLEAN,\n default: null\n },\n preview: {\n type: STRING,\n default: null\n },\n thumbnail: {\n type: STRING,\n default: null\n },\n title: {\n type: STRING,\n default: null\n },\n metadataVersion: {\n type: STRING,\n default: null\n },\n contentType: {\n type: STRING,\n default: null\n },\n source: {\n type: STRING,\n default: null\n },\n sourceType: {\n type: STRING,\n default: null\n },\n sourceVersion: {\n type: STRING,\n default: null\n },\n streamVersion: {\n type: STRING,\n default: null\n },\n valueVersion: {\n type: STRING,\n default: null\n },\n channelName: {\n type: STRING,\n allowNull: true,\n default: null\n }\n }, {\n freezeTableName: true\n });\n\n Claim.associate = function (db) {\n Claim.belongsTo(db.File, {\n foreignKey: {\n allowNull: true\n }\n });\n };\n\n Claim.getShortClaimIdFromLongClaimId = function (claimId, claimName) {\n var _this = this;\n\n logger.debug('Claim.getShortClaimIdFromLongClaimId for ' + claimName + '#' + claimId);\n return new Promise(function (resolve, reject) {\n _this.findAll({\n where: { name: claimName },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n throw new Error('No claim(s) found with that claim name');\n default:\n resolve(returnShortId(result, claimId));\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getAllChannelClaims = function (channelClaimId) {\n var _this2 = this;\n\n logger.debug('Claim.getAllChannelClaims for ' + channelClaimId);\n return new Promise(function (resolve, reject) {\n _this2.findAll({\n where: { certificateId: channelClaimId },\n order: [['height', 'ASC']],\n raw: true // returns an array of only data, not an array of instances\n }).then(function (channelClaimsArray) {\n // logger.debug('channelclaimsarray length:', channelClaimsArray.length);\n switch (channelClaimsArray.length) {\n case 0:\n return resolve(null);\n default:\n channelClaimsArray.forEach(function (claim) {\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n return claim;\n });\n return resolve(channelClaimsArray);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getClaimIdByLongChannelId = function (channelClaimId, claimName) {\n var _this3 = this;\n\n logger.debug('finding claim id for claim ' + claimName + ' from channel ' + channelClaimId);\n return new Promise(function (resolve, reject) {\n _this3.findAll({\n where: { name: claimName, certificateId: channelClaimId },\n order: [['id', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(result[0].claimId);\n default:\n logger.error(result.length + ' records found for \"' + claimName + '\" in channel \"' + channelClaimId + '\"');\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimIdFromShortClaimId = function (name, shortId) {\n var _this4 = this;\n\n return new Promise(function (resolve, reject) {\n _this4.findAll({\n where: {\n name: name,\n claimId: {\n $like: shortId + '%'\n } },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n // note results must be sorted\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getTopFreeClaimIdByClaimName = function (name) {\n var _this5 = this;\n\n return new Promise(function (resolve, reject) {\n _this5.findAll({\n where: { name: name },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']] // note: maybe height and effective amount need to switch?\n }).then(function (result) {\n logger.debug('length of result', result.length);\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].dataValues.claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.validateLongClaimId = function (name, claimId) {\n var _this6 = this;\n\n return new Promise(function (resolve, reject) {\n _this6.findOne({\n where: { name: name, claimId: claimId }\n }).then(function (result) {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimId = function (claimName, claimId) {\n logger.debug('getLongClaimId(' + claimName + ', ' + claimId + ')');\n if (claimId && claimId.length === 40) {\n // if a full claim id is provided\n return this.validateLongClaimId(claimName, claimId);\n } else if (claimId && claimId.length < 40) {\n return this.getLongClaimIdFromShortClaimId(claimName, claimId); // if a short claim id is provided\n } else {\n return this.getTopFreeClaimIdByClaimName(claimName); // if no claim id is provided\n }\n };\n\n Claim.resolveClaim = function (name, claimId) {\n var _this7 = this;\n\n logger.debug('Claim.resolveClaim: ' + name + ' ' + claimId);\n return new Promise(function (resolve, reject) {\n _this7.findAll({\n where: { name: name, claimId: claimId }\n }).then(function (claimArray) {\n switch (claimArray.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(prepareClaimData(claimArray[0].dataValues));\n default:\n logger.error('more than one record matches ' + name + '#' + claimId + ' in db.Claim');\n return resolve(prepareClaimData(claimArray[0].dataValues));\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n return Claim;\n};\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n INTEGER = _ref.INTEGER;\n\n var File = sequelize.define('File', {\n name: {\n type: STRING,\n allowNull: false\n },\n claimId: {\n type: STRING,\n allowNull: false\n },\n address: {\n type: STRING,\n allowNull: false\n },\n outpoint: {\n type: STRING,\n allowNull: false\n },\n height: {\n type: INTEGER,\n allowNull: false,\n default: 0\n },\n fileName: {\n type: STRING,\n allowNull: false\n },\n filePath: {\n type: STRING,\n allowNull: false\n },\n fileType: {\n type: STRING\n },\n nsfw: {\n type: BOOLEAN,\n allowNull: false,\n defaultValue: false\n },\n trendingEligible: {\n type: BOOLEAN,\n allowNull: false,\n defaultValue: true\n }\n }, {\n freezeTableName: true\n });\n\n File.associate = function (db) {\n File.hasMany(db.Request);\n File.hasOne(db.Claim);\n };\n\n File.getRecentClaims = function () {\n return this.findAll({\n where: { nsfw: false, trendingEligible: true },\n order: [['createdAt', 'DESC']],\n limit: 25\n });\n };\n\n return File;\n};\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n TEXT = _ref.TEXT;\n\n var Request = sequelize.define('Request', {\n action: {\n type: STRING,\n allowNull: false\n },\n url: {\n type: STRING,\n allowNull: false\n },\n ipAddress: {\n type: STRING,\n allowNull: true\n },\n result: {\n type: TEXT('long'),\n allowNull: true,\n default: null\n }\n }, {\n freezeTableName: true\n });\n\n Request.associate = function (db) {\n Request.belongsTo(db.File, {\n foreignKey: {\n allowNull: true\n }\n });\n };\n\n return Request;\n};\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar bcrypt = __webpack_require__(68);\nvar logger = __webpack_require__(2);\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING;\n\n var User = sequelize.define('User', {\n userName: {\n type: STRING,\n allowNull: false\n },\n password: {\n type: STRING,\n allowNull: false\n }\n }, {\n freezeTableName: true\n });\n\n User.associate = function (db) {\n User.hasOne(db.Channel);\n };\n\n User.prototype.comparePassword = function (password) {\n return bcrypt.compare(password, this.password);\n };\n\n User.prototype.changePassword = function (newPassword) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n // generate a salt string to use for hashing\n bcrypt.genSalt(function (saltError, salt) {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(newPassword, salt, function (hashError, hash) {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the current password with the new hash\n _this.update({ password: hash }).then(function () {\n resolve();\n }).catch(function (error) {\n reject(error);\n });\n });\n });\n });\n };\n\n // pre-save hook method to hash the user's password before the user's info is saved to the db.\n User.hook('beforeCreate', function (user, options) {\n logger.debug('User.beforeCreate hook...');\n return new Promise(function (resolve, reject) {\n // generate a salt string to use for hashing\n bcrypt.genSalt(function (saltError, salt) {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(user.password, salt, function (hashError, hash) {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the password string with the hash password value\n user.password = hash;\n resolve();\n });\n });\n });\n });\n\n return User;\n};\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"bcrypt\");\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar PassportLocalStrategy = __webpack_require__(23).Strategy;\nvar logger = __webpack_require__(2);\nvar db = __webpack_require__(6);\n\nvar returnUserAndChannelInfo = function returnUserAndChannelInfo(userInstance) {\n return new Promise(function (resolve, reject) {\n var userInfo = {};\n userInfo['id'] = userInstance.id;\n userInfo['userName'] = userInstance.userName;\n userInstance.getChannel().then(function (_ref) {\n var channelName = _ref.channelName,\n channelClaimId = _ref.channelClaimId;\n\n userInfo['channelName'] = channelName;\n userInfo['channelClaimId'] = channelClaimId;\n return db.Certificate.getShortChannelIdFromLongChannelId(channelClaimId, channelName);\n }).then(function (shortChannelId) {\n userInfo['shortChannelId'] = shortChannelId;\n resolve(userInfo);\n }).catch(function (error) {\n reject(error);\n });\n });\n};\n\nmodule.exports = new PassportLocalStrategy({\n usernameField: 'username',\n passwordField: 'password'\n}, function (username, password, done) {\n return db.User.findOne({\n where: { userName: username }\n }).then(function (user) {\n if (!user) {\n logger.debug('no user found');\n return done(null, false, { message: 'Incorrect username or password' });\n }\n return user.comparePassword(password).then(function (isMatch) {\n if (!isMatch) {\n logger.debug('incorrect password');\n return done(null, false, { message: 'Incorrect username or password' });\n }\n logger.debug('Password was a match, returning User');\n return returnUserAndChannelInfo(user).then(function (userInfo) {\n return done(null, userInfo);\n }).catch(function (error) {\n return error;\n });\n }).catch(function (error) {\n return error;\n });\n }).catch(function (error) {\n return done(error);\n });\n});\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\nvar passport = __webpack_require__(22);\n\nmodule.exports = function (app) {\n // route for sign up\n app.post('/signup', passport.authenticate('local-signup'), function (req, res) {\n logger.verbose('successful signup for ' + req.user.channelName);\n res.status(200).json({\n success: true,\n channelName: req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId\n });\n });\n // route for log in\n app.post('/login', function (req, res, next) {\n passport.authenticate('local-login', function (err, user, info) {\n if (err) {\n return next(err);\n }\n if (!user) {\n return res.status(400).json({\n success: false,\n message: info.message\n });\n }\n logger.debug('successful login');\n req.logIn(user, function (err) {\n if (err) {\n return next(err);\n }\n return res.status(200).json({\n success: true,\n channelName: req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId\n });\n });\n })(req, res, next);\n });\n // route to log out\n app.get('/logout', function (req, res) {\n req.logout();\n res.status(200).json({ success: true, message: 'you successfully logged out' });\n });\n // see if user is authenticated, and return credentials if so\n app.get('/user', function (req, res) {\n if (req.user) {\n res.status(200).json({ success: true, data: req.user });\n } else {\n res.status(401).json({ success: false, message: 'user is not logged in' });\n }\n });\n};\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar logger = __webpack_require__(2);\nvar multipart = __webpack_require__(72);\n\nvar _require = __webpack_require__(5),\n uploadDirectory = _require.publishing.uploadDirectory,\n host = _require.details.host;\n\nvar multipartMiddleware = multipart({ uploadDir: uploadDirectory });\nvar db = __webpack_require__(6);\n\nvar _require2 = __webpack_require__(73),\n claimNameIsAvailable = _require2.claimNameIsAvailable,\n checkChannelAvailability = _require2.checkChannelAvailability,\n publish = _require2.publish;\n\nvar _require3 = __webpack_require__(16),\n getClaimList = _require3.getClaimList,\n resolveUri = _require3.resolveUri,\n getClaim = _require3.getClaim;\n\nvar _require4 = __webpack_require__(26),\n addGetResultsToFileData = _require4.addGetResultsToFileData,\n createBasicPublishParams = _require4.createBasicPublishParams,\n createThumbnailPublishParams = _require4.createThumbnailPublishParams,\n parsePublishApiRequestBody = _require4.parsePublishApiRequestBody,\n parsePublishApiRequestFiles = _require4.parsePublishApiRequestFiles,\n createFileData = _require4.createFileData;\n\nvar errorHandlers = __webpack_require__(27);\n\nvar _require5 = __webpack_require__(17),\n sendGATimingEvent = _require5.sendGATimingEvent;\n\nvar _require6 = __webpack_require__(75),\n authenticateUser = _require6.authenticateUser;\n\nvar _require7 = __webpack_require__(28),\n getChannelData = _require7.getChannelData,\n getChannelClaims = _require7.getChannelClaims,\n getClaimId = _require7.getClaimId;\n\nvar NO_CHANNEL = 'NO_CHANNEL';\nvar NO_CLAIM = 'NO_CLAIM';\n\nmodule.exports = function (app) {\n // route to check whether site has published to a channel\n app.get('/api/channel/availability/:name', function (_ref, res) {\n var ip = _ref.ip,\n originalUrl = _ref.originalUrl,\n name = _ref.params.name;\n\n var gaStartTime = Date.now();\n checkChannelAvailability(name).then(function (availableName) {\n res.status(200).json(availableName);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short channel id from long channel Id\n app.get('/api/channel/short-id/:longId/:name', function (_ref2, res) {\n var ip = _ref2.ip,\n originalUrl = _ref2.originalUrl,\n params = _ref2.params;\n\n db.Certificate.getShortChannelIdFromLongChannelId(params.longId, params.name).then(function (shortId) {\n res.status(200).json(shortId);\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/data/:channelName/:channelClaimId', function (_ref3, res) {\n var ip = _ref3.ip,\n originalUrl = _ref3.originalUrl,\n body = _ref3.body,\n params = _ref3.params;\n\n var channelName = params.channelName;\n var channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n getChannelData(channelName, channelClaimId, 0).then(function (data) {\n if (data === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'No matching channel was found' });\n }\n res.status(200).json({ success: true, data: data });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/claims/:channelName/:channelClaimId/:page', function (_ref4, res) {\n var ip = _ref4.ip,\n originalUrl = _ref4.originalUrl,\n body = _ref4.body,\n params = _ref4.params;\n\n var channelName = params.channelName;\n var channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n var page = params.page;\n getChannelClaims(channelName, channelClaimId, page).then(function (data) {\n if (data === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'No matching channel was found' });\n }\n res.status(200).json({ success: true, data: data });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a claim_list request on the daemon\n app.get('/api/claim/list/:name', function (_ref5, res) {\n var ip = _ref5.ip,\n originalUrl = _ref5.originalUrl,\n params = _ref5.params;\n\n getClaimList(params.name).then(function (claimsList) {\n res.status(200).json(claimsList);\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get an asset\n app.get('/api/claim/get/:name/:claimId', function (_ref6, res) {\n var ip = _ref6.ip,\n originalUrl = _ref6.originalUrl,\n params = _ref6.params;\n\n var name = params.name;\n var claimId = params.claimId;\n // resolve the claim\n db.Claim.resolveClaim(name, claimId).then(function (resolveResult) {\n // make sure a claim actually exists at that uri\n if (!resolveResult) {\n throw new Error('No matching uri found in Claim table');\n }\n var fileData = createFileData(resolveResult);\n // get the claim\n return Promise.all([fileData, getClaim(name + '#' + claimId)]);\n }).then(function (_ref7) {\n var _ref8 = _slicedToArray(_ref7, 2),\n fileData = _ref8[0],\n getResult = _ref8[1];\n\n fileData = addGetResultsToFileData(fileData, getResult);\n return Promise.all([db.upsert(db.File, fileData, { name: name, claimId: claimId }, 'File'), getResult]);\n }).then(function (_ref9) {\n var _ref10 = _slicedToArray(_ref9, 2),\n fileRecord = _ref10[0],\n _ref10$ = _ref10[1],\n message = _ref10$.message,\n completed = _ref10$.completed;\n\n res.status(200).json({ success: true, message: message, completed: completed });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to check whether this site published to a claim\n app.get('/api/claim/availability/:name', function (_ref11, res) {\n var ip = _ref11.ip,\n originalUrl = _ref11.originalUrl,\n name = _ref11.params.name;\n\n var gaStartTime = Date.now();\n claimNameIsAvailable(name).then(function (result) {\n res.status(200).json(result);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a resolve request on the daemon\n app.get('/api/claim/resolve/:name/:claimId', function (_ref12, res) {\n var headers = _ref12.headers,\n ip = _ref12.ip,\n originalUrl = _ref12.originalUrl,\n params = _ref12.params;\n\n resolveUri(params.name + '#' + params.claimId).then(function (resolvedUri) {\n res.status(200).json(resolvedUri);\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a publish request on the daemon\n app.post('/api/claim/publish', multipartMiddleware, function (_ref13, res) {\n var body = _ref13.body,\n files = _ref13.files,\n headers = _ref13.headers,\n ip = _ref13.ip,\n originalUrl = _ref13.originalUrl,\n user = _ref13.user;\n\n // define variables\n var channelName = void 0,\n channelId = void 0,\n channelPassword = void 0,\n description = void 0,\n fileName = void 0,\n filePath = void 0,\n fileType = void 0,\n gaStartTime = void 0,\n license = void 0,\n name = void 0,\n nsfw = void 0,\n thumbnail = void 0,\n thumbnailFileName = void 0,\n thumbnailFilePath = void 0,\n thumbnailFileType = void 0,\n title = void 0;\n // record the start time of the request\n gaStartTime = Date.now();\n // validate the body and files of the request\n try {\n var _parsePublishApiReque = parsePublishApiRequestBody(body);\n // validateApiPublishRequest(body, files);\n\n\n name = _parsePublishApiReque.name;\n nsfw = _parsePublishApiReque.nsfw;\n license = _parsePublishApiReque.license;\n title = _parsePublishApiReque.title;\n description = _parsePublishApiReque.description;\n thumbnail = _parsePublishApiReque.thumbnail;\n\n var _parsePublishApiReque2 = parsePublishApiRequestFiles(files);\n\n fileName = _parsePublishApiReque2.fileName;\n filePath = _parsePublishApiReque2.filePath;\n fileType = _parsePublishApiReque2.fileType;\n thumbnailFileName = _parsePublishApiReque2.thumbnailFileName;\n thumbnailFilePath = _parsePublishApiReque2.thumbnailFilePath;\n thumbnailFileType = _parsePublishApiReque2.thumbnailFileType;\n channelName = body.channelName;\n channelId = body.channelId;\n channelPassword = body.channelPassword;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n // check channel authorization\n Promise.all([authenticateUser(channelName, channelId, channelPassword, user), claimNameIsAvailable(name), createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail), createThumbnailPublishParams(thumbnailFilePath, name, license, nsfw)]).then(function (_ref14) {\n var _ref15 = _slicedToArray(_ref14, 4),\n _ref15$ = _ref15[0],\n channelName = _ref15$.channelName,\n channelClaimId = _ref15$.channelClaimId,\n validatedClaimName = _ref15[1],\n publishParams = _ref15[2],\n thumbnailPublishParams = _ref15[3];\n\n // add channel details to the publish params\n if (channelName && channelClaimId) {\n publishParams['channel_name'] = channelName;\n publishParams['channel_id'] = channelClaimId;\n }\n // publish the thumbnail\n if (thumbnailPublishParams) {\n publish(thumbnailPublishParams, thumbnailFileName, thumbnailFileType);\n }\n // publish the asset\n return publish(publishParams, fileName, fileType);\n }).then(function (result) {\n res.status(200).json({\n success: true,\n message: 'publish completed successfully',\n data: {\n name: name,\n claimId: result.claim_id,\n url: host + '/' + result.claim_id + '/' + name,\n lbryTx: result\n }\n });\n // record the publish end time and send to google analytics\n sendGATimingEvent('end-to-end', 'publish', fileType, gaStartTime, Date.now());\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short claim id from long claim Id\n app.get('/api/claim/short-id/:longId/:name', function (_ref16, res) {\n var ip = _ref16.ip,\n originalUrl = _ref16.originalUrl,\n body = _ref16.body,\n params = _ref16.params;\n\n db.Claim.getShortClaimIdFromLongClaimId(params.longId, params.name).then(function (shortId) {\n res.status(200).json({ success: true, data: shortId });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.post('/api/claim/long-id', function (_ref17, res) {\n var ip = _ref17.ip,\n originalUrl = _ref17.originalUrl,\n body = _ref17.body,\n params = _ref17.params;\n\n logger.debug('body:', body);\n var channelName = body.channelName;\n var channelClaimId = body.channelClaimId;\n var claimName = body.claimName;\n var claimId = body.claimId;\n getClaimId(channelName, channelClaimId, claimName, claimId).then(function (result) {\n if (result === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'No matching channel could be found' });\n }\n if (result === NO_CLAIM) {\n return res.status(404).json({ success: false, message: 'No matching claim id could be found' });\n }\n res.status(200).json({ success: true, data: result });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/claim/data/:claimName/:claimId', function (_ref18, res) {\n var ip = _ref18.ip,\n originalUrl = _ref18.originalUrl,\n body = _ref18.body,\n params = _ref18.params;\n\n var claimName = params.claimName;\n var claimId = params.claimId;\n if (claimId === 'none') claimId = null;\n db.Claim.resolveClaim(claimName, claimId).then(function (claimInfo) {\n if (!claimInfo) {\n return res.status(404).json({ success: false, message: 'No claim could be found' });\n }\n res.status(200).json({ success: true, data: claimInfo });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to see if asset is available locally\n app.get('/api/file/availability/:name/:claimId', function (_ref19, res) {\n var ip = _ref19.ip,\n originalUrl = _ref19.originalUrl,\n params = _ref19.params;\n\n var name = params.name;\n var claimId = params.claimId;\n db.File.findOne({ where: { name: name, claimId: claimId } }).then(function (result) {\n if (result) {\n return res.status(200).json({ success: true, data: true });\n }\n res.status(200).json({ success: true, data: false });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n};\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"connect-multiparty\");\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar logger = __webpack_require__(2);\nvar db = __webpack_require__(6);\nvar lbryApi = __webpack_require__(16);\nvar publishHelpers = __webpack_require__(26);\n\nvar _require = __webpack_require__(5),\n _require$publishing = _require.publishing,\n primaryClaimAddress = _require$publishing.primaryClaimAddress,\n additionalClaimAddresses = _require$publishing.additionalClaimAddresses;\n\nvar Sequelize = __webpack_require__(24);\nvar Op = Sequelize.Op;\n\nmodule.exports = {\n publish: function publish(publishParams, fileName, fileType) {\n return new Promise(function (resolve, reject) {\n var publishResults = void 0,\n certificateId = void 0,\n channelName = void 0;\n // publish the file\n return lbryApi.publishClaim(publishParams).then(function (tx) {\n logger.info('Successfully published ' + publishParams.name + ' ' + fileName, tx);\n publishResults = tx;\n // get the channel information\n if (publishParams.channel_name) {\n logger.debug('this claim was published in channel: ' + publishParams.channel_name);\n return db.Channel.findOne({ where: { channelName: publishParams.channel_name } });\n } else {\n logger.debug('this claim was not published in a channel');\n return null;\n }\n }).then(function (channel) {\n // set channel information\n certificateId = null;\n channelName = null;\n if (channel) {\n certificateId = channel.channelClaimId;\n channelName = channel.channelName;\n }\n logger.debug('certificateId: ' + certificateId);\n }).then(function () {\n // create the File record\n var fileRecord = {\n name: publishParams.name,\n claimId: publishResults.claim_id,\n title: publishParams.metadata.title,\n description: publishParams.metadata.description,\n address: publishParams.claim_address,\n outpoint: publishResults.txid + ':' + publishResults.nout,\n height: 0,\n fileName: fileName,\n filePath: publishParams.file_path,\n fileType: fileType,\n nsfw: publishParams.metadata.nsfw\n };\n // create the Claim record\n var claimRecord = {\n name: publishParams.name,\n claimId: publishResults.claim_id,\n title: publishParams.metadata.title,\n description: publishParams.metadata.description,\n address: publishParams.claim_address,\n thumbnail: publishParams.metadata.thumbnail,\n outpoint: publishResults.txid + ':' + publishResults.nout,\n height: 0,\n contentType: fileType,\n nsfw: publishParams.metadata.nsfw,\n amount: publishParams.bid,\n certificateId: certificateId,\n channelName: channelName\n };\n // upsert criteria\n var upsertCriteria = {\n name: publishParams.name,\n claimId: publishResults.claim_id\n };\n // upsert the records\n return Promise.all([db.upsert(db.File, fileRecord, upsertCriteria, 'File'), db.upsert(db.Claim, claimRecord, upsertCriteria, 'Claim')]);\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n file = _ref2[0],\n claim = _ref2[1];\n\n logger.debug('File and Claim records successfully created');\n return Promise.all([file.setClaim(claim), claim.setFile(file)]);\n }).then(function () {\n logger.debug('File and Claim records successfully associated');\n resolve(publishResults); // resolve the promise with the result from lbryApi.publishClaim;\n }).catch(function (error) {\n logger.error('PUBLISH ERROR', error);\n publishHelpers.deleteTemporaryFile(publishParams.file_path); // delete the local file\n reject(error);\n });\n });\n },\n claimNameIsAvailable: function claimNameIsAvailable(name) {\n var claimAddresses = additionalClaimAddresses || [];\n claimAddresses.push(primaryClaimAddress);\n // find any records where the name is used\n return db.Claim.findAll({\n attributes: ['address'],\n where: {\n name: name,\n address: _defineProperty({}, Op.or, claimAddresses)\n }\n }).then(function (result) {\n if (result.length >= 1) {\n throw new Error('That claim is already in use');\n };\n return name;\n }).catch(function (error) {\n throw error;\n });\n },\n checkChannelAvailability: function checkChannelAvailability(name) {\n return db.Channel.findAll({\n where: { channelName: name }\n }).then(function (result) {\n if (result.length >= 1) {\n throw new Error('That channel has already been claimed');\n }\n return name;\n }).catch(function (error) {\n throw error;\n });\n }\n};\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"fs\");\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar db = __webpack_require__(6);\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n authenticateUser: function authenticateUser(channelName, channelId, channelPassword, user) {\n // case: no channelName or channel Id are provided (anonymous), regardless of whether user token is provided\n if (!channelName && !channelId) {\n return {\n channelName: null,\n channelClaimId: null\n };\n }\n // case: channelName or channel Id are provided with user token\n if (user) {\n if (channelName && channelName !== user.channelName) {\n throw new Error('the provided channel name does not match user credentials');\n }\n if (channelId && channelId !== user.channelClaimId) {\n throw new Error('the provided channel id does not match user credentials');\n }\n return {\n channelName: user.channelName,\n channelClaimId: user.channelClaimId\n };\n }\n // case: channelName or channel Id are provided with password instead of user token\n if (!channelPassword) throw new Error('no channel password provided');\n return module.exports.authenticateChannelCredentials(channelName, channelId, channelPassword);\n },\n authenticateChannelCredentials: function authenticateChannelCredentials(channelName, channelId, userPassword) {\n return new Promise(function (resolve, reject) {\n // hoisted variables\n var channelData = void 0;\n // build the params for finding the channel\n var channelFindParams = {};\n if (channelName) channelFindParams['channelName'] = channelName;\n if (channelId) channelFindParams['channelClaimId'] = channelId;\n // find the channel\n db.Channel.findOne({\n where: channelFindParams\n }).then(function (channel) {\n if (!channel) {\n logger.debug('no channel found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n channelData = channel.get();\n logger.debug('channel data:', channelData);\n return db.User.findOne({\n where: { userName: channelData.channelName.substring(1) }\n });\n }).then(function (user) {\n if (!user) {\n logger.debug('no user found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n return user.comparePassword(userPassword);\n }).then(function (isMatch) {\n if (!isMatch) {\n logger.debug('incorrect password');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n logger.debug('...password was a match...');\n resolve(channelData);\n }).catch(function (error) {\n reject(error);\n });\n });\n }\n};\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar CLAIMS_PER_PAGE = 12;\n\nmodule.exports = {\n returnPaginatedChannelClaims: function returnPaginatedChannelClaims(channelName, longChannelClaimId, claims, page) {\n var totalPages = module.exports.determineTotalPages(claims);\n var paginationPage = module.exports.getPageFromQuery(page);\n var viewData = {\n channelName: channelName,\n longChannelClaimId: longChannelClaimId,\n claims: module.exports.extractPageFromClaims(claims, paginationPage),\n previousPage: module.exports.determinePreviousPage(paginationPage),\n currentPage: paginationPage,\n nextPage: module.exports.determineNextPage(totalPages, paginationPage),\n totalPages: totalPages,\n totalResults: module.exports.determineTotalClaims(claims)\n };\n return viewData;\n },\n getPageFromQuery: function getPageFromQuery(page) {\n if (page) {\n return parseInt(page);\n }\n return 1;\n },\n extractPageFromClaims: function extractPageFromClaims(claims, pageNumber) {\n if (!claims) {\n return []; // if no claims, return this default\n }\n // logger.debug('claims is array?', Array.isArray(claims));\n // logger.debug(`pageNumber ${pageNumber} is number?`, Number.isInteger(pageNumber));\n var claimStartIndex = (pageNumber - 1) * CLAIMS_PER_PAGE;\n var claimEndIndex = claimStartIndex + CLAIMS_PER_PAGE;\n var pageOfClaims = claims.slice(claimStartIndex, claimEndIndex);\n return pageOfClaims;\n },\n determineTotalPages: function determineTotalPages(claims) {\n if (!claims) {\n return 0;\n } else {\n var totalClaims = claims.length;\n if (totalClaims < CLAIMS_PER_PAGE) {\n return 1;\n }\n var fullPages = Math.floor(totalClaims / CLAIMS_PER_PAGE);\n var remainder = totalClaims % CLAIMS_PER_PAGE;\n if (remainder === 0) {\n return fullPages;\n }\n return fullPages + 1;\n }\n },\n determinePreviousPage: function determinePreviousPage(currentPage) {\n if (currentPage === 1) {\n return null;\n }\n return currentPage - 1;\n },\n determineNextPage: function determineNextPage(totalPages, currentPage) {\n if (currentPage === totalPages) {\n return null;\n }\n return currentPage + 1;\n },\n determineTotalClaims: function determineTotalClaims(claims) {\n if (!claims) {\n return 0;\n }\n return claims.length;\n }\n};\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _require = __webpack_require__(5),\n host = _require.details;\n\nvar handlePageRender = __webpack_require__(29);\n\nmodule.exports = function (app) {\n // route for the home page\n app.get('/', function (req, res) {\n handlePageRender(req, res);\n });\n // route to display login page\n app.get('/login', function (req, res) {\n handlePageRender(req, res);\n });\n // route to show 'about' page\n app.get('/about', function (req, res) {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/trending', function (req, res) {\n res.status(301).redirect('/popular');\n });\n app.get('/popular', function (req, res) {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/new', function (req, res) {\n handlePageRender(req, res);\n });\n // route to send embedable video player (for twitter)\n app.get('/embed/:claimId/:name', function (_ref, res) {\n var params = _ref.params;\n\n var claimId = params.claimId;\n var name = params.name;\n // get and render the content\n res.status(200).render('embed', { layout: 'embed', host: host, claimId: claimId, name: name });\n });\n};\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n case actions.FILE_SELECTED:\n return Object.assign({}, initialState, { // note: clears to initial state\n file: action.data\n });\n case actions.FILE_CLEAR:\n return initialState;\n case actions.METADATA_UPDATE:\n return Object.assign({}, state, {\n metadata: Object.assign({}, state.metadata, _defineProperty({}, action.data.name, action.data.value))\n });\n case actions.CLAIM_UPDATE:\n return Object.assign({}, state, {\n claim: action.data\n });\n case actions.SET_PUBLISH_IN_CHANNEL:\n return Object.assign({}, state, {\n publishInChannel: action.channel\n });\n case actions.PUBLISH_STATUS_UPDATE:\n return Object.assign({}, state, {\n status: action.data\n });\n case actions.ERROR_UPDATE:\n return Object.assign({}, state, {\n error: Object.assign({}, state.error, _defineProperty({}, action.data.name, action.data.value))\n });\n case actions.SELECTED_CHANNEL_UPDATE:\n return Object.assign({}, state, {\n selectedChannel: action.data\n });\n case actions.TOGGLE_METADATA_INPUTS:\n return Object.assign({}, state, {\n showMetadataInputs: action.data\n });\n case actions.THUMBNAIL_NEW:\n return Object.assign({}, state, {\n thumbnail: action.data\n });\n default:\n return state;\n }\n};\n\nvar _publish_action_types = __webpack_require__(32);\n\nvar actions = _interopRequireWildcard(_publish_action_types);\n\nvar _publish_channel_select_states = __webpack_require__(33);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _require = __webpack_require__(5),\n publishing = _require.publishing;\n\nvar initialState = {\n disabled: publishing.disabled,\n disabledMessage: publishing.disabledMessage,\n publishInChannel: false,\n selectedChannel: _publish_channel_select_states.LOGIN,\n showMetadataInputs: false,\n status: {\n status: null,\n message: null\n },\n error: {\n file: null,\n url: null,\n channel: null,\n publishSubmit: null\n },\n file: null,\n claim: '',\n metadata: {\n title: '',\n description: '',\n license: '',\n nsfw: false\n },\n thumbnail: null\n};\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n case actions.CHANNEL_UPDATE:\n return Object.assign({}, state, {\n loggedInChannel: action.data\n });\n default:\n return state;\n }\n};\n\nvar _channel_action_types = __webpack_require__(34);\n\nvar actions = _interopRequireWildcard(_channel_action_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar initialState = {\n loggedInChannel: {\n name: null,\n shortId: null,\n longId: null\n }\n};\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n // handle request\n case actions.REQUEST_ERROR:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n error: action.data\n })\n });\n case actions.REQUEST_UPDATE:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n type: action.data.requestType,\n id: action.data.requestId\n })\n });\n // store requests\n case actions.REQUEST_LIST_ADD:\n return Object.assign({}, state, {\n requestList: Object.assign({}, state.requestList, _defineProperty({}, action.data.id, {\n error: action.data.error,\n key: action.data.key\n }))\n });\n // asset data\n case actions.ASSET_ADD:\n return Object.assign({}, state, {\n assetList: Object.assign({}, state.assetList, _defineProperty({}, action.data.id, {\n error: action.data.error,\n name: action.data.name,\n claimId: action.data.claimId,\n shortId: action.data.shortId,\n claimData: action.data.claimData\n }))\n });\n // channel data\n case actions.CHANNEL_ADD:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.id, {\n name: action.data.name,\n longId: action.data.longId,\n shortId: action.data.shortId,\n claimsData: action.data.claimsData\n }))\n });\n case actions.CHANNEL_CLAIMS_UPDATE_SUCCESS:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.channelListId, Object.assign({}, state.channelList[action.data.channelListId], {\n claimsData: action.data.claimsData\n })))\n });\n // display an asset\n case actions.FILE_AVAILABILITY_UPDATE:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n status: action.data\n })\n });\n case actions.DISPLAY_ASSET_ERROR:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n error: action.data,\n status: _asset_display_states.ERROR\n })\n });\n default:\n return state;\n }\n};\n\nvar _show_action_types = __webpack_require__(12);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _asset_display_states = __webpack_require__(35);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar initialState = {\n request: {\n error: null,\n type: null,\n id: null\n },\n requestList: {},\n channelList: {},\n assetList: {},\n displayAsset: {\n error: null,\n status: _asset_display_states.LOCAL_CHECK\n }\n};\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n default:\n return state;\n }\n};\n\nvar siteConfig = __webpack_require__(5);\n\nvar googleAnalyticsId = siteConfig.analytics.googleId,\n _siteConfig$assetDefa = siteConfig.assetDefaults,\n defaultThumbnail = _siteConfig$assetDefa.thumbnail,\n defaultDescription = _siteConfig$assetDefa.description,\n _siteConfig$details = siteConfig.details,\n description = _siteConfig$details.description,\n host = _siteConfig$details.host,\n title = _siteConfig$details.title,\n twitter = _siteConfig$details.twitter;\n\n\nvar initialState = {\n description: description,\n googleAnalyticsId: googleAnalyticsId,\n host: host,\n title: title,\n twitter: twitter,\n defaultDescription: defaultDescription,\n defaultThumbnail: defaultThumbnail\n};\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-ga\");\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _PublishTool = __webpack_require__(92);\n\nvar _PublishTool2 = _interopRequireDefault(_PublishTool);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar HomePage = function (_React$Component) {\n _inherits(HomePage, _React$Component);\n\n function HomePage() {\n _classCallCheck(this, HomePage);\n\n return _possibleConstructorReturn(this, (HomePage.__proto__ || Object.getPrototypeOf(HomePage)).apply(this, arguments));\n }\n\n _createClass(HomePage, [{\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column' },\n _react2.default.createElement(_SEO2.default, null),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded flex-container--column' },\n _react2.default.createElement(_PublishTool2.default, null)\n )\n );\n }\n }]);\n\n return HomePage;\n}(_react2.default.Component);\n\n;\n\nexports.default = HomePage;\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactHelmet = __webpack_require__(14);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _pageTitle = __webpack_require__(85);\n\nvar _metaTags = __webpack_require__(86);\n\nvar _canonicalLink = __webpack_require__(87);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SEO = function (_React$Component) {\n _inherits(SEO, _React$Component);\n\n function SEO() {\n _classCallCheck(this, SEO);\n\n return _possibleConstructorReturn(this, (SEO.__proto__ || Object.getPrototypeOf(SEO)).apply(this, arguments));\n }\n\n _createClass(SEO, [{\n key: 'render',\n value: function render() {\n // props from state\n var _props = this.props,\n defaultDescription = _props.defaultDescription,\n defaultThumbnail = _props.defaultThumbnail,\n siteDescription = _props.siteDescription,\n siteHost = _props.siteHost,\n siteTitle = _props.siteTitle,\n siteTwitter = _props.siteTwitter;\n // props from parent\n\n var _props2 = this.props,\n asset = _props2.asset,\n channel = _props2.channel,\n pageUri = _props2.pageUri;\n var pageTitle = this.props.pageTitle;\n // create page title, tags, and canonical link\n\n pageTitle = (0, _pageTitle.createPageTitle)(siteTitle, pageTitle);\n var metaTags = (0, _metaTags.createMetaTags)(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail);\n var canonicalLink = (0, _canonicalLink.createCanonicalLink)(asset, channel, pageUri, siteHost);\n // render results\n return _react2.default.createElement(_reactHelmet2.default, {\n title: pageTitle,\n meta: metaTags,\n link: [{ rel: 'canonical', href: canonicalLink }]\n });\n }\n }]);\n\n return SEO;\n}(_react2.default.Component);\n\n;\n\nSEO.propTypes = {\n pageTitle: _propTypes2.default.string,\n pageUri: _propTypes2.default.string,\n channel: _propTypes2.default.object,\n asset: _propTypes2.default.object\n};\n\nexports.default = SEO;\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar createPageTitle = exports.createPageTitle = function createPageTitle(siteTitle, pageTitle) {\n if (!pageTitle) {\n return \"\" + siteTitle;\n }\n return siteTitle + \" - \" + pageTitle;\n};\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar determineOgThumbnailContentType = function determineOgThumbnailContentType(thumbnail) {\n if (thumbnail) {\n var fileExt = thumbnail.substring(thumbnail.lastIndexOf('.'));\n switch (fileExt) {\n case 'jpeg':\n case 'jpg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'gif':\n return 'image/gif';\n case 'mp4':\n return 'video/mp4';\n default:\n return 'image/jpeg';\n }\n }\n return '';\n};\n\nvar createBasicMetaTags = function createBasicMetaTags(siteHost, siteDescription, siteTitle, siteTwitter) {\n return [{ property: 'og:title', content: siteTitle }, { property: 'og:url', content: siteHost }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: siteDescription }, { property: 'twitter:site', content: siteTwitter }, { property: 'twitter:card', content: 'summary' }];\n};\n\nvar createChannelMetaTags = function createChannelMetaTags(siteTitle, siteHost, siteTwitter, channel) {\n var name = channel.name,\n longId = channel.longId;\n\n return [{ property: 'og:title', content: name + ' on ' + siteTitle }, { property: 'og:url', content: siteHost + '/' + name + ':' + longId }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: name + ', a channel on ' + siteTitle }, { property: 'twitter:site', content: siteTwitter }, { property: 'twitter:card', content: 'summary' }];\n};\n\nvar createAssetMetaTags = function createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail) {\n var claimData = asset.claimData;\n var contentType = claimData.contentType;\n\n var embedUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name;\n var showUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name;\n var source = siteHost + '/' + claimData.claimId + '/' + claimData.name + '.' + claimData.fileExt;\n var ogTitle = claimData.title || claimData.name;\n var ogDescription = claimData.description || defaultDescription;\n var ogThumbnailContentType = determineOgThumbnailContentType(claimData.thumbnail);\n var ogThumbnail = claimData.thumbnail || defaultThumbnail;\n var metaTags = [{ property: 'og:title', content: ogTitle }, { property: 'og:url', content: showUrl }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: ogDescription }, { property: 'og:image:width', content: 600 }, { property: 'og:image:height', content: 315 }, { property: 'twitter:site', content: siteTwitter }];\n if (contentType === 'video/mp4' || contentType === 'video/webm') {\n metaTags.push({ property: 'og:video', content: source });\n metaTags.push({ property: 'og:video:secure_url', content: source });\n metaTags.push({ property: 'og:video:type', content: contentType });\n metaTags.push({ property: 'og:image', content: ogThumbnail });\n metaTags.push({ property: 'og:image:type', content: ogThumbnailContentType });\n metaTags.push({ property: 'og:type', content: 'video' });\n metaTags.push({ property: 'twitter:card', content: 'player' });\n metaTags.push({ property: 'twitter:player', content: embedUrl });\n metaTags.push({ property: 'twitter:player:width', content: 600 });\n metaTags.push({ property: 'twitter:text:player_width', content: 600 });\n metaTags.push({ property: 'twitter:player:height', content: 337 });\n metaTags.push({ property: 'twitter:player:stream', content: source });\n metaTags.push({ property: 'twitter:player:stream:content_type', content: contentType });\n } else {\n metaTags.push({ property: 'og:image', content: source });\n metaTags.push({ property: 'og:image:type', content: contentType });\n metaTags.push({ property: 'og:type', content: 'article' });\n metaTags.push({ property: 'twitter:card', content: 'summary_large_image' });\n }\n return metaTags;\n};\n\nvar createMetaTags = exports.createMetaTags = function createMetaTags(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail) {\n if (asset) {\n return createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail);\n };\n if (channel) {\n return createChannelMetaTags(siteHost, siteTitle, siteTwitter, channel);\n };\n return createBasicMetaTags(siteDescription, siteHost, siteTitle, siteTwitter);\n};\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar createBasicCanonicalLink = function createBasicCanonicalLink(page, siteHost) {\n return siteHost + \"/\" + page;\n};\n\nvar createAssetCanonicalLink = function createAssetCanonicalLink(asset, siteHost) {\n var channelName = void 0,\n certificateId = void 0,\n name = void 0,\n claimId = void 0;\n if (asset.claimData) {\n var _asset$claimData = asset.claimData;\n channelName = _asset$claimData.channelName;\n certificateId = _asset$claimData.certificateId;\n name = _asset$claimData.name;\n claimId = _asset$claimData.claimId;\n };\n if (channelName) {\n return siteHost + \"/\" + channelName + \":\" + certificateId + \"/\" + name;\n };\n return siteHost + \"/\" + claimId + \"/\" + name;\n};\n\nvar createChannelCanonicalLink = function createChannelCanonicalLink(channel, siteHost) {\n var name = channel.name,\n longId = channel.longId;\n\n return siteHost + \"/\" + name + \":\" + longId;\n};\n\nvar createCanonicalLink = exports.createCanonicalLink = function createCanonicalLink(asset, channel, page, siteHost) {\n if (asset) {\n return createAssetCanonicalLink(asset, siteHost);\n }\n if (channel) {\n return createChannelCanonicalLink(channel, siteHost);\n }\n return createBasicCanonicalLink(page, siteHost);\n};\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _Logo = __webpack_require__(89);\n\nvar _Logo2 = _interopRequireDefault(_Logo);\n\nvar _NavBarChannelOptionsDropdown = __webpack_require__(90);\n\nvar _NavBarChannelOptionsDropdown2 = _interopRequireDefault(_NavBarChannelOptionsDropdown);\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar VIEW = 'VIEW';\nvar LOGOUT = 'LOGOUT';\n\nvar NavBar = function (_React$Component) {\n _inherits(NavBar, _React$Component);\n\n function NavBar(props) {\n _classCallCheck(this, NavBar);\n\n var _this = _possibleConstructorReturn(this, (NavBar.__proto__ || Object.getPrototypeOf(NavBar)).call(this, props));\n\n _this.checkForLoggedInUser = _this.checkForLoggedInUser.bind(_this);\n _this.logoutUser = _this.logoutUser.bind(_this);\n _this.handleSelection = _this.handleSelection.bind(_this);\n return _this;\n }\n\n _createClass(NavBar, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n // check to see if the user is already logged in\n this.checkForLoggedInUser();\n }\n }, {\n key: 'checkForLoggedInUser',\n value: function checkForLoggedInUser() {\n var _this2 = this;\n\n var params = { credentials: 'include' };\n (0, _request2.default)('/user', params).then(function (_ref) {\n var data = _ref.data;\n\n _this2.props.onChannelLogin(data.channelName, data.shortChannelId, data.channelClaimId);\n }).catch(function (error) {\n console.log('/user error:', error.message);\n });\n }\n }, {\n key: 'logoutUser',\n value: function logoutUser() {\n var _this3 = this;\n\n var params = { credentials: 'include' };\n (0, _request2.default)('/logout', params).then(function () {\n _this3.props.onChannelLogout();\n }).catch(function (error) {\n console.log('/logout error', error.message);\n });\n }\n }, {\n key: 'handleSelection',\n value: function handleSelection(event) {\n var value = event.target.selectedOptions[0].value;\n switch (value) {\n case LOGOUT:\n this.logoutUser();\n break;\n case VIEW:\n // redirect to channel page\n this.props.history.push('/' + this.props.channelName + ':' + this.props.channelLongId);\n break;\n default:\n break;\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var siteDescription = this.props.siteDescription;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--wide nav-bar' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--short flex-container--row flex-container--space-between-center' },\n _react2.default.createElement(_Logo2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'nav-bar--center' },\n _react2.default.createElement(\n 'span',\n { className: 'nav-bar-tagline' },\n siteDescription\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'nav-bar--right' },\n _react2.default.createElement(\n _reactRouterDom.NavLink,\n { className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/', exact: true },\n 'Publish'\n ),\n _react2.default.createElement(\n _reactRouterDom.NavLink,\n { className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/about' },\n 'About'\n ),\n this.props.channelName ? _react2.default.createElement(_NavBarChannelOptionsDropdown2.default, {\n channelName: this.props.channelName,\n handleSelection: this.handleSelection,\n defaultSelection: this.props.channelName,\n VIEW: VIEW,\n LOGOUT: LOGOUT\n }) : _react2.default.createElement(\n _reactRouterDom.NavLink,\n { id: 'nav-bar-login-link', className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/login' },\n 'Channel'\n )\n )\n )\n );\n }\n }]);\n\n return NavBar;\n}(_react2.default.Component);\n\nexports.default = (0, _reactRouterDom.withRouter)(NavBar);\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Logo() {\n return _react2.default.createElement(\n 'svg',\n { version: '1.1', id: 'Layer_1', x: '0px', y: '0px', height: '24px', viewBox: '0 0 80 31', enableBackground: 'new 0 0 80 31', className: 'nav-bar-logo' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { to: '/' },\n _react2.default.createElement(\n 'title',\n null,\n 'Logo'\n ),\n _react2.default.createElement(\n 'desc',\n null,\n 'Spee.ch logo'\n ),\n _react2.default.createElement(\n 'g',\n { id: 'About' },\n _react2.default.createElement(\n 'g',\n { id: 'Publish-Form-V2-_x28_filled_x29_', transform: 'translate(-42.000000, -23.000000)' },\n _react2.default.createElement(\n 'g',\n { id: 'Group-17', transform: 'translate(42.000000, 22.000000)' },\n _react2.default.createElement(\n 'text',\n { transform: 'matrix(1 0 0 1 0 20)', fontSize: '25', fontFamily: 'Roboto' },\n 'Spee 10000000) {\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n throw new Error('Sorry, GIFs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n throw new Error(file.type + ' is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n }\n};\n\n/***/ }),\n/* 96 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishPreview = function (_React$Component) {\n _inherits(PublishPreview, _React$Component);\n\n function PublishPreview(props) {\n _classCallCheck(this, PublishPreview);\n\n var _this = _possibleConstructorReturn(this, (PublishPreview.__proto__ || Object.getPrototypeOf(PublishPreview)).call(this, props));\n\n _this.state = {\n imgSource: '',\n defaultThumbnail: '/assets/img/video_thumb_default.png'\n };\n return _this;\n }\n\n _createClass(PublishPreview, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.setPreviewImageSource(this.props.file);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(newProps) {\n if (newProps.file !== this.props.file) {\n this.setPreviewImageSource(newProps.file);\n }\n if (newProps.thumbnail !== this.props.thumbnail) {\n if (newProps.thumbnail) {\n this.setPreviewImageSourceFromFile(newProps.thumbnail);\n } else {\n this.setState({ imgSource: this.state.defaultThumbnail });\n }\n }\n }\n }, {\n key: 'setPreviewImageSourceFromFile',\n value: function setPreviewImageSourceFromFile(file) {\n var _this2 = this;\n\n var previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = function () {\n _this2.setState({ imgSource: previewReader.result });\n };\n }\n }, {\n key: 'setPreviewImageSource',\n value: function setPreviewImageSource(file) {\n if (file.type !== 'video/mp4') {\n this.setPreviewImageSourceFromFile(file);\n } else {\n if (this.props.thumbnail) {\n this.setPreviewImageSourceFromFile(this.props.thumbnail);\n }\n this.setState({ imgSource: this.state.defaultThumbnail });\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement('img', {\n id: 'dropzone-preview',\n src: this.state.imgSource,\n className: this.props.dimPreview ? 'dim' : '',\n alt: 'publish preview'\n });\n }\n }]);\n\n return PublishPreview;\n}(_react2.default.Component);\n\n;\n\nPublishPreview.propTypes = {\n dimPreview: _propTypes2.default.bool.isRequired,\n file: _propTypes2.default.object.isRequired,\n thumbnail: _propTypes2.default.object\n};\n\nexports.default = PublishPreview;\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(98);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n publish = _ref.publish;\n\n return {\n file: publish.file\n };\n};\n\nvar mapDispatchToProps = {\n clearFile: _publish.clearFile,\n startPublish: _publish.startPublish\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _Dropzone = __webpack_require__(38);\n\nvar _Dropzone2 = _interopRequireDefault(_Dropzone);\n\nvar _PublishTitleInput = __webpack_require__(99);\n\nvar _PublishTitleInput2 = _interopRequireDefault(_PublishTitleInput);\n\nvar _PublishUrlInput = __webpack_require__(101);\n\nvar _PublishUrlInput2 = _interopRequireDefault(_PublishUrlInput);\n\nvar _PublishThumbnailInput = __webpack_require__(104);\n\nvar _PublishThumbnailInput2 = _interopRequireDefault(_PublishThumbnailInput);\n\nvar _PublishMetadataInputs = __webpack_require__(106);\n\nvar _PublishMetadataInputs2 = _interopRequireDefault(_PublishMetadataInputs);\n\nvar _ChannelSelect = __webpack_require__(109);\n\nvar _ChannelSelect2 = _interopRequireDefault(_ChannelSelect);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishDetails = function (_React$Component) {\n _inherits(PublishDetails, _React$Component);\n\n function PublishDetails(props) {\n _classCallCheck(this, PublishDetails);\n\n var _this = _possibleConstructorReturn(this, (PublishDetails.__proto__ || Object.getPrototypeOf(PublishDetails)).call(this, props));\n\n _this.onPublishSubmit = _this.onPublishSubmit.bind(_this);\n return _this;\n }\n\n _createClass(PublishDetails, [{\n key: 'onPublishSubmit',\n value: function onPublishSubmit() {\n this.props.startPublish(this.props.history);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { className: 'row row--no-bottom' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(_PublishTitleInput2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(_Dropzone2.default, null)\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { id: 'publish-active-area', className: 'row row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--wide' },\n _react2.default.createElement(_PublishUrlInput2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--wide' },\n _react2.default.createElement(_ChannelSelect2.default, null)\n ),\n this.props.file.type === 'video/mp4' && _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--wide ' },\n _react2.default.createElement(_PublishThumbnailInput2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--no-bottom row--wide' },\n _react2.default.createElement(_PublishMetadataInputs2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide align-content-center' },\n _react2.default.createElement(\n 'button',\n { id: 'publish-submit', className: 'button--primary button--large', onClick: this.onPublishSubmit },\n 'Publish'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-bottom align-content-center' },\n _react2.default.createElement(\n 'button',\n { className: 'button--cancel', onClick: this.props.clearFile },\n 'Cancel'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--short align-content-center' },\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'By clicking \\'Publish\\', you affirm that you have the rights to publish this content to the LBRY network, and that you understand the properties of publishing it to a decentralized, user-controlled network. ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://lbry.io/learn' },\n 'Read more.'\n )\n )\n )\n )\n )\n );\n }\n }]);\n\n return PublishDetails;\n}(_react2.default.Component);\n\n;\n\nexports.default = (0, _reactRouterDom.withRouter)(PublishDetails);\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(100);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n title: publish.metadata.title\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onMetadataChange: function onMetadataChange(name, value) {\n dispatch((0, _publish.updateMetadata)(name, value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishTitleInput = function (_React$Component) {\n _inherits(PublishTitleInput, _React$Component);\n\n function PublishTitleInput(props) {\n _classCallCheck(this, PublishTitleInput);\n\n var _this = _possibleConstructorReturn(this, (PublishTitleInput.__proto__ || Object.getPrototypeOf(PublishTitleInput)).call(this, props));\n\n _this.handleInput = _this.handleInput.bind(_this);\n return _this;\n }\n\n _createClass(PublishTitleInput, [{\n key: 'handleInput',\n value: function handleInput(e) {\n var name = e.target.name;\n var value = e.target.value;\n this.props.onMetadataChange(name, value);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement('input', { type: 'text', id: 'publish-title', className: 'input-text text--large input-text--full-width', name: 'title', placeholder: 'Give your post a title...', onChange: this.handleInput, value: this.props.title });\n }\n }]);\n\n return PublishTitleInput;\n}(_react2.default.Component);\n\nexports.default = PublishTitleInput;\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _publish = __webpack_require__(4);\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(102);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n publish = _ref.publish;\n\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n loggedInChannelShortId: channel.loggedInChannel.shortId,\n fileName: publish.file.name,\n publishInChannel: publish.publishInChannel,\n selectedChannel: publish.selectedChannel,\n claim: publish.claim,\n urlError: publish.error.url\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onClaimChange: function onClaimChange(value) {\n dispatch((0, _publish.updateClaim)(value));\n dispatch((0, _publish.updateError)('publishSubmit', null));\n },\n onUrlError: function onUrlError(value) {\n dispatch((0, _publish.updateError)('url', value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nvar _PublishUrlMiddleDisplay = __webpack_require__(103);\n\nvar _PublishUrlMiddleDisplay2 = _interopRequireDefault(_PublishUrlMiddleDisplay);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishUrlInput = function (_React$Component) {\n _inherits(PublishUrlInput, _React$Component);\n\n function PublishUrlInput(props) {\n _classCallCheck(this, PublishUrlInput);\n\n var _this = _possibleConstructorReturn(this, (PublishUrlInput.__proto__ || Object.getPrototypeOf(PublishUrlInput)).call(this, props));\n\n _this.handleInput = _this.handleInput.bind(_this);\n return _this;\n }\n\n _createClass(PublishUrlInput, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props = this.props,\n claim = _props.claim,\n fileName = _props.fileName;\n\n if (!claim) {\n this.setClaimName(fileName);\n }\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(_ref) {\n var claim = _ref.claim,\n fileName = _ref.fileName;\n\n // if a new file was chosen, update the claim name\n if (fileName !== this.props.fileName) {\n return this.setClaimName(fileName);\n }\n // if the claim has updated, check its availability\n if (claim !== this.props.claim) {\n this.validateClaim(claim);\n }\n }\n }, {\n key: 'handleInput',\n value: function handleInput(event) {\n var value = event.target.value;\n value = this.cleanseInput(value);\n // update the state\n this.props.onClaimChange(value);\n }\n }, {\n key: 'cleanseInput',\n value: function cleanseInput(input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n }, {\n key: 'setClaimName',\n value: function setClaimName(fileName) {\n var fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.'));\n var cleanClaimName = this.cleanseInput(fileNameWithoutEnding);\n this.props.onClaimChange(cleanClaimName);\n }\n }, {\n key: 'validateClaim',\n value: function validateClaim(claim) {\n var _this2 = this;\n\n if (!claim) {\n return this.props.onUrlError('Enter a url above');\n }\n (0, _request2.default)('/api/claim/availability/' + claim).then(function () {\n _this2.props.onUrlError(null);\n }).catch(function (error) {\n _this2.props.onUrlError(error.message);\n });\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n claim = _props2.claim,\n loggedInChannelName = _props2.loggedInChannelName,\n loggedInChannelShortId = _props2.loggedInChannelShortId,\n publishInChannel = _props2.publishInChannel,\n selectedChannel = _props2.selectedChannel,\n urlError = _props2.urlError;\n\n return _react2.default.createElement(\n 'div',\n { className: 'column column--10 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary span--relative' },\n _react2.default.createElement(\n 'span',\n { className: 'url-text--secondary' },\n 'spee.ch / '\n ),\n _react2.default.createElement(_PublishUrlMiddleDisplay2.default, {\n publishInChannel: publishInChannel,\n selectedChannel: selectedChannel,\n loggedInChannelName: loggedInChannelName,\n loggedInChannelShortId: loggedInChannelShortId\n }),\n _react2.default.createElement('input', { type: 'text', id: 'claim-name-input', className: 'input-text', name: 'claim', placeholder: 'your-url-here', onChange: this.handleInput, value: claim }),\n claim && !urlError && _react2.default.createElement(\n 'span',\n { id: 'input-success-claim-name', className: 'info-message--success span--absolute' },\n '\\u2713'\n ),\n urlError && _react2.default.createElement(\n 'span',\n { id: 'input-success-channel-name', className: 'info-message--failure span--absolute' },\n '\\u2716'\n )\n ),\n _react2.default.createElement(\n 'div',\n null,\n urlError ? _react2.default.createElement(\n 'p',\n { id: 'input-error-claim-name', className: 'info-message--failure' },\n urlError\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Choose a custom url'\n )\n )\n );\n }\n }]);\n\n return PublishUrlInput;\n}(_react2.default.Component);\n\nexports.default = PublishUrlInput;\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction UrlMiddle(_ref) {\n var publishInChannel = _ref.publishInChannel,\n selectedChannel = _ref.selectedChannel,\n loggedInChannelName = _ref.loggedInChannelName,\n loggedInChannelShortId = _ref.loggedInChannelShortId;\n\n if (publishInChannel) {\n if (selectedChannel === loggedInChannelName) {\n return _react2.default.createElement(\n 'span',\n { id: 'url-channel', className: 'url-text--secondary' },\n loggedInChannelName,\n ':',\n loggedInChannelShortId,\n ' /'\n );\n }\n return _react2.default.createElement(\n 'span',\n { id: 'url-channel-placeholder', className: 'url-text--secondary tooltip' },\n '@channel',\n _react2.default.createElement(\n 'span',\n {\n className: 'tooltip-text' },\n 'Select a channel below'\n ),\n ' /'\n );\n }\n return _react2.default.createElement(\n 'span',\n { id: 'url-no-channel-placeholder', className: 'url-text--secondary tooltip' },\n 'xyz',\n _react2.default.createElement(\n 'span',\n { className: 'tooltip-text' },\n 'This will be a random id'\n ),\n ' /'\n );\n}\n\nUrlMiddle.propTypes = {\n publishInChannel: _propTypes2.default.bool.isRequired,\n loggedInChannelName: _propTypes2.default.string,\n loggedInChannelShortId: _propTypes2.default.string\n};\n\nexports.default = UrlMiddle;\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(105);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var file = _ref.publish.file;\n\n return {\n file: file\n };\n};\n\nvar mapDispatchToProps = {\n onNewThumbnail: _publish.onNewThumbnail\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction dataURItoBlob(dataURI) {\n // convert base64/URLEncoded data component to raw binary data held in a string\n var byteString = atob(dataURI.split(',')[1]);\n // separate out the mime component\n var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n // write the bytes of the string to a typed array\n var ia = new Uint8Array(byteString.length);\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n return new Blob([ia], { type: mimeString });\n}\n\nvar PublishThumbnailInput = function (_React$Component) {\n _inherits(PublishThumbnailInput, _React$Component);\n\n function PublishThumbnailInput(props) {\n _classCallCheck(this, PublishThumbnailInput);\n\n var _this = _possibleConstructorReturn(this, (PublishThumbnailInput.__proto__ || Object.getPrototypeOf(PublishThumbnailInput)).call(this, props));\n\n _this.state = {\n videoSource: null,\n error: null,\n sliderMinRange: 1,\n sliderMaxRange: null,\n sliderValue: null\n };\n _this.handleVideoLoadedData = _this.handleVideoLoadedData.bind(_this);\n _this.handleSliderChange = _this.handleSliderChange.bind(_this);\n _this.createThumbnail = _this.createThumbnail.bind(_this);\n return _this;\n }\n\n _createClass(PublishThumbnailInput, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var file = this.props.file;\n\n this.setVideoSource(file);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n // if file changes\n if (nextProps.file && nextProps.file !== this.props.file) {\n var file = nextProps.file;\n\n this.setVideoSource(file);\n };\n }\n }, {\n key: 'setVideoSource',\n value: function setVideoSource(file) {\n var _this2 = this;\n\n var previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = function () {\n var dataUri = previewReader.result;\n var blob = dataURItoBlob(dataUri);\n var videoSource = URL.createObjectURL(blob);\n _this2.setState({ videoSource: videoSource });\n };\n }\n }, {\n key: 'handleVideoLoadedData',\n value: function handleVideoLoadedData(event) {\n var duration = event.target.duration;\n var totalMinutes = Math.floor(duration / 60);\n var totalSeconds = Math.floor(duration % 60);\n // set the slider\n this.setState({\n sliderMaxRange: duration * 100,\n sliderValue: duration * 100 / 2,\n totalMinutes: totalMinutes,\n totalSeconds: totalSeconds\n });\n // update the current time of the video\n var video = document.getElementById('video-thumb-player');\n video.currentTime = duration / 2;\n }\n }, {\n key: 'handleSliderChange',\n value: function handleSliderChange(event) {\n var value = parseInt(event.target.value);\n // update the slider value\n this.setState({\n sliderValue: value\n });\n // update the current time of the video\n var video = document.getElementById('video-thumb-player');\n video.currentTime = value / 100;\n }\n }, {\n key: 'createThumbnail',\n value: function createThumbnail() {\n // take a snapshot\n var video = document.getElementById('video-thumb-player');\n var canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);\n var dataUrl = canvas.toDataURL();\n var blob = dataURItoBlob(dataUrl);\n var snapshot = new File([blob], 'thumbnail.png', {\n type: 'image/png'\n });\n // set the thumbnail in redux store\n if (snapshot) {\n this.props.onNewThumbnail(snapshot);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _state = this.state,\n error = _state.error,\n videoSource = _state.videoSource,\n sliderMinRange = _state.sliderMinRange,\n sliderMaxRange = _state.sliderMaxRange,\n sliderValue = _state.sliderValue,\n totalMinutes = _state.totalMinutes,\n totalSeconds = _state.totalSeconds;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'label',\n { className: 'label' },\n 'Thumbnail:'\n ),\n _react2.default.createElement('video', {\n id: 'video-thumb-player',\n preload: 'metadata',\n muted: true,\n style: { display: 'none' },\n playsInline: true,\n onLoadedData: this.handleVideoLoadedData,\n src: videoSource,\n onSeeked: this.createThumbnail\n }),\n sliderValue ? _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'flex-container--row flex-container--space-between-center', style: { width: '100%' } },\n _react2.default.createElement(\n 'span',\n { className: 'info-message' },\n '0\\'00\"'\n ),\n _react2.default.createElement(\n 'span',\n { className: 'info-message' },\n totalMinutes,\n '\\'',\n totalSeconds,\n '\"'\n )\n ),\n _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement('input', {\n type: 'range',\n min: sliderMinRange,\n max: sliderMaxRange,\n value: sliderValue,\n className: 'slider',\n onChange: this.handleSliderChange\n })\n )\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'loading... '\n ),\n error ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n error\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Use slider to set thumbnail'\n )\n );\n }\n }]);\n\n return PublishThumbnailInput;\n}(_react2.default.Component);\n\nexports.default = PublishThumbnailInput;\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(107);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n showMetadataInputs: publish.showMetadataInputs,\n description: publish.metadata.description,\n license: publish.metadata.license,\n nsfw: publish.metadata.nsfw\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onMetadataChange: function onMetadataChange(name, value) {\n dispatch((0, _publish.updateMetadata)(name, value));\n },\n onToggleMetadataInputs: function onToggleMetadataInputs(value) {\n dispatch((0, _publish.toggleMetadataInputs)(value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ExpandingTextArea = __webpack_require__(108);\n\nvar _ExpandingTextArea2 = _interopRequireDefault(_ExpandingTextArea);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishMetadataInputs = function (_React$Component) {\n _inherits(PublishMetadataInputs, _React$Component);\n\n function PublishMetadataInputs(props) {\n _classCallCheck(this, PublishMetadataInputs);\n\n var _this = _possibleConstructorReturn(this, (PublishMetadataInputs.__proto__ || Object.getPrototypeOf(PublishMetadataInputs)).call(this, props));\n\n _this.toggleShowInputs = _this.toggleShowInputs.bind(_this);\n _this.handleInput = _this.handleInput.bind(_this);\n _this.handleSelect = _this.handleSelect.bind(_this);\n return _this;\n }\n\n _createClass(PublishMetadataInputs, [{\n key: 'toggleShowInputs',\n value: function toggleShowInputs() {\n this.props.onToggleMetadataInputs(!this.props.showMetadataInputs);\n }\n }, {\n key: 'handleInput',\n value: function handleInput(event) {\n var target = event.target;\n var value = target.type === 'checkbox' ? target.checked : target.value;\n var name = target.name;\n this.props.onMetadataChange(name, value);\n }\n }, {\n key: 'handleSelect',\n value: function handleSelect(event) {\n var name = event.target.name;\n var selectedOption = event.target.selectedOptions[0].value;\n this.props.onMetadataChange(name, selectedOption);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { id: 'publish-details', className: 'row row--padded row--no-top row--wide' },\n this.props.showMetadataInputs && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'row row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'label',\n { htmlFor: 'publish-license', className: 'label' },\n 'Description:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7 column--sml-10' },\n _react2.default.createElement(_ExpandingTextArea2.default, {\n id: 'publish-description',\n className: 'textarea textarea--primary textarea--full-width',\n rows: 1,\n maxLength: 2000,\n style: { maxHeight: 200 },\n name: 'description',\n placeholder: 'Optional description',\n value: this.props.description,\n onChange: this.handleInput })\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--med-10' },\n _react2.default.createElement(\n 'label',\n { htmlFor: 'publish-license', className: 'label' },\n 'License:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7 column--sml-10' },\n _react2.default.createElement(\n 'select',\n { type: 'text', name: 'license', id: 'publish-license', className: 'select select--primary', onChange: this.handleSelect },\n _react2.default.createElement(\n 'option',\n { value: ' ' },\n 'Unspecified'\n ),\n _react2.default.createElement(\n 'option',\n { value: 'Public Domain' },\n 'Public Domain'\n ),\n _react2.default.createElement(\n 'option',\n { value: 'Creative Commons' },\n 'Creative Commons'\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3' },\n _react2.default.createElement(\n 'label',\n { htmlFor: 'publish-nsfw', className: 'label' },\n 'Mature:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement('input', { className: 'input-checkbox', type: 'checkbox', id: 'publish-nsfw', name: 'nsfw', value: this.props.nsfw, onChange: this.handleInput })\n )\n )\n ),\n _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: this.toggleShowInputs },\n this.props.showMetadataInputs ? 'less' : 'more'\n )\n );\n }\n }]);\n\n return PublishMetadataInputs;\n}(_react2.default.Component);\n\nexports.default = PublishMetadataInputs;\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ExpandingTextarea = function (_Component) {\n _inherits(ExpandingTextarea, _Component);\n\n function ExpandingTextarea(props) {\n _classCallCheck(this, ExpandingTextarea);\n\n var _this = _possibleConstructorReturn(this, (ExpandingTextarea.__proto__ || Object.getPrototypeOf(ExpandingTextarea)).call(this, props));\n\n _this._handleChange = _this._handleChange.bind(_this);\n return _this;\n }\n\n _createClass(ExpandingTextarea, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.adjustTextarea({});\n }\n }, {\n key: '_handleChange',\n value: function _handleChange(event) {\n var onChange = this.props.onChange;\n\n if (onChange) onChange(event);\n this.adjustTextarea(event);\n }\n }, {\n key: 'adjustTextarea',\n value: function adjustTextarea(_ref) {\n var _ref$target = _ref.target,\n target = _ref$target === undefined ? this.el : _ref$target;\n\n target.style.height = 0;\n target.style.height = target.scrollHeight + 'px';\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var rest = _objectWithoutProperties(this.props, []);\n\n return _react2.default.createElement('textarea', _extends({}, rest, {\n ref: function ref(x) {\n return _this2.el = x;\n },\n onChange: this._handleChange\n }));\n }\n }]);\n\n return ExpandingTextarea;\n}(_react.Component);\n\nExpandingTextarea.propTypes = {\n onChange: _propTypes2.default.func\n};\n\nexports.default = ExpandingTextarea;\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(110);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n publish = _ref.publish;\n\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n publishInChannel: publish.publishInChannel,\n selectedChannel: publish.selectedChannel,\n channelError: publish.error.channel\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onPublishInChannelChange: function onPublishInChannelChange(value) {\n dispatch((0, _publish.updateError)('channel', null));\n dispatch((0, _publish.setPublishInChannel)(value));\n },\n onChannelSelect: function onChannelSelect(value) {\n dispatch((0, _publish.updateError)('channel', null));\n dispatch((0, _publish.updateSelectedChannel)(value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 110 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ChannelLoginForm = __webpack_require__(39);\n\nvar _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm);\n\nvar _ChannelCreateForm = __webpack_require__(40);\n\nvar _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm);\n\nvar _publish_channel_select_states = __webpack_require__(33);\n\nvar states = _interopRequireWildcard(_publish_channel_select_states);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelSelect = function (_React$Component) {\n _inherits(ChannelSelect, _React$Component);\n\n function ChannelSelect(props) {\n _classCallCheck(this, ChannelSelect);\n\n var _this = _possibleConstructorReturn(this, (ChannelSelect.__proto__ || Object.getPrototypeOf(ChannelSelect)).call(this, props));\n\n _this.toggleAnonymousPublish = _this.toggleAnonymousPublish.bind(_this);\n _this.handleSelection = _this.handleSelection.bind(_this);\n return _this;\n }\n\n _createClass(ChannelSelect, [{\n key: 'toggleAnonymousPublish',\n value: function toggleAnonymousPublish(event) {\n var value = event.target.value;\n if (value === 'anonymous') {\n this.props.onPublishInChannelChange(false);\n } else {\n this.props.onPublishInChannelChange(true);\n }\n }\n }, {\n key: 'handleSelection',\n value: function handleSelection(event) {\n var selectedOption = event.target.selectedOptions[0].value;\n this.props.onChannelSelect(selectedOption);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'form',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--med-10' },\n _react2.default.createElement('input', { type: 'radio', name: 'anonymous-or-channel', id: 'anonymous-radio', className: 'input-radio', value: 'anonymous', checked: !this.props.publishInChannel, onChange: this.toggleAnonymousPublish }),\n _react2.default.createElement(\n 'label',\n { className: 'label label--pointer', htmlFor: 'anonymous-radio' },\n 'Anonymous'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7 column--med-10' },\n _react2.default.createElement('input', { type: 'radio', name: 'anonymous-or-channel', id: 'channel-radio', className: 'input-radio', value: 'in a channel', checked: this.props.publishInChannel, onChange: this.toggleAnonymousPublish }),\n _react2.default.createElement(\n 'label',\n { className: 'label label--pointer', htmlFor: 'channel-radio' },\n 'In a channel'\n )\n ),\n this.props.channelError ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n this.props.channelError\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Publish anonymously or in a channel'\n )\n ),\n this.props.publishInChannel && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'column column--3' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'channel-name-select' },\n 'Channel:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement(\n 'select',\n { type: 'text', id: 'channel-name-select', className: 'select select--arrow', value: this.props.selectedChannel, onChange: this.handleSelection },\n this.props.loggedInChannelName && _react2.default.createElement(\n 'option',\n { value: this.props.loggedInChannelName, id: 'publish-channel-select-channel-option' },\n this.props.loggedInChannelName\n ),\n _react2.default.createElement(\n 'option',\n { value: states.LOGIN },\n 'Existing'\n ),\n _react2.default.createElement(\n 'option',\n { value: states.CREATE },\n 'New'\n )\n )\n ),\n this.props.selectedChannel === states.LOGIN && _react2.default.createElement(_ChannelLoginForm2.default, null),\n this.props.selectedChannel === states.CREATE && _react2.default.createElement(_ChannelCreateForm2.default, null)\n )\n );\n }\n }]);\n\n return ChannelSelect;\n}(_react2.default.Component);\n\nexports.default = ChannelSelect;\n\n/***/ }),\n/* 111 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelLoginForm = function (_React$Component) {\n _inherits(ChannelLoginForm, _React$Component);\n\n function ChannelLoginForm(props) {\n _classCallCheck(this, ChannelLoginForm);\n\n var _this = _possibleConstructorReturn(this, (ChannelLoginForm.__proto__ || Object.getPrototypeOf(ChannelLoginForm)).call(this, props));\n\n _this.state = {\n error: null,\n name: '',\n password: ''\n };\n _this.handleInput = _this.handleInput.bind(_this);\n _this.loginToChannel = _this.loginToChannel.bind(_this);\n return _this;\n }\n\n _createClass(ChannelLoginForm, [{\n key: 'handleInput',\n value: function handleInput(event) {\n var name = event.target.name;\n var value = event.target.value;\n this.setState(_defineProperty({}, name, value));\n }\n }, {\n key: 'loginToChannel',\n value: function loginToChannel(event) {\n var _this2 = this;\n\n event.preventDefault();\n var params = {\n method: 'POST',\n body: JSON.stringify({ username: this.state.name, password: this.state.password }),\n headers: new Headers({\n 'Content-Type': 'application/json'\n }),\n credentials: 'include'\n };\n (0, _request2.default)('login', params).then(function (_ref) {\n var success = _ref.success,\n channelName = _ref.channelName,\n shortChannelId = _ref.shortChannelId,\n channelClaimId = _ref.channelClaimId,\n message = _ref.message;\n\n if (success) {\n _this2.props.onChannelLogin(channelName, shortChannelId, channelClaimId);\n } else {\n _this2.setState({ 'error': message });\n };\n }).catch(function (error) {\n if (error.message) {\n _this2.setState({ 'error': error.message });\n } else {\n _this2.setState({ 'error': error });\n }\n });\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'form',\n { id: 'channel-login-form' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'channel-login-name-input' },\n 'Name:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary flex-container--row flex-container--left-bottom' },\n _react2.default.createElement(\n 'span',\n null,\n '@'\n ),\n _react2.default.createElement('input', { type: 'text', id: 'channel-login-name-input', className: 'input-text', name: 'name', placeholder: 'Your Channel Name', value: this.state.channelName, onChange: this.handleInput })\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'channel-login-password-input' },\n 'Password:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary' },\n _react2.default.createElement('input', { type: 'password', id: 'channel-login-password-input', name: 'password', className: 'input-text', placeholder: '', value: this.state.channelPassword, onChange: this.handleInput })\n )\n )\n ),\n this.state.error ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n this.state.error\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Enter the name and password for your channel'\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary', onClick: this.loginToChannel },\n 'Authenticate'\n )\n )\n );\n }\n }]);\n\n return ChannelLoginForm;\n}(_react2.default.Component);\n\nexports.default = ChannelLoginForm;\n\n/***/ }),\n/* 112 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ProgressBar = __webpack_require__(20);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelCreateForm = function (_React$Component) {\n _inherits(ChannelCreateForm, _React$Component);\n\n function ChannelCreateForm(props) {\n _classCallCheck(this, ChannelCreateForm);\n\n var _this = _possibleConstructorReturn(this, (ChannelCreateForm.__proto__ || Object.getPrototypeOf(ChannelCreateForm)).call(this, props));\n\n _this.state = {\n error: null,\n channel: '',\n password: '',\n status: null\n };\n _this.handleChannelInput = _this.handleChannelInput.bind(_this);\n _this.handleInput = _this.handleInput.bind(_this);\n _this.createChannel = _this.createChannel.bind(_this);\n return _this;\n }\n\n _createClass(ChannelCreateForm, [{\n key: 'cleanseChannelInput',\n value: function cleanseChannelInput(input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n }, {\n key: 'handleChannelInput',\n value: function handleChannelInput(event) {\n var value = event.target.value;\n value = this.cleanseChannelInput(value);\n this.setState({ channel: value });\n if (value) {\n this.updateIsChannelAvailable(value);\n } else {\n this.setState({ error: 'Please enter a channel name' });\n }\n }\n }, {\n key: 'handleInput',\n value: function handleInput(event) {\n var name = event.target.name;\n var value = event.target.value;\n this.setState(_defineProperty({}, name, value));\n }\n }, {\n key: 'updateIsChannelAvailable',\n value: function updateIsChannelAvailable(channel) {\n var _this2 = this;\n\n var channelWithAtSymbol = '@' + channel;\n (0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol).then(function () {\n _this2.setState({ 'error': null });\n }).catch(function (error) {\n _this2.setState({ 'error': error.message });\n });\n }\n }, {\n key: 'checkIsChannelAvailable',\n value: function checkIsChannelAvailable(channel) {\n var channelWithAtSymbol = '@' + channel;\n return (0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol);\n }\n }, {\n key: 'checkIsPasswordProvided',\n value: function checkIsPasswordProvided(password) {\n return new Promise(function (resolve, reject) {\n if (!password || password.length < 1) {\n return reject(new Error('Please provide a password'));\n }\n resolve();\n });\n }\n }, {\n key: 'makePublishChannelRequest',\n value: function makePublishChannelRequest(username, password) {\n var params = {\n method: 'POST',\n body: JSON.stringify({ username: username, password: password }),\n headers: new Headers({\n 'Content-Type': 'application/json'\n }),\n credentials: 'include'\n };\n return new Promise(function (resolve, reject) {\n (0, _request2.default)('/signup', params).then(function (result) {\n return resolve(result);\n }).catch(function (error) {\n reject(new Error('Unfortunately, we encountered an error while creating your channel. Please let us know in Discord! ' + error.message));\n });\n });\n }\n }, {\n key: 'createChannel',\n value: function createChannel(event) {\n var _this3 = this;\n\n event.preventDefault();\n this.checkIsPasswordProvided(this.state.password).then(function () {\n return _this3.checkIsChannelAvailable(_this3.state.channel);\n }).then(function () {\n _this3.setState({ status: 'We are publishing your new channel. Sit tight...' });\n return _this3.makePublishChannelRequest(_this3.state.channel, _this3.state.password);\n }).then(function (result) {\n _this3.setState({ status: null });\n _this3.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId);\n }).catch(function (error) {\n if (error.message) {\n _this3.setState({ 'error': error.message, status: null });\n } else {\n _this3.setState({ 'error': error, status: null });\n };\n });\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n !this.state.status ? _react2.default.createElement(\n 'form',\n { id: 'publish-channel-form' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'new-channel-name' },\n 'Name:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary flex-container--row flex-container--left-bottom span--relative' },\n _react2.default.createElement(\n 'span',\n null,\n '@'\n ),\n _react2.default.createElement('input', { type: 'text', name: 'channel', id: 'new-channel-name', className: 'input-text', placeholder: 'exampleChannelName', value: this.state.channel, onChange: this.handleChannelInput }),\n this.state.channel && !this.state.error && _react2.default.createElement(\n 'span',\n { id: 'input-success-channel-name', className: 'info-message--success span--absolute' },\n '\\u2713'\n ),\n this.state.error && _react2.default.createElement(\n 'span',\n { id: 'input-success-channel-name', className: 'info-message--failure span--absolute' },\n '\\u2716'\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'new-channel-password' },\n 'Password:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary' },\n _react2.default.createElement('input', { type: 'password', name: 'password', id: 'new-channel-password', className: 'input-text', placeholder: '', value: this.state.password, onChange: this.handleInput })\n )\n )\n ),\n this.state.error ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n this.state.error\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Choose a name and password for your channel'\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary', onClick: this.createChannel },\n 'Create Channel'\n )\n )\n ) : _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n this.state.status\n ),\n _react2.default.createElement(_ProgressBar2.default, { size: 12 })\n )\n );\n }\n }]);\n\n return ChannelCreateForm;\n}(_react2.default.Component);\n\nexports.default = ChannelCreateForm;\n\n/***/ }),\n/* 113 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ActiveStatusBar = function ActiveStatusBar() {\n return _react2.default.createElement(\n 'span',\n { className: 'progress-bar progress-bar--active' },\n '| '\n );\n};\n\nexports.default = ActiveStatusBar;\n\n/***/ }),\n/* 114 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar InactiveStatusBar = function InactiveStatusBar() {\n return _react2.default.createElement(\n 'span',\n { className: 'progress-bar progress-bar--inactive' },\n '| '\n );\n};\n\nexports.default = InactiveStatusBar;\n\n/***/ }),\n/* 115 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(116);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n status: publish.status.status,\n message: publish.status.message\n };\n};\n\nvar mapDispatchToProps = {\n clearFile: _publish.clearFile\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 116 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ProgressBar = __webpack_require__(20);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _publish_claim_states = __webpack_require__(117);\n\nvar publishStates = _interopRequireWildcard(_publish_claim_states);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishStatus = function (_React$Component) {\n _inherits(PublishStatus, _React$Component);\n\n function PublishStatus() {\n _classCallCheck(this, PublishStatus);\n\n return _possibleConstructorReturn(this, (PublishStatus.__proto__ || Object.getPrototypeOf(PublishStatus)).apply(this, arguments));\n }\n\n _createClass(PublishStatus, [{\n key: 'render',\n value: function render() {\n var _props = this.props,\n status = _props.status,\n message = _props.message,\n clearFile = _props.clearFile;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column flex-container--center-center' },\n status === publishStates.LOAD_START && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'File is loading to server'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'blue' },\n '0%'\n )\n ),\n status === publishStates.LOADING && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'File is loading to server'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'blue' },\n message\n )\n )\n ),\n status === publishStates.PUBLISHING && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'Upload complete. Your file is now being published on the blockchain...'\n ),\n _react2.default.createElement(_ProgressBar2.default, { size: 12 }),\n _react2.default.createElement(\n 'p',\n null,\n 'Curious what magic is happening here? ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' },\n 'Learn more.'\n )\n )\n ),\n status === publishStates.SUCCESS && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'Your publish is complete! You are being redirected to it now.'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'If you are not automatically redirected, ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: message },\n 'click here.'\n )\n )\n ),\n status === publishStates.FAILED && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'Something went wrong...'\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'strong',\n null,\n message\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'For help, post the above error text in the #speech channel on the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' },\n 'lbry discord'\n )\n ),\n _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: clearFile },\n 'Reset'\n )\n )\n );\n }\n }]);\n\n return PublishStatus;\n}(_react2.default.Component);\n\n;\n\nexports.default = PublishStatus;\n\n/***/ }),\n/* 117 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LOAD_START = exports.LOAD_START = 'LOAD_START';\nvar LOADING = exports.LOADING = 'LOADING';\nvar PUBLISHING = exports.PUBLISHING = 'PUBLISHING';\nvar SUCCESS = exports.SUCCESS = 'SUCCESS';\nvar FAILED = exports.FAILED = 'FAILED';\n\n/***/ }),\n/* 118 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(119);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n message: publish.disabledMessage\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 119 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishDisabledMessage = function (_React$Component) {\n _inherits(PublishDisabledMessage, _React$Component);\n\n function PublishDisabledMessage() {\n _classCallCheck(this, PublishDisabledMessage);\n\n return _possibleConstructorReturn(this, (PublishDisabledMessage.__proto__ || Object.getPrototypeOf(PublishDisabledMessage)).apply(this, arguments));\n }\n\n _createClass(PublishDisabledMessage, [{\n key: 'render',\n value: function render() {\n var message = this.props.message;\n console.log('this.props.message:', message);\n return _react2.default.createElement(\n 'div',\n { className: 'row dropzone--disabled row--tall flex-container--column flex-container--center-center' },\n _react2.default.createElement(\n 'p',\n { className: 'text--disabled' },\n 'Publishing is currently disabled.'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'text--disabled' },\n message\n )\n );\n }\n }]);\n\n return PublishDisabledMessage;\n}(_react2.default.Component);\n\nexports.default = PublishDisabledMessage;\n\n/***/ }),\n/* 120 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AboutPage = function (_React$Component) {\n _inherits(AboutPage, _React$Component);\n\n function AboutPage() {\n _classCallCheck(this, AboutPage);\n\n return _possibleConstructorReturn(this, (AboutPage.__proto__ || Object.getPrototypeOf(AboutPage)).apply(this, arguments));\n }\n\n _createClass(AboutPage, [{\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: 'About', pageUri: 'about' }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'p',\n { className: 'pull-quote' },\n 'Spee.ch is an open-source project. Please contribute to the existing site, or fork it and make your own.'\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://twitter.com/spee_ch' },\n 'TWITTER'\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch' },\n 'GITHUB'\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://discord.gg/YjYbwhS' },\n 'DISCORD CHANNEL'\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch/blob/master/README.md' },\n 'DOCUMENTATION'\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'p',\n null,\n 'Spee.ch is a media-hosting site that reads from and publishes content to the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://lbry.io' },\n 'LBRY'\n ),\n ' blockchain.'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'Spee.ch is a hosting service, but with the added benefit that it stores your content on a decentralized network of computers -- the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://lbry.io/get' },\n 'LBRY'\n ),\n ' network. This means that your images are stored in multiple locations without a single point of failure.'\n ),\n _react2.default.createElement(\n 'h3',\n null,\n 'Contribute'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'If you have an idea for your own spee.ch-like site on top of LBRY, fork our ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://github.com/lbryio/spee.ch' },\n 'github repo'\n ),\n ' and go to town!'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'If you want to improve spee.ch, join our ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://discord.gg/YjYbwhS' },\n 'discord channel'\n ),\n ' or solve one of our ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://github.com/lbryio/spee.ch/issues' },\n 'github issues'\n ),\n '.'\n )\n )\n )\n )\n );\n }\n }]);\n\n return AboutPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = AboutPage;\n\n/***/ }),\n/* 121 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(122);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel;\n\n return {\n loggedInChannelName: channel.loggedInChannel.name\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 122 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _ChannelLoginForm = __webpack_require__(39);\n\nvar _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm);\n\nvar _ChannelCreateForm = __webpack_require__(40);\n\nvar _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LoginPage = function (_React$Component) {\n _inherits(LoginPage, _React$Component);\n\n function LoginPage() {\n _classCallCheck(this, LoginPage);\n\n return _possibleConstructorReturn(this, (LoginPage.__proto__ || Object.getPrototypeOf(LoginPage)).apply(this, arguments));\n }\n\n _createClass(LoginPage, [{\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(newProps) {\n // re-route the user to the homepage if the user is logged in\n if (newProps.loggedInChannelName !== this.props.loggedInChannelName) {\n this.props.history.push('/');\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: 'Login', pageUri: 'login' }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'p',\n null,\n 'Channels allow you to publish and group content under an identity. You can create a channel for yourself, or share one with like-minded friends. You can create 1 channel, or 100, so whether you\\'re ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: '/@catalonia2017:43dcf47163caa21d8404d9fe9b30f78ef3e146a8' },\n 'documenting important events'\n ),\n ', or making a public repository for ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: '/@catGifs' },\n 'cat gifs'\n ),\n ' (password: \\'1234\\'), try creating a channel for it!'\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'h3',\n { className: 'h3--no-bottom' },\n 'Log in to an existing channel:'\n ),\n _react2.default.createElement(_ChannelLoginForm2.default, null),\n _react2.default.createElement(\n 'h3',\n { className: 'h3--no-bottom' },\n 'Create a brand new channel:'\n ),\n _react2.default.createElement(_ChannelCreateForm2.default, null)\n )\n )\n )\n );\n }\n }]);\n\n return LoginPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = (0, _reactRouterDom.withRouter)(LoginPage);\n\n/***/ }),\n/* 123 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _show = __webpack_require__(8);\n\nvar _view = __webpack_require__(124);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n return {\n error: show.request.error,\n requestType: show.request.type\n };\n};\n\nvar mapDispatchToProps = {\n onHandleShowPageUri: _show.onHandleShowPageUri\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 124 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ErrorPage = __webpack_require__(21);\n\nvar _ErrorPage2 = _interopRequireDefault(_ErrorPage);\n\nvar _ShowAssetLite = __webpack_require__(125);\n\nvar _ShowAssetLite2 = _interopRequireDefault(_ShowAssetLite);\n\nvar _ShowAssetDetails = __webpack_require__(128);\n\nvar _ShowAssetDetails2 = _interopRequireDefault(_ShowAssetDetails);\n\nvar _ShowChannel = __webpack_require__(134);\n\nvar _ShowChannel2 = _interopRequireDefault(_ShowChannel);\n\nvar _show_request_types = __webpack_require__(41);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowPage = function (_React$Component) {\n _inherits(ShowPage, _React$Component);\n\n function ShowPage() {\n _classCallCheck(this, ShowPage);\n\n return _possibleConstructorReturn(this, (ShowPage.__proto__ || Object.getPrototypeOf(ShowPage)).apply(this, arguments));\n }\n\n _createClass(ShowPage, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.props.onHandleShowPageUri(this.props.match.params);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n if (nextProps.match.params !== this.props.match.params) {\n this.props.onHandleShowPageUri(nextProps.match.params);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n error = _props.error,\n requestType = _props.requestType;\n\n if (error) {\n return _react2.default.createElement(_ErrorPage2.default, { error: error });\n }\n switch (requestType) {\n case _show_request_types.CHANNEL:\n return _react2.default.createElement(_ShowChannel2.default, null);\n case _show_request_types.ASSET_LITE:\n return _react2.default.createElement(_ShowAssetLite2.default, null);\n case _show_request_types.ASSET_DETAILS:\n return _react2.default.createElement(_ShowAssetDetails2.default, null);\n default:\n return _react2.default.createElement(\n 'p',\n null,\n 'loading...'\n );\n }\n }\n }]);\n\n return ShowPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowPage;\n\n/***/ }),\n/* 125 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(126);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select request info\n var requestId = show.request.id;\n // select asset info\n var asset = void 0;\n var request = show.requestList[requestId] || null;\n var assetList = show.assetList;\n if (request && assetList) {\n var assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset: asset\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 126 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _AssetDisplay = __webpack_require__(42);\n\nvar _AssetDisplay2 = _interopRequireDefault(_AssetDisplay);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowLite = function (_React$Component) {\n _inherits(ShowLite, _React$Component);\n\n function ShowLite() {\n _classCallCheck(this, ShowLite);\n\n return _possibleConstructorReturn(this, (ShowLite.__proto__ || Object.getPrototypeOf(ShowLite)).apply(this, arguments));\n }\n\n _createClass(ShowLite, [{\n key: 'render',\n value: function render() {\n var asset = this.props.asset;\n\n if (asset) {\n var _asset$claimData = asset.claimData,\n name = _asset$claimData.name,\n claimId = _asset$claimData.claimId;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column flex-container--center-center show-lite-container' },\n _react2.default.createElement(_SEO2.default, { pageTitle: name, asset: asset }),\n _react2.default.createElement(_AssetDisplay2.default, null),\n _react2.default.createElement(\n _reactRouterDom.Link,\n { id: 'asset-boilerpate', className: 'link--primary fine-print', to: '/' + claimId + '/' + name },\n 'hosted via Spee.ch'\n )\n );\n }\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded flex-container--column flex-container--center-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'loading asset data...'\n )\n );\n }\n }]);\n\n return ShowLite;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowLite;\n\n/***/ }),\n/* 127 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ProgressBar = __webpack_require__(20);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _asset_display_states = __webpack_require__(35);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AssetDisplay = function (_React$Component) {\n _inherits(AssetDisplay, _React$Component);\n\n function AssetDisplay() {\n _classCallCheck(this, AssetDisplay);\n\n return _possibleConstructorReturn(this, (AssetDisplay.__proto__ || Object.getPrototypeOf(AssetDisplay)).apply(this, arguments));\n }\n\n _createClass(AssetDisplay, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props$asset$claimDat = this.props.asset.claimData,\n name = _props$asset$claimDat.name,\n claimId = _props$asset$claimDat.claimId;\n\n this.props.onFileRequest(name, claimId);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n status = _props.status,\n error = _props.error,\n _props$asset$claimDat2 = _props.asset.claimData,\n name = _props$asset$claimDat2.name,\n claimId = _props$asset$claimDat2.claimId,\n contentType = _props$asset$claimDat2.contentType,\n fileExt = _props$asset$claimDat2.fileExt,\n thumbnail = _props$asset$claimDat2.thumbnail;\n\n return _react2.default.createElement(\n 'div',\n { id: 'asset-display-component' },\n status === _asset_display_states.LOCAL_CHECK && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n null,\n 'Checking to see if Spee.ch has your asset locally...'\n )\n ),\n status === _asset_display_states.UNAVAILABLE && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n null,\n 'Sit tight, we\\'re searching the LBRY blockchain for your asset!'\n ),\n _react2.default.createElement(_ProgressBar2.default, { size: 12 }),\n _react2.default.createElement(\n 'p',\n null,\n 'Curious what magic is happening here? ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' },\n 'Learn more.'\n )\n )\n ),\n status === _asset_display_states.ERROR && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n null,\n 'Unfortunately, we couldn\\'t download your asset from LBRY. You can help us out by sharing the below error message in the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' },\n 'LBRY discord'\n ),\n '.'\n ),\n _react2.default.createElement(\n 'i',\n null,\n _react2.default.createElement(\n 'p',\n { id: 'error-message' },\n error\n )\n )\n ),\n status === _asset_display_states.AVAILABLE && function () {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n return _react2.default.createElement('img', {\n className: 'asset',\n src: '/' + claimId + '/' + name + '.' + fileExt,\n alt: name });\n case 'image/gif':\n return _react2.default.createElement('img', {\n className: 'asset',\n src: '/' + claimId + '/' + name + '.' + fileExt,\n alt: name\n });\n case 'video/mp4':\n return _react2.default.createElement(\n 'video',\n { className: 'asset video', controls: true, poster: thumbnail },\n _react2.default.createElement('source', {\n src: '/' + claimId + '/' + name + '.' + fileExt\n }),\n _react2.default.createElement(\n 'p',\n null,\n 'Your browser does not support the ',\n _react2.default.createElement(\n 'code',\n null,\n 'video'\n ),\n ' element.'\n )\n );\n default:\n return _react2.default.createElement(\n 'p',\n null,\n 'Unsupported file type'\n );\n }\n }()\n );\n }\n }]);\n\n return AssetDisplay;\n}(_react2.default.Component);\n\n;\n\nexports.default = AssetDisplay;\n\n/***/ }),\n/* 128 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(129);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select request info\n var requestId = show.request.id;\n // select asset info\n var asset = void 0;\n var request = show.requestList[requestId] || null;\n var assetList = show.assetList;\n if (request && assetList) {\n var assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset: asset\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 129 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _ErrorPage = __webpack_require__(21);\n\nvar _ErrorPage2 = _interopRequireDefault(_ErrorPage);\n\nvar _AssetTitle = __webpack_require__(130);\n\nvar _AssetTitle2 = _interopRequireDefault(_AssetTitle);\n\nvar _AssetDisplay = __webpack_require__(42);\n\nvar _AssetDisplay2 = _interopRequireDefault(_AssetDisplay);\n\nvar _AssetInfo = __webpack_require__(132);\n\nvar _AssetInfo2 = _interopRequireDefault(_AssetInfo);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowAssetDetails = function (_React$Component) {\n _inherits(ShowAssetDetails, _React$Component);\n\n function ShowAssetDetails() {\n _classCallCheck(this, ShowAssetDetails);\n\n return _possibleConstructorReturn(this, (ShowAssetDetails.__proto__ || Object.getPrototypeOf(ShowAssetDetails)).apply(this, arguments));\n }\n\n _createClass(ShowAssetDetails, [{\n key: 'render',\n value: function render() {\n var asset = this.props.asset;\n\n if (asset) {\n var name = asset.claimData.name;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: name + ' - details', asset: asset }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(_AssetTitle2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded show-details-container' },\n _react2.default.createElement(_AssetDisplay2.default, null)\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(_AssetInfo2.default, null)\n )\n )\n )\n );\n };\n return _react2.default.createElement(_ErrorPage2.default, { error: 'loading asset data...' });\n }\n }]);\n\n return ShowAssetDetails;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowAssetDetails;\n\n/***/ }),\n/* 130 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(131);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _show = __webpack_require__(13);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n var _selectAsset = (0, _show.selectAsset)(show),\n title = _selectAsset.claimData.title;\n\n return {\n title: title\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 131 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AssetTitle = function AssetTitle(_ref) {\n var title = _ref.title;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'span',\n { className: 'text--large' },\n title\n )\n );\n};\n\nexports.default = AssetTitle;\n\n/***/ }),\n/* 132 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(133);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _show = __webpack_require__(13);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select asset\n var asset = (0, _show.selectAsset)(show);\n // return props\n return {\n asset: asset\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 133 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AssetInfo = function (_React$Component) {\n _inherits(AssetInfo, _React$Component);\n\n function AssetInfo(props) {\n _classCallCheck(this, AssetInfo);\n\n var _this = _possibleConstructorReturn(this, (AssetInfo.__proto__ || Object.getPrototypeOf(AssetInfo)).call(this, props));\n\n _this.copyToClipboard = _this.copyToClipboard.bind(_this);\n return _this;\n }\n\n _createClass(AssetInfo, [{\n key: 'copyToClipboard',\n value: function copyToClipboard(event) {\n var elementToCopy = event.target.dataset.elementtocopy;\n var element = document.getElementById(elementToCopy);\n element.select();\n try {\n document.execCommand('copy');\n } catch (err) {\n this.setState({ error: 'Oops, unable to copy' });\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props$asset = this.props.asset,\n shortId = _props$asset.shortId,\n _props$asset$claimDat = _props$asset.claimData,\n channelName = _props$asset$claimDat.channelName,\n certificateId = _props$asset$claimDat.certificateId,\n description = _props$asset$claimDat.description,\n name = _props$asset$claimDat.name,\n claimId = _props$asset$claimDat.claimId,\n fileExt = _props$asset$claimDat.fileExt,\n contentType = _props$asset$claimDat.contentType,\n thumbnail = _props$asset$claimDat.thumbnail,\n host = _props$asset$claimDat.host;\n\n return _react2.default.createElement(\n 'div',\n null,\n channelName && _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Channel:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { to: '/' + channelName + ':' + certificateId },\n channelName\n )\n )\n )\n ),\n description && _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n description\n )\n ),\n _react2.default.createElement(\n 'div',\n { id: 'show-share-buttons' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Share:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'div',\n {\n className: 'row row--short row--wide flex-container--row flex-container--space-between-bottom flex-container--wrap' },\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://twitter.com/intent/tweet?text=' + host + '/' + shortId + '/' + name },\n 'twitter'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://www.facebook.com/sharer/sharer.php?u=' + host + '/' + shortId + '/' + name },\n 'facebook'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'http://tumblr.com/widgets/share/tool?canonicalUrl=' + host + '/' + shortId + '/' + name },\n 'tumblr'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://www.reddit.com/submit?url=' + host + '/' + shortId + '/' + name + '&title=' + name },\n 'reddit'\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'div',\n { id: 'show-short-link' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Link:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--short row--wide' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement(\n 'div',\n { className: 'input-error', id: 'input-error-copy-short-link', hidden: 'true' },\n 'error here'\n ),\n _react2.default.createElement('input', { type: 'text', id: 'short-link', className: 'input-disabled input-text--full-width', readOnly: true,\n spellCheck: 'false',\n value: host + '/' + shortId + '/' + name + '.' + fileExt,\n onClick: this.select })\n ),\n _react2.default.createElement('div', { className: 'column column--1' }),\n _react2.default.createElement(\n 'div',\n { className: 'column column--2' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary button--wide', 'data-elementtocopy': 'short-link',\n onClick: this.copyToClipboard },\n 'copy'\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { id: 'show-embed-code' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Embed:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--short row--wide' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement(\n 'div',\n { className: 'input-error', id: 'input-error-copy-embed-text', hidden: 'true' },\n 'error here'\n ),\n contentType === 'video/mp4' ? _react2.default.createElement('input', { type: 'text', id: 'embed-text', className: 'input-disabled input-text--full-width', readOnly: true,\n onClick: this.select, spellCheck: 'false',\n value: '' }) : _react2.default.createElement('input', { type: 'text', id: 'embed-text', className: 'input-disabled input-text--full-width', readOnly: true,\n onClick: this.select, spellCheck: 'false',\n value: ''\n })\n ),\n _react2.default.createElement('div', { className: 'column column--1' }),\n _react2.default.createElement(\n 'div',\n { className: 'column column--2' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary button--wide', 'data-elementtocopy': 'embed-text',\n onClick: this.copyToClipboard },\n 'copy'\n )\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'flex-container--row flex-container--space-between-bottom' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { className: 'link--primary', to: '/' + shortId + '/' + name + '.' + fileExt },\n _react2.default.createElement(\n 'span',\n {\n className: 'text' },\n 'Direct Link'\n )\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: host + '/' + claimId + '/' + name + '.' + fileExt, download: name },\n 'Download'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://lbry.io/dmca' },\n 'Report'\n )\n )\n );\n }\n }]);\n\n return AssetInfo;\n}(_react2.default.Component);\n\n;\n\nexports.default = AssetInfo;\n\n/***/ }),\n/* 134 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(135);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select request info\n var requestId = show.request.id;\n // select request\n var previousRequest = show.requestList[requestId] || null;\n // select channel\n var channel = void 0;\n if (previousRequest) {\n var channelKey = previousRequest.key;\n channel = show.channelList[channelKey] || null;\n }\n return {\n channel: channel\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 135 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _ErrorPage = __webpack_require__(21);\n\nvar _ErrorPage2 = _interopRequireDefault(_ErrorPage);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _ChannelClaimsDisplay = __webpack_require__(136);\n\nvar _ChannelClaimsDisplay2 = _interopRequireDefault(_ChannelClaimsDisplay);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowChannel = function (_React$Component) {\n _inherits(ShowChannel, _React$Component);\n\n function ShowChannel() {\n _classCallCheck(this, ShowChannel);\n\n return _possibleConstructorReturn(this, (ShowChannel.__proto__ || Object.getPrototypeOf(ShowChannel)).apply(this, arguments));\n }\n\n _createClass(ShowChannel, [{\n key: 'render',\n value: function render() {\n var channel = this.props.channel;\n\n if (channel) {\n var name = channel.name,\n longId = channel.longId,\n shortId = channel.shortId;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: name, channel: channel }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(\n 'h2',\n null,\n 'channel name: ',\n name\n ),\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'full channel id: ',\n longId\n ),\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'short channel id: ',\n shortId\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(_ChannelClaimsDisplay2.default, null)\n )\n )\n );\n };\n return _react2.default.createElement(_ErrorPage2.default, { error: 'loading channel data...' });\n }\n }]);\n\n return ShowChannel;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowChannel;\n\n/***/ }),\n/* 136 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _show = __webpack_require__(8);\n\nvar _view = __webpack_require__(137);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select channel key\n var request = show.requestList[show.request.id];\n var channelKey = request.key;\n // select channel claims\n var channel = show.channelList[channelKey] || null;\n // return props\n return {\n channelKey: channelKey,\n channel: channel\n };\n};\n\nvar mapDispatchToProps = {\n onUpdateChannelClaims: _show.onUpdateChannelClaims\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 137 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _AssetPreview = __webpack_require__(138);\n\nvar _AssetPreview2 = _interopRequireDefault(_AssetPreview);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelClaimsDisplay = function (_React$Component) {\n _inherits(ChannelClaimsDisplay, _React$Component);\n\n function ChannelClaimsDisplay(props) {\n _classCallCheck(this, ChannelClaimsDisplay);\n\n var _this = _possibleConstructorReturn(this, (ChannelClaimsDisplay.__proto__ || Object.getPrototypeOf(ChannelClaimsDisplay)).call(this, props));\n\n _this.showNextResultsPage = _this.showNextResultsPage.bind(_this);\n _this.showPreviousResultsPage = _this.showPreviousResultsPage.bind(_this);\n return _this;\n }\n\n _createClass(ChannelClaimsDisplay, [{\n key: 'showPreviousResultsPage',\n value: function showPreviousResultsPage() {\n var currentPage = this.props.channel.claimsData.currentPage;\n\n var previousPage = parseInt(currentPage) - 1;\n this.showNewPage(previousPage);\n }\n }, {\n key: 'showNextResultsPage',\n value: function showNextResultsPage() {\n var currentPage = this.props.channel.claimsData.currentPage;\n\n var nextPage = parseInt(currentPage) + 1;\n this.showNewPage(nextPage);\n }\n }, {\n key: 'showNewPage',\n value: function showNewPage(page) {\n var _props = this.props,\n channelKey = _props.channelKey,\n _props$channel = _props.channel,\n name = _props$channel.name,\n longId = _props$channel.longId;\n\n this.props.onUpdateChannelClaims(channelKey, name, longId, page);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props$channel$claims = this.props.channel.claimsData,\n claims = _props$channel$claims.claims,\n currentPage = _props$channel$claims.currentPage,\n totalPages = _props$channel$claims.totalPages;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall' },\n claims.length > 0 ? _react2.default.createElement(\n 'div',\n null,\n claims.map(function (claim, index) {\n return _react2.default.createElement(_AssetPreview2.default, {\n claimData: claim,\n key: claim.name + '-' + index\n });\n }),\n _react2.default.createElement(\n 'div',\n null,\n currentPage > 1 && _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: this.showPreviousResultsPage },\n 'Previous Page'\n ),\n currentPage < totalPages && _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: this.showNextResultsPage },\n 'Next Page'\n )\n )\n ) : _react2.default.createElement(\n 'p',\n null,\n 'There are no claims in this channel'\n )\n );\n }\n }]);\n\n return ChannelClaimsDisplay;\n}(_react2.default.Component);\n\n;\n\nexports.default = ChannelClaimsDisplay;\n\n/***/ }),\n/* 138 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(139);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var defaultThumbnail = _ref.site.defaults.defaultThumbnail;\n\n return {\n defaultThumbnail: defaultThumbnail\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 139 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AssetPreview = function AssetPreview(_ref) {\n var defaultThumbnail = _ref.defaultThumbnail,\n _ref$claimData = _ref.claimData,\n name = _ref$claimData.name,\n claimId = _ref$claimData.claimId,\n fileExt = _ref$claimData.fileExt,\n contentType = _ref$claimData.contentType,\n thumbnail = _ref$claimData.thumbnail;\n\n var directSourceLink = claimId + '/' + name + '.' + fileExt;\n var showUrlLink = '/' + claimId + '/' + name;\n return _react2.default.createElement(\n 'div',\n { className: 'asset-holder' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { to: showUrlLink },\n function () {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n case 'image/gif':\n return _react2.default.createElement('img', {\n className: 'asset-preview',\n src: directSourceLink,\n alt: name\n });\n case 'video/mp4':\n return _react2.default.createElement('img', {\n className: 'asset-preview video',\n src: thumbnail || defaultThumbnail,\n alt: name\n });\n default:\n return _react2.default.createElement(\n 'p',\n null,\n 'unsupported file type'\n );\n }\n }()\n )\n );\n};\n\nexports.default = AssetPreview;\n\n/***/ }),\n/* 140 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(141);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var _ref$site = _ref.site,\n host = _ref$site.host,\n title = _ref$site.title;\n\n return {\n host: host,\n title: title\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 141 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _reactHelmet = __webpack_require__(14);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar FourOhForPage = function (_React$Component) {\n _inherits(FourOhForPage, _React$Component);\n\n function FourOhForPage() {\n _classCallCheck(this, FourOhForPage);\n\n return _possibleConstructorReturn(this, (FourOhForPage.__proto__ || Object.getPrototypeOf(FourOhForPage)).apply(this, arguments));\n }\n\n _createClass(FourOhForPage, [{\n key: 'render',\n value: function render() {\n var _props = this.props,\n title = _props.title,\n host = _props.host;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n _reactHelmet2.default,\n null,\n _react2.default.createElement(\n 'title',\n null,\n title,\n ' - 404'\n ),\n _react2.default.createElement('link', { rel: 'canonical', href: host + '/404' })\n ),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'h2',\n null,\n '404'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'That page does not exist'\n )\n )\n );\n }\n }]);\n\n return FourOhForPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = FourOhForPage;\n\n/***/ }),\n/* 142 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _require = __webpack_require__(17),\n sendGAServeEvent = _require.sendGAServeEvent;\n\nvar _require2 = __webpack_require__(143),\n determineResponseType = _require2.determineResponseType,\n flipClaimNameAndIdForBackwardsCompatibility = _require2.flipClaimNameAndIdForBackwardsCompatibility,\n logRequestData = _require2.logRequestData,\n getClaimIdAndServeAsset = _require2.getClaimIdAndServeAsset;\n\nvar lbryUri = __webpack_require__(144);\nvar handleShowRender = __webpack_require__(145);\nvar SERVE = 'SERVE';\n\nmodule.exports = function (app) {\n // route to serve a specific asset using the channel or claim id\n app.get('/:identifier/:claim', function (req, res) {\n var headers = req.headers,\n ip = req.ip,\n originalUrl = req.originalUrl,\n params = req.params;\n // decide if this is a show request\n\n var hasFileExtension = void 0;\n try {\n var _lbryUri$parseModifie = lbryUri.parseModifier(params.claim);\n\n hasFileExtension = _lbryUri$parseModifie.hasFileExtension;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n var responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n var claimName = void 0;\n try {\n var _lbryUri$parseClaim = lbryUri.parseClaim(params.claim);\n\n claimName = _lbryUri$parseClaim.claimName;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n // parse the identifier\n var isChannel = void 0,\n channelName = void 0,\n channelClaimId = void 0,\n claimId = void 0;\n try {\n var _lbryUri$parseIdentif = lbryUri.parseIdentifier(params.identifier);\n\n isChannel = _lbryUri$parseIdentif.isChannel;\n channelName = _lbryUri$parseIdentif.channelName;\n channelClaimId = _lbryUri$parseIdentif.channelClaimId;\n claimId = _lbryUri$parseIdentif.claimId;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n if (!isChannel) {\n var _flipClaimNameAndIdFo = flipClaimNameAndIdForBackwardsCompatibility(claimId, claimName);\n\n var _flipClaimNameAndIdFo2 = _slicedToArray(_flipClaimNameAndIdFo, 2);\n\n claimId = _flipClaimNameAndIdFo2[0];\n claimName = _flipClaimNameAndIdFo2[1];\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, channelName, claimId);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res);\n });\n // route to serve the winning asset at a claim or a channel page\n app.get('/:claim', function (req, res) {\n var headers = req.headers,\n ip = req.ip,\n originalUrl = req.originalUrl,\n params = req.params;\n // decide if this is a show request\n\n var hasFileExtension = void 0;\n try {\n var _lbryUri$parseModifie2 = lbryUri.parseModifier(params.claim);\n\n hasFileExtension = _lbryUri$parseModifie2.hasFileExtension;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n var responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n var claimName = void 0;\n try {\n var _lbryUri$parseClaim2 = lbryUri.parseClaim(params.claim);\n\n claimName = _lbryUri$parseClaim2.claimName;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, null, null);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(null, null, claimName, null, originalUrl, ip, res);\n });\n};\n\n/***/ }),\n/* 143 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(28),\n getClaimId = _require.getClaimId,\n getLocalFileRecord = _require.getLocalFileRecord;\n\nvar _require2 = __webpack_require__(27),\n handleErrorResponse = _require2.handleErrorResponse;\n\nvar SERVE = 'SERVE';\nvar SHOW = 'SHOW';\nvar NO_FILE = 'NO_FILE';\nvar NO_CHANNEL = 'NO_CHANNEL';\nvar NO_CLAIM = 'NO_CLAIM';\n\nfunction clientAcceptsHtml(_ref) {\n var accept = _ref.accept;\n\n return accept && accept.match(/text\\/html/);\n};\n\nfunction requestIsFromBrowser(headers) {\n return headers['user-agent'] && headers['user-agent'].match(/Mozilla/);\n};\n\nfunction clientWantsAsset(_ref2) {\n var accept = _ref2.accept,\n range = _ref2.range;\n\n var imageIsWanted = accept && accept.match(/image\\/.*/) && !accept.match(/text\\/html/) && !accept.match(/text\\/\\*/);\n var videoIsWanted = accept && range;\n return imageIsWanted || videoIsWanted;\n};\n\nfunction isValidClaimId(claimId) {\n return claimId.length === 40 && !/[^A-Za-z0-9]/g.test(claimId);\n};\n\nfunction isValidShortId(claimId) {\n return claimId.length === 1; // it should really evaluate the short url itself\n};\n\nfunction isValidShortIdOrClaimId(input) {\n return isValidClaimId(input) || isValidShortId(input);\n};\n\nfunction serveAssetToClient(claimId, name, res) {\n return getLocalFileRecord(claimId, name).then(function (fileRecord) {\n // check that a local record was found\n if (fileRecord === NO_FILE) {\n return res.status(307).redirect('/api/claim/get/' + name + '/' + claimId);\n }\n // serve the file\n var filePath = fileRecord.filePath,\n fileType = fileRecord.fileType;\n\n logger.verbose('serving file: ' + filePath);\n var sendFileOptions = {\n headers: {\n 'X-Content-Type-Options': 'nosniff',\n 'Content-Type': fileType || 'image/jpeg'\n }\n };\n res.status(200).sendFile(filePath, sendFileOptions);\n }).catch(function (error) {\n throw error;\n });\n};\n\nmodule.exports = {\n getClaimIdAndServeAsset: function getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res) {\n // get the claim Id and then serve the asset\n getClaimId(channelName, channelClaimId, claimName, claimId).then(function (fullClaimId) {\n if (fullClaimId === NO_CLAIM) {\n return res.status(404).json({ success: false, message: 'no claim id could be found' });\n } else if (fullClaimId === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'no channel id could be found' });\n }\n serveAssetToClient(fullClaimId, claimName, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'success');\n }).catch(function (error) {\n handleErrorResponse(originalUrl, ip, error, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'fail');\n });\n },\n determineResponseType: function determineResponseType(hasFileExtension, headers) {\n var responseType = void 0;\n if (hasFileExtension) {\n responseType = SERVE; // assume a serve request if file extension is present\n if (clientAcceptsHtml(headers)) {\n // if the request comes from a browser, change it to a show request\n responseType = SHOW;\n }\n } else {\n responseType = SHOW;\n if (clientWantsAsset(headers) && requestIsFromBrowser(headers)) {\n // this is in case someone embeds a show url\n logger.debug('Show request came from browser but wants an image/video. Changing response to serve...');\n responseType = SERVE;\n }\n }\n return responseType;\n },\n flipClaimNameAndIdForBackwardsCompatibility: function flipClaimNameAndIdForBackwardsCompatibility(identifier, name) {\n // this is a patch for backwards compatability with '/name/claim_id' url format\n if (isValidShortIdOrClaimId(name) && !isValidShortIdOrClaimId(identifier)) {\n var tempName = name;\n name = identifier;\n identifier = tempName;\n }\n return [identifier, name];\n },\n logRequestData: function logRequestData(responseType, claimName, channelName, claimId) {\n logger.debug('responseType ===', responseType);\n logger.debug('claim name === ', claimName);\n logger.debug('channel name ===', channelName);\n logger.debug('claim id ===', claimId);\n }\n};\n\n/***/ }),\n/* 144 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n REGEXP_INVALID_CLAIM: /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS: /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR: '@',\n parseIdentifier: function parseIdentifier(identifier) {\n logger.debug('parsing identifier:', identifier);\n var componentsRegex = new RegExp('([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec = componentsRegex.exec(identifier).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec2 = _slicedToArray(_componentsRegex$exec, 4),\n proto = _componentsRegex$exec2[0],\n value = _componentsRegex$exec2[1],\n modifierSeperator = _componentsRegex$exec2[2],\n modifier = _componentsRegex$exec2[3];\n\n logger.debug(proto + ', ' + value + ', ' + modifierSeperator + ', ' + modifier);\n\n // Validate and process name\n if (!value) {\n throw new Error('Check your url. No channel name provided before \"' + modifierSeperator + '\"');\n }\n var isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n var channelName = isChannel ? value : null;\n var claimId = void 0;\n if (isChannel) {\n if (!channelName) {\n throw new Error('No channel name after @.');\n }\n var nameBadChars = channelName.match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error('Invalid characters in channel name: ' + nameBadChars.join(', ') + '.');\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n var channelClaimId = void 0;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error('No modifier provided after separator \"' + modifierSeperator + '\"');\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error('The \"' + modifierSeperator + '\" modifier is not currently supported');\n }\n }\n return {\n isChannel: isChannel,\n channelName: channelName,\n channelClaimId: channelClaimId,\n claimId: claimId\n };\n },\n parseClaim: function parseClaim(claim) {\n logger.debug('parsing name:', claim);\n var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec3 = componentsRegex.exec(claim).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec4 = _slicedToArray(_componentsRegex$exec3, 4),\n proto = _componentsRegex$exec4[0],\n claimName = _componentsRegex$exec4[1],\n modifierSeperator = _componentsRegex$exec4[2],\n modifier = _componentsRegex$exec4[3];\n\n logger.debug(proto + ', ' + claimName + ', ' + modifierSeperator + ', ' + modifier);\n\n // Validate and process name\n if (!claimName) {\n throw new Error('No claim name provided before .');\n }\n var nameBadChars = claimName.match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error('Invalid characters in claim name: ' + nameBadChars.join(', ') + '.');\n }\n // Validate and process modifier\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error('No file extension provided after separator ' + modifierSeperator + '.');\n }\n if (modifierSeperator !== '.') {\n throw new Error('The ' + modifierSeperator + ' modifier is not supported in the claim name');\n }\n }\n // return results\n return {\n claimName: claimName\n };\n },\n parseModifier: function parseModifier(claim) {\n logger.debug('parsing modifier:', claim);\n var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec5 = componentsRegex.exec(claim).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec6 = _slicedToArray(_componentsRegex$exec5, 4),\n proto = _componentsRegex$exec6[0],\n claimName = _componentsRegex$exec6[1],\n modifierSeperator = _componentsRegex$exec6[2],\n modifier = _componentsRegex$exec6[3];\n\n logger.debug(proto + ', ' + claimName + ', ' + modifierSeperator + ', ' + modifier);\n // Validate and process modifier\n var hasFileExtension = false;\n if (modifierSeperator) {\n hasFileExtension = true;\n }\n return {\n hasFileExtension: hasFileExtension\n };\n }\n};\n\n/***/ }),\n/* 145 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _server = __webpack_require__(30);\n\nvar _redux = __webpack_require__(18);\n\nvar _index = __webpack_require__(31);\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _index3 = __webpack_require__(36);\n\nvar _index4 = _interopRequireDefault(_index3);\n\nvar _app = __webpack_require__(37);\n\nvar _app2 = _interopRequireDefault(_app);\n\nvar _renderFullPage = __webpack_require__(43);\n\nvar _renderFullPage2 = _interopRequireDefault(_renderFullPage);\n\nvar _reduxSaga = __webpack_require__(146);\n\nvar _reduxSaga2 = _interopRequireDefault(_reduxSaga);\n\nvar _effects = __webpack_require__(15);\n\nvar _show_uri = __webpack_require__(147);\n\nvar _show = __webpack_require__(8);\n\nvar _reactHelmet = __webpack_require__(14);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar returnSagaWithParams = function returnSagaWithParams(saga, params) {\n return (/*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return (0, _effects.call)(saga, params);\n\n case 2:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n })\n );\n};\n\nmodule.exports = function (req, res) {\n var context = {};\n\n // create and apply middleware\n var sagaMiddleware = (0, _reduxSaga2.default)();\n var middleware = (0, _redux.applyMiddleware)(sagaMiddleware);\n\n // create a new Redux store instance\n var store = (0, _redux.createStore)(_index2.default, middleware);\n\n // create saga\n var action = (0, _show.onHandleShowPageUri)(req.params);\n var saga = returnSagaWithParams(_show_uri.handleShowPageUri, action);\n\n // run the saga middleware\n sagaMiddleware.run(saga).done.then(function () {\n // render component to a string\n var html = (0, _server.renderToString)(_react2.default.createElement(\n _reactRedux.Provider,\n { store: store },\n _react2.default.createElement(\n _reactRouterDom.StaticRouter,\n { location: req.url, context: context },\n _react2.default.createElement(\n _index4.default,\n null,\n _react2.default.createElement(_app2.default, null)\n )\n )\n ));\n\n // get head tags from helmet\n var helmet = _reactHelmet2.default.renderStatic();\n\n // check for a redirect\n if (context.url) {\n return res.redirect(301, context.url);\n }\n\n // get the initial state from our Redux store\n var preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send((0, _renderFullPage2.default)(helmet, html, preloadedState));\n });\n};\n\n/***/ }),\n/* 146 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"redux-saga\");\n\n/***/ }),\n/* 147 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.handleShowPageUri = handleShowPageUri;\nexports.watchHandleShowPageUri = watchHandleShowPageUri;\n\nvar _effects = __webpack_require__(15);\n\nvar _show_action_types = __webpack_require__(12);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(8);\n\nvar _show_asset = __webpack_require__(148);\n\nvar _show_channel = __webpack_require__(150);\n\nvar _lbryUri = __webpack_require__(152);\n\nvar _lbryUri2 = _interopRequireDefault(_lbryUri);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateIdentifierAndClaim),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateClaimOnly),\n _marked3 = /*#__PURE__*/regeneratorRuntime.mark(handleShowPageUri),\n _marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchHandleShowPageUri);\n\nfunction parseAndUpdateIdentifierAndClaim(modifier, claim) {\n var isChannel, channelName, channelClaimId, claimId, claimName, extension, _lbryUri$parseIdentif, _lbryUri$parseClaim;\n\n return regeneratorRuntime.wrap(function parseAndUpdateIdentifierAndClaim$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n // this is a request for an asset\n // claim will be an asset claim\n // the identifier could be a channel or a claim id\n isChannel = void 0, channelName = void 0, channelClaimId = void 0, claimId = void 0, claimName = void 0, extension = void 0;\n _context.prev = 1;\n _lbryUri$parseIdentif = _lbryUri2.default.parseIdentifier(modifier);\n isChannel = _lbryUri$parseIdentif.isChannel;\n channelName = _lbryUri$parseIdentif.channelName;\n channelClaimId = _lbryUri$parseIdentif.channelClaimId;\n claimId = _lbryUri$parseIdentif.claimId;\n _lbryUri$parseClaim = _lbryUri2.default.parseClaim(claim);\n claimName = _lbryUri$parseClaim.claimName;\n extension = _lbryUri$parseClaim.extension;\n _context.next = 17;\n break;\n\n case 12:\n _context.prev = 12;\n _context.t0 = _context['catch'](1);\n _context.next = 16;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));\n\n case 16:\n return _context.abrupt('return', _context.sent);\n\n case 17:\n if (!isChannel) {\n _context.next = 21;\n break;\n }\n\n _context.next = 20;\n return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, channelName, channelClaimId, extension));\n\n case 20:\n return _context.abrupt('return', _context.sent);\n\n case 21:\n ;\n _context.next = 24;\n return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, claimId, null, null, extension));\n\n case 24:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[1, 12]]);\n}\nfunction parseAndUpdateClaimOnly(claim) {\n var isChannel, channelName, channelClaimId, _lbryUri$parseIdentif2, claimName, extension, _lbryUri$parseClaim2;\n\n return regeneratorRuntime.wrap(function parseAndUpdateClaimOnly$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // this could be a request for an asset or a channel page\n // claim could be an asset claim or a channel claim\n isChannel = void 0, channelName = void 0, channelClaimId = void 0;\n _context2.prev = 1;\n _lbryUri$parseIdentif2 = _lbryUri2.default.parseIdentifier(claim);\n isChannel = _lbryUri$parseIdentif2.isChannel;\n channelName = _lbryUri$parseIdentif2.channelName;\n channelClaimId = _lbryUri$parseIdentif2.channelClaimId;\n _context2.next = 13;\n break;\n\n case 8:\n _context2.prev = 8;\n _context2.t0 = _context2['catch'](1);\n _context2.next = 12;\n return (0, _effects.put)((0, _show.onRequestError)(_context2.t0.message));\n\n case 12:\n return _context2.abrupt('return', _context2.sent);\n\n case 13:\n if (!isChannel) {\n _context2.next = 17;\n break;\n }\n\n _context2.next = 16;\n return (0, _effects.call)(_show_channel.newChannelRequest, (0, _show.onNewChannelRequest)(channelName, channelClaimId));\n\n case 16:\n return _context2.abrupt('return', _context2.sent);\n\n case 17:\n // if not for a channel, parse the claim request\n claimName = void 0, extension = void 0;\n _context2.prev = 18;\n _lbryUri$parseClaim2 = _lbryUri2.default.parseClaim(claim);\n claimName = _lbryUri$parseClaim2.claimName;\n extension = _lbryUri$parseClaim2.extension;\n _context2.next = 29;\n break;\n\n case 24:\n _context2.prev = 24;\n _context2.t1 = _context2['catch'](18);\n _context2.next = 28;\n return (0, _effects.put)((0, _show.onRequestError)(_context2.t1.message));\n\n case 28:\n return _context2.abrupt('return', _context2.sent);\n\n case 29:\n _context2.next = 31;\n return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, null, null, extension));\n\n case 31:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this, [[1, 8], [18, 24]]);\n}\n\nfunction handleShowPageUri(action) {\n var _action$data, identifier, claim;\n\n return regeneratorRuntime.wrap(function handleShowPageUri$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _action$data = action.data, identifier = _action$data.identifier, claim = _action$data.claim;\n\n if (!identifier) {\n _context3.next = 5;\n break;\n }\n\n _context3.next = 4;\n return (0, _effects.call)(parseAndUpdateIdentifierAndClaim, identifier, claim);\n\n case 4:\n return _context3.abrupt('return', _context3.sent);\n\n case 5:\n _context3.next = 7;\n return (0, _effects.call)(parseAndUpdateClaimOnly, claim);\n\n case 7:\n case 'end':\n return _context3.stop();\n }\n }\n }, _marked3, this);\n};\n\nfunction watchHandleShowPageUri() {\n return regeneratorRuntime.wrap(function watchHandleShowPageUri$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _context4.next = 2;\n return (0, _effects.takeLatest)(actions.HANDLE_SHOW_URI, handleShowPageUri);\n\n case 2:\n case 'end':\n return _context4.stop();\n }\n }\n }, _marked4, this);\n};\n\n/***/ }),\n/* 148 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.newAssetRequest = newAssetRequest;\nexports.watchNewAssetRequest = watchNewAssetRequest;\n\nvar _effects = __webpack_require__(15);\n\nvar _show_action_types = __webpack_require__(12);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(8);\n\nvar _assetApi = __webpack_require__(149);\n\nvar _show2 = __webpack_require__(13);\n\nvar _site = __webpack_require__(44);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(newAssetRequest),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewAssetRequest);\n\nfunction newAssetRequest(action) {\n var _action$data, requestType, requestId, name, modifier, state, host, longId, _ref, assetKey, shortId, _ref2, claimData, _ref3;\n\n return regeneratorRuntime.wrap(function newAssetRequest$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, name = _action$data.name, modifier = _action$data.modifier;\n // put an action to update the request in redux\n\n _context.next = 3;\n return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId));\n\n case 3:\n _context.next = 5;\n return (0, _effects.select)(_show2.selectShowState);\n\n case 5:\n state = _context.sent;\n _context.next = 8;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 8:\n host = _context.sent;\n\n if (!state.requestList[requestId]) {\n _context.next = 11;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 11:\n // get long id && add request to request list\n longId = void 0;\n _context.prev = 12;\n _context.next = 15;\n return (0, _effects.call)(_assetApi.getLongClaimId, host, name, modifier);\n\n case 15:\n _ref = _context.sent;\n longId = _ref.data;\n _context.next = 24;\n break;\n\n case 19:\n _context.prev = 19;\n _context.t0 = _context['catch'](12);\n _context.next = 23;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));\n\n case 23:\n return _context.abrupt('return', _context.sent);\n\n case 24:\n assetKey = 'a#' + name + '#' + longId;\n _context.next = 27;\n return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, assetKey));\n\n case 27:\n if (!state.assetList[assetKey]) {\n _context.next = 29;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 29:\n // get short Id\n shortId = void 0;\n _context.prev = 30;\n _context.next = 33;\n return (0, _effects.call)(_assetApi.getShortId, host, name, longId);\n\n case 33:\n _ref2 = _context.sent;\n shortId = _ref2.data;\n _context.next = 42;\n break;\n\n case 37:\n _context.prev = 37;\n _context.t1 = _context['catch'](30);\n _context.next = 41;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message));\n\n case 41:\n return _context.abrupt('return', _context.sent);\n\n case 42:\n // get asset claim data\n claimData = void 0;\n _context.prev = 43;\n _context.next = 46;\n return (0, _effects.call)(_assetApi.getClaimData, host, name, longId);\n\n case 46:\n _ref3 = _context.sent;\n claimData = _ref3.data;\n _context.next = 55;\n break;\n\n case 50:\n _context.prev = 50;\n _context.t2 = _context['catch'](43);\n _context.next = 54;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t2.message));\n\n case 54:\n return _context.abrupt('return', _context.sent);\n\n case 55:\n _context.next = 57;\n return (0, _effects.put)((0, _show.addAssetToAssetList)(assetKey, null, name, longId, shortId, claimData));\n\n case 57:\n _context.next = 59;\n return (0, _effects.put)((0, _show.onRequestError)(null));\n\n case 59:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[12, 19], [30, 37], [43, 50]]);\n};\n\nfunction watchNewAssetRequest() {\n return regeneratorRuntime.wrap(function watchNewAssetRequest$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return (0, _effects.takeLatest)(actions.ASSET_REQUEST_NEW, newAssetRequest);\n\n case 2:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this);\n};\n\n/***/ }),\n/* 149 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getLongClaimId = getLongClaimId;\nexports.getShortId = getShortId;\nexports.getClaimData = getClaimData;\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getLongClaimId(host, name, modifier) {\n var body = {};\n // create request params\n if (modifier) {\n if (modifier.id) {\n body['claimId'] = modifier.id;\n } else {\n body['channelName'] = modifier.channel.name;\n body['channelClaimId'] = modifier.channel.id;\n }\n }\n body['claimName'] = name;\n var params = {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body)\n };\n // create url\n var url = host + '/api/claim/long-id';\n // return the request promise\n return (0, _request2.default)(url, params);\n};\n\nfunction getShortId(host, name, claimId) {\n var url = host + '/api/claim/short-id/' + claimId + '/' + name;\n return (0, _request2.default)(url);\n};\n\nfunction getClaimData(host, name, claimId) {\n var url = host + '/api/claim/data/' + name + '/' + claimId;\n return (0, _request2.default)(url);\n};\n\n/***/ }),\n/* 150 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.newChannelRequest = newChannelRequest;\nexports.watchNewChannelRequest = watchNewChannelRequest;\nexports.watchUpdateChannelClaims = watchUpdateChannelClaims;\n\nvar _effects = __webpack_require__(15);\n\nvar _show_action_types = __webpack_require__(12);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(8);\n\nvar _channelApi = __webpack_require__(151);\n\nvar _show2 = __webpack_require__(13);\n\nvar _site = __webpack_require__(44);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(newChannelRequest),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewChannelRequest),\n _marked3 = /*#__PURE__*/regeneratorRuntime.mark(getNewClaimsAndUpdateChannel),\n _marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchUpdateChannelClaims);\n\nfunction newChannelRequest(action) {\n var _action$data, requestType, requestId, channelName, channelId, state, host, longId, shortId, _ref, _ref$data, channelKey, claimsData, _ref2;\n\n return regeneratorRuntime.wrap(function newChannelRequest$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, channelName = _action$data.channelName, channelId = _action$data.channelId;\n // put an action to update the request in redux\n\n _context.next = 3;\n return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId));\n\n case 3:\n _context.next = 5;\n return (0, _effects.select)(_show2.selectShowState);\n\n case 5:\n state = _context.sent;\n _context.next = 8;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 8:\n host = _context.sent;\n\n if (!state.requestList[requestId]) {\n _context.next = 11;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 11:\n // get channel long id\n longId = void 0, shortId = void 0;\n _context.prev = 12;\n _context.next = 15;\n return (0, _effects.call)(_channelApi.getChannelData, host, channelName, channelId);\n\n case 15:\n _ref = _context.sent;\n _ref$data = _ref.data;\n longId = _ref$data.longChannelClaimId;\n shortId = _ref$data.shortChannelClaimId;\n _context.next = 26;\n break;\n\n case 21:\n _context.prev = 21;\n _context.t0 = _context['catch'](12);\n _context.next = 25;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));\n\n case 25:\n return _context.abrupt('return', _context.sent);\n\n case 26:\n // store the request in the channel requests list\n channelKey = 'c#' + channelName + '#' + longId;\n _context.next = 29;\n return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, channelKey));\n\n case 29:\n if (!state.channelList[channelKey]) {\n _context.next = 31;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 31:\n // get channel claims data\n claimsData = void 0;\n _context.prev = 32;\n _context.next = 35;\n return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, channelName, 1);\n\n case 35:\n _ref2 = _context.sent;\n claimsData = _ref2.data;\n _context.next = 44;\n break;\n\n case 39:\n _context.prev = 39;\n _context.t1 = _context['catch'](32);\n _context.next = 43;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message));\n\n case 43:\n return _context.abrupt('return', _context.sent);\n\n case 44:\n _context.next = 46;\n return (0, _effects.put)((0, _show.addNewChannelToChannelList)(channelKey, channelName, shortId, longId, claimsData));\n\n case 46:\n _context.next = 48;\n return (0, _effects.put)((0, _show.onRequestError)(null));\n\n case 48:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[12, 21], [32, 39]]);\n}\n\nfunction watchNewChannelRequest() {\n return regeneratorRuntime.wrap(function watchNewChannelRequest$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return (0, _effects.takeLatest)(actions.CHANNEL_REQUEST_NEW, newChannelRequest);\n\n case 2:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this);\n};\n\nfunction getNewClaimsAndUpdateChannel(action) {\n var _action$data2, channelKey, name, longId, page, host, claimsData, _ref3;\n\n return regeneratorRuntime.wrap(function getNewClaimsAndUpdateChannel$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _action$data2 = action.data, channelKey = _action$data2.channelKey, name = _action$data2.name, longId = _action$data2.longId, page = _action$data2.page;\n _context3.next = 3;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 3:\n host = _context3.sent;\n claimsData = void 0;\n _context3.prev = 5;\n _context3.next = 8;\n return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, name, page);\n\n case 8:\n _ref3 = _context3.sent;\n claimsData = _ref3.data;\n _context3.next = 17;\n break;\n\n case 12:\n _context3.prev = 12;\n _context3.t0 = _context3['catch'](5);\n _context3.next = 16;\n return (0, _effects.put)((0, _show.onRequestError)(_context3.t0.message));\n\n case 16:\n return _context3.abrupt('return', _context3.sent);\n\n case 17:\n _context3.next = 19;\n return (0, _effects.put)((0, _show.updateChannelClaims)(channelKey, claimsData));\n\n case 19:\n case 'end':\n return _context3.stop();\n }\n }\n }, _marked3, this, [[5, 12]]);\n}\n\nfunction watchUpdateChannelClaims() {\n return regeneratorRuntime.wrap(function watchUpdateChannelClaims$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _context4.next = 2;\n return (0, _effects.takeLatest)(actions.CHANNEL_CLAIMS_UPDATE_ASYNC, getNewClaimsAndUpdateChannel);\n\n case 2:\n case 'end':\n return _context4.stop();\n }\n }\n }, _marked4, this);\n}\n\n/***/ }),\n/* 151 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getChannelData = getChannelData;\nexports.getChannelClaims = getChannelClaims;\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getChannelData(host, id, name) {\n if (!id) id = 'none';\n var url = host + '/api/channel/data/' + name + '/' + id;\n return (0, _request2.default)(url);\n};\n\nfunction getChannelClaims(host, longId, name, page) {\n if (!page) page = 1;\n var url = host + '/api/channel/claims/' + name + '/' + longId + '/' + page;\n return (0, _request2.default)(url);\n};\n\n/***/ }),\n/* 152 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nmodule.exports = {\n REGEXP_INVALID_CLAIM: /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS: /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR: '@',\n parseIdentifier: function parseIdentifier(identifier) {\n var componentsRegex = new RegExp('([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec = componentsRegex // eslint-disable-line no-unused-vars\n .exec(identifier).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec2 = _slicedToArray(_componentsRegex$exec, 4),\n proto = _componentsRegex$exec2[0],\n value = _componentsRegex$exec2[1],\n modifierSeperator = _componentsRegex$exec2[2],\n modifier = _componentsRegex$exec2[3];\n\n // Validate and process name\n\n\n if (!value) {\n throw new Error('Check your URL. No channel name provided before \"' + modifierSeperator + '\"');\n }\n var isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n var channelName = isChannel ? value : null;\n var claimId = void 0;\n if (isChannel) {\n if (!channelName) {\n throw new Error('Check your URL. No channel name after \"@\".');\n }\n var nameBadChars = channelName.match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error('Check your URL. Invalid characters in channel name: \"' + nameBadChars.join(', ') + '\".');\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n var channelClaimId = void 0;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error('Check your URL. No modifier provided after separator \"' + modifierSeperator + '\"');\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error('Check your URL. The \"' + modifierSeperator + '\" modifier is not currently supported');\n }\n }\n return {\n isChannel: isChannel,\n channelName: channelName,\n channelClaimId: channelClaimId || null,\n claimId: claimId || null\n };\n },\n parseClaim: function parseClaim(name) {\n var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first extension)\n '([:$#.]?)([^/]*)' // extension separator, extension (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec3 = componentsRegex // eslint-disable-line no-unused-vars\n .exec(name).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec4 = _slicedToArray(_componentsRegex$exec3, 4),\n proto = _componentsRegex$exec4[0],\n claimName = _componentsRegex$exec4[1],\n extensionSeperator = _componentsRegex$exec4[2],\n extension = _componentsRegex$exec4[3];\n\n // Validate and process name\n\n\n if (!claimName) {\n throw new Error('Check your URL. No claim name provided before \".\"');\n }\n var nameBadChars = claimName.match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error('Check your URL. Invalid characters in claim name: \"' + nameBadChars.join(', ') + '\".');\n }\n // Validate and process extension\n if (extensionSeperator) {\n if (!extension) {\n throw new Error('Check your URL. No file extension provided after separator \"' + extensionSeperator + '\".');\n }\n if (extensionSeperator !== '.') {\n throw new Error('Check your URL. The \"' + extensionSeperator + '\" separator is not supported in the claim name.');\n }\n }\n return {\n claimName: claimName,\n extension: extension || null\n };\n }\n};\n\n/***/ }),\n/* 153 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar handlePageRender = __webpack_require__(29);\n\nmodule.exports = function (app) {\n // a catch-all route if someone visits a page that does not exist\n app.use('*', function (req, res) {\n // send response\n handlePageRender(req, res);\n });\n};\n\n/***/ }),\n/* 154 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _require = __webpack_require__(155),\n logLevel = _require.logLevel;\n\nmodule.exports = function (winston) {\n // configure\n winston.configure({\n transports: [new winston.transports.Console({\n level: logLevel,\n timestamp: false,\n colorize: true,\n prettyPrint: true,\n handleExceptions: true,\n humanReadableUnhandledException: true\n })]\n });\n // test all the log levels\n winston.error('Level 0');\n winston.warn('Level 1');\n winston.info('Level 2');\n winston.verbose('Level 3');\n winston.debug('Level 4');\n winston.silly('Level 5');\n};\n\n/***/ }),\n/* 155 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar loggerConfig = {\n logLevel: 'debug' // options: silly, debug, verbose, info\n};\n\nmodule.exports = loggerConfig;\n\n/***/ }),\n/* 156 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar winstonSlackWebHook = __webpack_require__(157).SlackWebHook;\nvar slackConfig = __webpack_require__(158);\n\nmodule.exports = function (winston) {\n var slackWebHook = slackConfig.slackWebHook,\n slackErrorChannel = slackConfig.slackErrorChannel,\n slackInfoChannel = slackConfig.slackInfoChannel;\n\n if (slackWebHook) {\n // add a transport for errors to slack\n if (slackErrorChannel) {\n winston.add(winstonSlackWebHook, {\n name: 'slack-errors-transport',\n level: 'warn',\n webhookUrl: slackWebHook,\n channel: slackErrorChannel,\n username: 'spee.ch',\n iconEmoji: ':face_with_head_bandage:'\n });\n };\n if (slackInfoChannel) {\n winston.add(winstonSlackWebHook, {\n name: 'slack-info-transport',\n level: 'info',\n webhookUrl: slackWebHook,\n channel: slackInfoChannel,\n username: 'spee.ch',\n iconEmoji: ':nerd_face:'\n });\n };\n // send test message\n winston.error('Slack \"error\" logging is online.');\n winston.info('Slack \"info\" logging is online.');\n } else {\n winston.warn('Slack logging is not enabled because no slackWebHook config var provided.');\n }\n};\n\n/***/ }),\n/* 157 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"winston-slack-webhook\");\n\n/***/ }),\n/* 158 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction SlackConfig() {\n this.slackWebHook = 'default';\n this.slackErrorChannel = 'default';\n this.slackInfoChannel = 'default';\n};\n\nmodule.exports = new SlackConfig();\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// index.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 45);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap e7360edfffe873533ea7","module.exports = require(\"react\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react\"\n// module id = 0\n// module chunks = 0","module.exports = require(\"react-redux\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-redux\"\n// module id = 1\n// module chunks = 0","module.exports = require(\"winston\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"winston\"\n// module id = 2\n// module chunks = 0","module.exports = require(\"react-router-dom\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-router-dom\"\n// module id = 3\n// module chunks = 0","import * as actions from 'constants/publish_action_types';\n\n// export action creators\nexport function selectFile (file) {\n return {\n type: actions.FILE_SELECTED,\n data: file,\n };\n};\n\nexport function clearFile () {\n return {\n type: actions.FILE_CLEAR,\n };\n};\n\nexport function updateMetadata (name, value) {\n return {\n type: actions.METADATA_UPDATE,\n data: {\n name,\n value,\n },\n };\n};\n\nexport function updateClaim (value) {\n return {\n type: actions.CLAIM_UPDATE,\n data: value,\n };\n};\n\nexport function setPublishInChannel (channel) {\n return {\n type: actions.SET_PUBLISH_IN_CHANNEL,\n channel,\n };\n};\n\nexport function updatePublishStatus (status, message) {\n return {\n type: actions.PUBLISH_STATUS_UPDATE,\n data: {\n status,\n message,\n },\n };\n};\n\nexport function updateError (name, value) {\n return {\n type: actions.ERROR_UPDATE,\n data: {\n name,\n value,\n },\n };\n};\n\nexport function updateSelectedChannel (channelName) {\n return {\n type: actions.SELECTED_CHANNEL_UPDATE,\n data: channelName,\n };\n};\n\nexport function toggleMetadataInputs (showMetadataInputs) {\n return {\n type: actions.TOGGLE_METADATA_INPUTS,\n data: showMetadataInputs,\n };\n};\n\nexport function onNewThumbnail (file) {\n return {\n type: actions.THUMBNAIL_NEW,\n data: file,\n };\n};\n\nexport function startPublish (history) {\n return {\n type: actions.PUBLISH_START,\n data: { history },\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/actions/publish.js","function SiteConfig () {\n this.analytics = {\n googleId: 'default',\n };\n this.assetDefaults = {\n description: 'An asset published on Spee.ch',\n thumbnail : 'https://spee.ch/assets/img/video_thumb_default.png',\n title : 'Spee.ch',\n };\n this.auth = {\n sessionKey: 'default',\n };\n this.details = {\n description: 'Open-source, decentralized image and video sharing.',\n host : 'default',\n port : 3000,\n title : 'Spee.ch',\n twitter : '@spee_ch',\n };\n this.publishing = {\n additionalClaimAddresses: [],\n disabled : false,\n disabledMessage : 'Please check back soon.',\n primaryClaimAddress : 'default',\n thumbnailChannel : 'default',\n thumbnailChannelId : 'default',\n uploadDirectory : '/home/lbry/Uploads',\n };\n};\n\nmodule.exports = new SiteConfig();\n\n\n\n// WEBPACK FOOTER //\n// ./config/siteConfig.js","const Sequelize = require('sequelize');\nconst logger = require('winston');\n\nconsole.log('exporting sequelize models');\nconst { database, username, password } = require('../../config/mysqlConfig');\nconst db = {};\n// set sequelize options\nconst sequelize = new Sequelize(database, username, password, {\n host : 'localhost',\n dialect : 'mysql',\n dialectOptions: {decimalNumbers: true}, // fix to ensure DECIMAL will not be stored as a string\n logging : false,\n pool : {\n max : 5,\n min : 0,\n idle : 10000,\n acquire: 10000,\n },\n});\n\n// establish mysql connection\nsequelize\n .authenticate()\n .then(() => {\n logger.info('Sequelize has established mysql connection successfully.');\n })\n .catch(err => {\n logger.error('Sequelize was unable to connect to the database:', err);\n });\n\n// manually add each model to the db object\nconst Certificate = require('./certificate.js');\nconst Channel = require('./channel.js');\nconst Claim = require('./claim.js');\nconst File = require('./file.js');\nconst Request = require('./request.js');\nconst User = require('./user.js');\ndb['Certificate'] = sequelize.import('Certificate', Certificate);\ndb['Channel'] = sequelize.import('Channel', Channel);\ndb['Claim'] = sequelize.import('Claim', Claim);\ndb['File'] = sequelize.import('File', File);\ndb['Request'] = sequelize.import('Request', Request);\ndb['User'] = sequelize.import('User', User);\n\n// run model.association for each model in the db object that has an association\nObject.keys(db).forEach(modelName => {\n if (db[modelName].associate) {\n logger.info('Associating model:', modelName);\n db[modelName].associate(db);\n }\n});\n\ndb.sequelize = sequelize;\ndb.Sequelize = Sequelize;\n\n// add an 'upsert' method to the db object\ndb.upsert = (Model, values, condition, tableName) => {\n return Model\n .findOne({\n where: condition,\n })\n .then(obj => {\n if (obj) { // update\n logger.debug(`updating record in db.${tableName}`);\n return obj.update(values);\n } else { // insert\n logger.debug(`creating record in db.${tableName}`);\n return Model.create(values);\n }\n })\n .catch(function (error) {\n logger.error(`${tableName}.upsert error`, error);\n throw error;\n });\n};\n\nmodule.exports = db;\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/index.js","import { connect } from 'react-redux';\nimport { updateLoggedInChannel } from 'actions/channel';\nimport {updateSelectedChannel} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, site }) => {\n return {\n channelName : channel.loggedInChannel.name,\n channelShortId: channel.loggedInChannel.shortId,\n channelLongId : channel.loggedInChannel.longId,\n siteDescription: site.description,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onChannelLogin: (name, shortId, longId) => {\n dispatch(updateLoggedInChannel(name, shortId, longId));\n dispatch(updateSelectedChannel(name));\n },\n onChannelLogout: () => {\n dispatch(updateLoggedInChannel(null, null, null));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/NavBar/index.js","import * as actions from 'constants/show_action_types';\n\nimport { CHANNEL, ASSET_LITE, ASSET_DETAILS } from 'constants/show_request_types';\n\n// basic request parsing\nexport function onHandleShowPageUri (params) {\n return {\n type: actions.HANDLE_SHOW_URI,\n data: params,\n };\n};\n\nexport function onRequestError (error) {\n return {\n type: actions.REQUEST_ERROR,\n data: error,\n };\n};\n\nexport function onNewChannelRequest (channelName, channelId) {\n const requestType = CHANNEL;\n const requestId = `cr#${channelName}#${channelId}`;\n return {\n type: actions.CHANNEL_REQUEST_NEW,\n data: { requestType, requestId, channelName, channelId },\n };\n};\n\nexport function onNewAssetRequest (name, id, channelName, channelId, extension) {\n const requestType = extension ? ASSET_LITE : ASSET_DETAILS;\n const requestId = `ar#${name}#${id}#${channelName}#${channelId}`;\n return {\n type: actions.ASSET_REQUEST_NEW,\n data: {\n requestType,\n requestId,\n name,\n modifier: {\n id,\n channel: {\n name: channelName,\n id : channelId,\n },\n },\n },\n };\n};\n\nexport function onRequestUpdate (requestType, requestId) {\n return {\n type: actions.REQUEST_UPDATE,\n data: {\n requestType,\n requestId,\n },\n };\n};\n\nexport function addRequestToRequestList (id, error, key) {\n return {\n type: actions.REQUEST_LIST_ADD,\n data: { id, error, key },\n };\n};\n\n// asset actions\n\nexport function addAssetToAssetList (id, error, name, claimId, shortId, claimData) {\n return {\n type: actions.ASSET_ADD,\n data: { id, error, name, claimId, shortId, claimData },\n };\n}\n\n// channel actions\n\nexport function addNewChannelToChannelList (id, name, shortId, longId, claimsData) {\n return {\n type: actions.CHANNEL_ADD,\n data: { id, name, shortId, longId, claimsData },\n };\n};\n\nexport function onUpdateChannelClaims (channelKey, name, longId, page) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_ASYNC,\n data: {channelKey, name, longId, page},\n };\n};\n\nexport function updateChannelClaims (channelListId, claimsData) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_SUCCESS,\n data: {channelListId, claimsData},\n };\n};\n\n// display a file\n\nexport function fileRequested (name, claimId) {\n return {\n type: actions.FILE_REQUESTED,\n data: { name, claimId },\n };\n};\n\nexport function updateFileAvailability (status) {\n return {\n type: actions.FILE_AVAILABILITY_UPDATE,\n data: status,\n };\n};\n\nexport function updateDisplayAssetError (error) {\n return {\n type: actions.DISPLAY_ASSET_ERROR,\n data: error,\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/actions/show.js","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ site }) => {\n const { defaultDescription, defaultThumbnail, description: siteDescription, host: siteHost, title: siteTitle, twitter: siteTwitter } = site;\n return {\n defaultDescription,\n defaultThumbnail,\n siteDescription,\n siteHost,\n siteTitle,\n siteTwitter,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/SEO/index.js","module.exports = require(\"prop-types\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"prop-types\"\n// module id = 10\n// module chunks = 0","import 'cross-fetch/polyfill';\n\n/**\n * Parses the JSON returned by a network request\n *\n * @param {object} response A response from a network request\n *\n * @return {object} The parsed JSON from the request\n */\nfunction parseJSON (response) {\n if (response.status === 204 || response.status === 205) {\n return null;\n }\n return response.json();\n}\n\n/**\n * Parses the status returned by a network request\n *\n * @param {object} response A response from a network request\n * @param {object} response The parsed JSON from the network request\n *\n * @return {object | undefined} Returns object with status and statusText, or undefined\n */\nfunction checkStatus (response, jsonResponse) {\n if (response.status >= 200 && response.status < 300) {\n return jsonResponse;\n }\n const error = new Error(jsonResponse.message);\n error.response = response;\n throw error;\n}\n\n/**\n * Requests a URL, returning a promise\n *\n * @param {string} url The URL we want to request\n * @param {object} [options] The options we want to pass to \"fetch\"\n *\n * @return {object} The response data\n */\n\nexport default function request (url, options) {\n return fetch(url, options)\n .then(response => {\n return Promise.all([response, parseJSON(response)]);\n })\n .then(([response, jsonResponse]) => {\n return checkStatus(response, jsonResponse);\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/request.js","// request actions\nexport const HANDLE_SHOW_URI = 'HANDLE_SHOW_URI';\nexport const REQUEST_ERROR = 'REQUEST_ERROR';\nexport const REQUEST_UPDATE = 'REQUEST_UPDATE';\nexport const ASSET_REQUEST_NEW = 'ASSET_REQUEST_NEW';\nexport const CHANNEL_REQUEST_NEW = 'CHANNEL_REQUEST_NEW';\nexport const REQUEST_LIST_ADD = 'REQUEST_LIST_ADD';\n\n// asset actions\nexport const ASSET_ADD = `ASSET_ADD`;\n\n// channel actions\nexport const CHANNEL_ADD = 'CHANNEL_ADD';\n\nexport const CHANNEL_CLAIMS_UPDATE_ASYNC = 'CHANNEL_CLAIMS_UPDATE_ASYNC';\nexport const CHANNEL_CLAIMS_UPDATE_SUCCESS = 'CHANNEL_CLAIMS_UPDATE_SUCCESS';\n\n// asset/file display actions\nexport const FILE_REQUESTED = 'FILE_REQUESTED';\nexport const FILE_AVAILABILITY_UPDATE = 'FILE_AVAILABILITY_UPDATE';\nexport const DISPLAY_ASSET_ERROR = 'DISPLAY_ASSET_ERROR';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/show_action_types.js","export const selectAsset = (show) => {\n const request = show.requestList[show.request.id];\n const assetKey = request.key;\n return show.assetList[assetKey];\n};\n\nexport const selectShowState = (state) => {\n return state.show;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/selectors/show.js","module.exports = require(\"react-helmet\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-helmet\"\n// module id = 14\n// module chunks = 0","module.exports = require(\"redux-saga/effects\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"redux-saga/effects\"\n// module id = 15\n// module chunks = 0","const axios = require('axios');\nconst logger = require('winston');\nconst { api: { apiHost, apiPort } } = require('../../config/lbryConfig.js');\nconst lbryApiUri = 'http://' + apiHost + ':' + apiPort;\nconst { chooseGaLbrynetPublishLabel, sendGATimingEvent } = require('./googleAnalytics.js');\n\nconst handleLbrynetResponse = ({ data }, resolve, reject) => {\n logger.debug('lbry api data:', data);\n if (data.result) {\n // check for an error\n if (data.result.error) {\n logger.debug('Lbrynet api error:', data.result.error);\n reject(new Error(data.result.error));\n return;\n };\n resolve(data.result);\n return;\n }\n // fallback in case it just timed out\n reject(JSON.stringify(data));\n};\n\nmodule.exports = {\n publishClaim (publishParams) {\n logger.debug(`lbryApi >> Publishing claim to \"${publishParams.name}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'publish',\n params: publishParams,\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'publish', chooseGaLbrynetPublishLabel(publishParams), gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getClaim (uri) {\n logger.debug(`lbryApi >> Getting Claim for \"${uri}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'get',\n params: { uri, timeout: 20 },\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'getClaim', 'GET', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getClaimList (claimName) {\n logger.debug(`lbryApi >> Getting claim_list for \"${claimName}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'claim_list',\n params: { name: claimName },\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'getClaimList', 'CLAIM_LIST', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n resolveUri (uri) {\n logger.debug(`lbryApi >> Resolving URI for \"${uri}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'resolve',\n params: { uri },\n })\n .then(({ data }) => {\n sendGATimingEvent('lbrynet', 'resolveUri', 'RESOLVE', gaStartTime, Date.now());\n if (data.result[uri].error) { // check for errors\n reject(data.result[uri].error);\n } else { // if no errors, resolve\n resolve(data.result[uri]);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getDownloadDirectory () {\n logger.debug('lbryApi >> Retrieving the download directory path from lbry daemon...');\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'settings_get',\n })\n .then(({ data }) => {\n sendGATimingEvent('lbrynet', 'getDownloadDirectory', 'SETTINGS_GET', gaStartTime, Date.now());\n if (data.result) {\n resolve(data.result.download_directory);\n } else {\n return new Error('Successfully connected to lbry daemon, but unable to retrieve the download directory.');\n }\n })\n .catch(error => {\n logger.error('Lbrynet Error:', error);\n resolve('/home/lbry/Downloads/');\n });\n });\n },\n createChannel (name) {\n logger.debug(`lbryApi >> Creating channel for ${name}...`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'channel_new',\n params: {\n channel_name: name,\n amount : 0.1,\n },\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'createChannel', 'CHANNEL_NEW', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/lbryApi.js","const logger = require('winston');\nconst ua = require('universal-analytics');\nconst { analytics : { googleId }, details: { title } } = require('../../config/siteConfig.js');\n\nfunction createServeEventParams (headers, ip, originalUrl) {\n return {\n eventCategory : 'client requests',\n eventAction : 'serve request',\n eventLabel : originalUrl,\n ipOverride : ip,\n userAgentOverride: headers['user-agent'],\n };\n};\n\nfunction createPublishTimingEventParams (category, variable, label, startTime, endTime) {\n const duration = endTime - startTime;\n return {\n userTimingCategory : category,\n userTimingVariableName: variable,\n userTimingTime : duration,\n userTimingLabel : label,\n };\n};\n\nfunction sendGoogleAnalyticsEvent (ip, params) {\n const visitorId = ip.replace(/\\./g, '-');\n const visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.event(params, (err) => {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n });\n};\n\nfunction sendGoogleAnalyticsTiming (visitorId, params) {\n const visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.timing(params, (err) => {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n logger.debug(`Timing event successfully sent to google analytics`);\n });\n};\n\nmodule.exports = {\n sendGAServeEvent (headers, ip, originalUrl) {\n const params = createServeEventParams(headers, ip, originalUrl);\n sendGoogleAnalyticsEvent(ip, params);\n },\n sendGATimingEvent (category, variable, label, startTime, endTime) {\n const params = createPublishTimingEventParams(category, variable, label, startTime, endTime);\n sendGoogleAnalyticsTiming(title, params);\n },\n chooseGaLbrynetPublishLabel ({ channel_name: channelName, channel_id: channelId }) {\n return (channelName || channelId ? 'PUBLISH_IN_CHANNEL_CLAIM' : 'PUBLISH_ANONYMOUS_CLAIM');\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/googleAnalytics.js","module.exports = require(\"redux\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"redux\"\n// module id = 18\n// module chunks = 0","import * as actions from 'constants/channel_action_types';\n\n// export action creators\n\nexport function updateLoggedInChannel (name, shortId, longId) {\n return {\n type: actions.CHANNEL_UPDATE,\n data: {\n name,\n shortId,\n longId,\n },\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/actions/channel.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ActiveStatusBar from 'components/ActiveStatusBar';\nimport InactiveStatusBar from 'components/InactiveStatusBar';\n\nclass ProgressBar extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n bars : [],\n index : 0,\n incrementer: 1,\n };\n this.createBars = this.createBars.bind(this);\n this.startProgressBar = this.startProgressBar.bind(this);\n this.updateProgressBar = this.updateProgressBar.bind(this);\n this.stopProgressBar = this.stopProgressBar.bind(this);\n }\n componentDidMount () {\n this.createBars();\n this.startProgressBar();\n }\n componentWillUnmount () {\n this.stopProgressBar();\n }\n createBars () {\n const bars = [];\n for (let i = 0; i <= this.props.size; i++) {\n bars.push({isActive: false});\n }\n this.setState({ bars });\n }\n startProgressBar () {\n this.updateInterval = setInterval(this.updateProgressBar.bind(this), 300);\n };\n updateProgressBar () {\n let index = this.state.index;\n let incrementer = this.state.incrementer;\n let bars = this.state.bars;\n // flip incrementer if necessary, to stay in bounds\n if ((index < 0) || (index > this.props.size)) {\n incrementer = incrementer * -1;\n index += incrementer;\n }\n // update the indexed bar\n if (incrementer > 0) {\n bars[index].isActive = true;\n } else {\n bars[index].isActive = false;\n };\n // increment index\n index += incrementer;\n // update state\n this.setState({\n bars,\n incrementer,\n index,\n });\n };\n stopProgressBar () {\n clearInterval(this.updateInterval);\n };\n render () {\n return (\n
\n {this.state.bars.map((bar, index) => bar.isActive ? : )}\n
\n );\n }\n};\n\nProgressBar.propTypes = {\n size: PropTypes.number.isRequired,\n};\n\nexport default ProgressBar;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/ProgressBar/index.jsx","import React from 'react';\nimport PropTypes from 'prop-types';\nimport NavBar from 'containers/NavBar';\n\nclass ErrorPage extends React.Component {\n render () {\n const { error } = this.props;\n return (\n
\n \n
\n

{error}

\n
\n
\n );\n }\n};\n\nErrorPage.propTypes = {\n error: PropTypes.string.isRequired,\n};\n\nexport default ErrorPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/ErrorPage/index.jsx","module.exports = require(\"passport\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"passport\"\n// module id = 22\n// module chunks = 0","module.exports = require(\"passport-local\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"passport-local\"\n// module id = 23\n// module chunks = 0","module.exports = require(\"sequelize\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"sequelize\"\n// module id = 24\n// module chunks = 0","module.exports = {\n returnShortId: function (claimsArray, longId) {\n let claimIndex;\n let shortId = longId.substring(0, 1); // default short id is the first letter\n let shortIdLength = 0;\n // find the index of this claim id\n claimIndex = claimsArray.findIndex(element => {\n return element.claimId === longId;\n });\n if (claimIndex < 0) {\n throw new Error('claim id not found in claims list');\n }\n // get an array of all claims with lower height\n let possibleMatches = claimsArray.slice(0, claimIndex);\n // remove certificates with the same prefixes until none are left.\n while (possibleMatches.length > 0) {\n shortIdLength += 1;\n shortId = longId.substring(0, shortIdLength);\n possibleMatches = possibleMatches.filter(element => {\n return (element.claimId && (element.claimId.substring(0, shortIdLength) === shortId));\n });\n }\n return shortId;\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/sequelizeHelpers.js","const logger = require('winston');\nconst fs = require('fs');\n\nconst { details, publishing } = require('../../config/siteConfig.js');\n\nmodule.exports = {\n parsePublishApiRequestBody ({name, nsfw, license, title, description, thumbnail}) {\n // validate name\n if (!name) {\n throw new Error('no name field found in request');\n }\n const invalidNameCharacters = /[^A-Za-z0-9,-]/.exec(name);\n if (invalidNameCharacters) {\n throw new Error('The claim name you provided is not allowed. Only the following characters are allowed: A-Z, a-z, 0-9, and \"-\"');\n }\n // optional parameters\n nsfw = (nsfw === 'true');\n license = license || null;\n title = title || null;\n description = description || null;\n thumbnail = thumbnail || null;\n // return results\n return {\n name,\n nsfw,\n license,\n title,\n description,\n thumbnail,\n };\n },\n parsePublishApiRequestFiles ({file, thumbnail}) {\n // make sure a file was provided\n if (!file) {\n throw new Error('no file with key of [file] found in request');\n }\n if (!file.path) {\n throw new Error('no file path found');\n }\n if (!file.type) {\n throw new Error('no file type found');\n }\n if (!file.size) {\n throw new Error('no file type found');\n }\n // validate the file name\n if (/'/.test(file.name)) {\n throw new Error('apostrophes are not allowed in the file name');\n }\n // validate the file\n module.exports.validateFileTypeAndSize(file);\n // return results\n return {\n fileName : file.name,\n filePath : file.path,\n fileType : file.type,\n thumbnailFileName: (thumbnail ? thumbnail.name : null),\n thumbnailFilePath: (thumbnail ? thumbnail.path : null),\n thumbnailFileType: (thumbnail ? thumbnail.type : null),\n };\n },\n validateFileTypeAndSize (file) {\n // check file type and size\n switch (file.type) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n if (file.size > 10000000) {\n logger.debug('publish > file validation > .jpeg/.jpg/.png was too big');\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .gif was too big');\n throw new Error('Sorry, .gifs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .mp4 was too big');\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n logger.debug('publish > file validation > unrecognized file type');\n throw new Error('The ' + file.type + ' content type is not supported. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n return file;\n },\n createBasicPublishParams (filePath, name, title, description, license, nsfw, thumbnail) {\n logger.debug(`Creating Publish Parameters`);\n // provide defaults for title\n if (title === null || title.trim() === '') {\n title = name;\n }\n // provide default for description\n if (description === null || description.trim() === '') {\n description = '';\n }\n // provide default for license\n if (license === null || license.trim() === '') {\n license = ' '; // default to empty string\n }\n // create the publish params\n const publishParams = {\n name,\n file_path: filePath,\n bid : 0.01,\n metadata : {\n description,\n title,\n author : details.title,\n language: 'en',\n license,\n nsfw,\n },\n claim_address: publishing.primaryClaimAddress,\n };\n // add thumbnail to channel if video\n if (thumbnail) {\n publishParams['metadata']['thumbnail'] = thumbnail;\n }\n return publishParams;\n },\n createThumbnailPublishParams (thumbnailFilePath, claimName, license, nsfw) {\n if (!thumbnailFilePath) {\n return;\n }\n logger.debug(`Creating Thumbnail Publish Parameters`);\n // create the publish params\n return {\n name : `${claimName}-thumb`,\n file_path: thumbnailFilePath,\n bid : 0.01,\n metadata : {\n title : `${claimName} thumbnail`,\n description: `a thumbnail for ${claimName}`,\n author : details.title,\n language : 'en',\n license,\n nsfw,\n },\n claim_address: publishing.primaryClaimAddress,\n channel_name : publishing.thumbnailChannel,\n channel_id : publishing.thumbnailChannelId,\n };\n },\n deleteTemporaryFile (filePath) {\n fs.unlink(filePath, err => {\n if (err) {\n logger.error(`error deleting temporary file ${filePath}`);\n throw err;\n }\n logger.debug(`successfully deleted ${filePath}`);\n });\n },\n addGetResultsToFileData (fileInfo, getResult) {\n fileInfo.fileName = getResult.file_name;\n fileInfo.filePath = getResult.download_path;\n return fileInfo;\n },\n createFileData ({ name, claimId, outpoint, height, address, nsfw, contentType }) {\n return {\n name,\n claimId,\n outpoint,\n height,\n address,\n fileName: '',\n filePath: '',\n fileType: contentType,\n nsfw,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/publishHelpers.js","const logger = require('winston');\n\nmodule.exports = {\n handleErrorResponse: function (originalUrl, ip, error, res) {\n logger.error(`Error on ${originalUrl}`, module.exports.useObjectPropertiesIfNoKeys(error));\n const [status, message] = module.exports.returnErrorMessageAndStatus(error);\n res\n .status(status)\n .json(module.exports.createErrorResponsePayload(status, message));\n },\n returnErrorMessageAndStatus: function (error) {\n let status, message;\n // check for daemon being turned off\n if (error.code === 'ECONNREFUSED') {\n status = 503;\n message = 'Connection refused. The daemon may not be running.';\n // fallback for everything else\n } else {\n status = 400;\n if (error.message) {\n message = error.message;\n } else {\n message = error;\n };\n };\n return [status, message];\n },\n useObjectPropertiesIfNoKeys: function (err) {\n if (Object.keys(err).length === 0) {\n let newErrorObject = {};\n Object.getOwnPropertyNames(err).forEach((key) => {\n newErrorObject[key] = err[key];\n });\n return newErrorObject;\n }\n return err;\n },\n createErrorResponsePayload (status, message) {\n return {\n status,\n success: false,\n message,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/errorHandlers.js","const db = require('../models/index');\nconst logger = require('winston');\nconst { returnPaginatedChannelClaims } = require('../helpers/channelPagination.js');\n\nconst NO_CHANNEL = 'NO_CHANNEL';\nconst NO_CLAIM = 'NO_CLAIM';\nconst NO_FILE = 'NO_FILE';\n\nmodule.exports = {\n getClaimId (channelName, channelClaimId, name, claimId) {\n if (channelName) {\n return module.exports.getClaimIdByChannel(channelName, channelClaimId, name);\n } else {\n return module.exports.getClaimIdByClaim(name, claimId);\n }\n },\n getClaimIdByClaim (claimName, claimId) {\n logger.debug(`getClaimIdByClaim(${claimName}, ${claimId})`);\n return new Promise((resolve, reject) => {\n db.Claim.getLongClaimId(claimName, claimId)\n .then(longClaimId => {\n if (!longClaimId) {\n resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getClaimIdByChannel (channelName, channelClaimId, claimName) {\n logger.debug(`getClaimIdByChannel(${channelName}, ${channelClaimId}, ${claimName})`);\n return new Promise((resolve, reject) => {\n db.Certificate.getLongChannelId(channelName, channelClaimId) // 1. get the long channel id\n .then(longChannelId => {\n if (!longChannelId) {\n return [null, null];\n }\n return Promise.all([longChannelId, db.Claim.getClaimIdByLongChannelId(longChannelId, claimName)]); // 2. get the long claim id\n })\n .then(([longChannelId, longClaimId]) => {\n if (!longChannelId) {\n return resolve(NO_CHANNEL);\n }\n if (!longClaimId) {\n return resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getChannelData (channelName, channelClaimId, page) {\n return new Promise((resolve, reject) => {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId)\n .then(longChannelClaimId => {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Certificate.getShortChannelIdFromLongChannelId(longChannelClaimId, channelName)]);\n })\n .then(([longChannelClaimId, shortChannelClaimId]) => {\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. return all the channel information\n resolve({\n channelName,\n longChannelClaimId,\n shortChannelClaimId,\n });\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getChannelClaims (channelName, channelClaimId, page) {\n return new Promise((resolve, reject) => {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId)\n .then(longChannelClaimId => {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Claim.getAllChannelClaims(longChannelClaimId)]);\n })\n .then(([longChannelClaimId, channelClaimsArray]) => {\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. format the data for the view, including pagination\n let paginatedChannelViewData = returnPaginatedChannelClaims(channelName, longChannelClaimId, channelClaimsArray, page);\n // 4. return all the channel information and contents\n resolve(paginatedChannelViewData);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getLocalFileRecord (claimId, name) {\n return db.File.findOne({where: {claimId, name}})\n .then(file => {\n if (!file) {\n return NO_FILE;\n }\n return file.dataValues;\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/controllers/serveController.js","import React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport { createStore } from 'redux';\nimport Reducer from '../../client/reducers/index';\nimport { Provider } from 'react-redux';\nimport { StaticRouter } from 'react-router-dom';\nimport GAListener from '../../client/components/GAListener/index';\nimport App from '../../client/app';\nimport renderFullPage from './renderFullPage.js';\nimport Helmet from 'react-helmet';\n\nmodule.exports = (req, res) => {\n let context = {};\n\n // create a new Redux store instance\n const store = createStore(Reducer);\n\n // render component to a string\n const html = renderToString(\n \n \n \n \n \n \n \n );\n\n // get head tags from helmet\n const helmet = Helmet.renderStatic();\n\n // check for a redirect\n if (context.url) {\n // Somewhere a `` was rendered\n return res.redirect(301, context.url);\n } else {\n // we're good, send the response\n }\n\n // get the initial state from our Redux store\n const preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send(renderFullPage(helmet, html, preloadedState));\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/handlePageRender.jsx","module.exports = require(\"react-dom/server\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-dom/server\"\n// module id = 30\n// module chunks = 0","import { combineReducers } from 'redux';\nimport PublishReducer from 'reducers/publish';\nimport ChannelReducer from 'reducers/channel';\nimport ShowReducer from 'reducers/show';\nimport SiteReducer from 'reducers/site';\n\nexport default combineReducers({\n channel: ChannelReducer,\n publish: PublishReducer,\n show : ShowReducer,\n site : SiteReducer,\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/index.js","export const FILE_SELECTED = 'FILE_SELECTED';\nexport const FILE_CLEAR = 'FILE_CLEAR';\nexport const METADATA_UPDATE = 'METADATA_UPDATE';\nexport const CLAIM_UPDATE = 'CLAIM_UPDATE';\nexport const SET_PUBLISH_IN_CHANNEL = 'SET_PUBLISH_IN_CHANNEL';\nexport const PUBLISH_STATUS_UPDATE = 'PUBLISH_STATUS_UPDATE';\nexport const ERROR_UPDATE = 'ERROR_UPDATE';\nexport const SELECTED_CHANNEL_UPDATE = 'SELECTED_CHANNEL_UPDATE';\nexport const TOGGLE_METADATA_INPUTS = 'TOGGLE_METADATA_INPUTS';\nexport const THUMBNAIL_NEW = 'THUMBNAIL_NEW';\nexport const PUBLISH_START = 'PUBLISH_START';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/publish_action_types.js","export const LOGIN = 'Existing';\nexport const CREATE = 'New';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/publish_channel_select_states.js","export const CHANNEL_UPDATE = 'CHANNEL_UPDATE';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/channel_action_types.js","export const LOCAL_CHECK = 'LOCAL_CHECK';\nexport const UNAVAILABLE = 'UNAVAILABLE';\nexport const ERROR = 'ERROR';\nexport const AVAILABLE = 'AVAILABLE';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/asset_display_states.js","import React from 'react';\nimport GoogleAnalytics from 'react-ga';\nimport { withRouter } from 'react-router-dom';\nconst { analytics: { googleId } } = require('../../../config/siteConfig.js');\n\nGoogleAnalytics.initialize(googleId);\n\nclass GAListener extends React.Component {\n componentDidMount () {\n this.sendPageView(this.props.history.location);\n this.props.history.listen(this.sendPageView);\n }\n\n sendPageView (location) {\n GoogleAnalytics.set({ page: location.pathname });\n GoogleAnalytics.pageview(location.pathname);\n }\n\n render () {\n return this.props.children;\n }\n}\n\nexport default withRouter(GAListener);\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/GAListener/index.jsx","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport HomePage from 'pages/HomePage'; // or use the provided local homepage\nimport AboutPage from 'pages/AboutPage';\nimport LoginPage from 'pages/LoginPage';\nimport ShowPage from 'pages/ShowPage';\nimport FourOhFourPage from 'containers/FourOhFourPage';\n\nconst App = () => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default App;\n\n\n\n// WEBPACK FOOTER //\n// ./client/app.jsx","import { connect } from 'react-redux';\nimport { selectFile, updateError, clearFile } from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n file : publish.file,\n thumbnail: publish.thumbnail,\n fileError: publish.error.file,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n selectFile: (file) => {\n dispatch(selectFile(file));\n },\n setFileError: (value) => {\n dispatch(clearFile());\n dispatch(updateError('file', value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/Dropzone/index.js","import { connect } from 'react-redux';\nimport { updateLoggedInChannel } from 'actions/channel';\nimport View from './view';\nimport {updateSelectedChannel} from '../../actions/publish';\n\nconst mapDispatchToProps = dispatch => {\n return {\n onChannelLogin: (name, shortId, longId) => {\n dispatch(updateLoggedInChannel(name, shortId, longId));\n dispatch(updateSelectedChannel(name));\n },\n };\n};\n\nexport default connect(null, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelLoginForm/index.js","import { connect } from 'react-redux';\nimport { updateLoggedInChannel } from 'actions/channel';\nimport View from './view';\nimport {updateSelectedChannel} from 'actions/publish';\n\nconst mapDispatchToProps = dispatch => {\n return {\n onChannelLogin: (name, shortId, longId) => {\n dispatch(updateLoggedInChannel(name, shortId, longId));\n dispatch(updateSelectedChannel(name));\n },\n };\n};\n\nexport default connect(null, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelCreateForm/index.js","export const CHANNEL = 'CHANNEL';\nexport const ASSET_LITE = 'ASSET_LITE';\nexport const ASSET_DETAILS = 'ASSET_DETAILS';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/show_request_types.js","import { connect } from 'react-redux';\nimport View from './view';\nimport { fileRequested } from 'actions/show';\nimport { selectAsset } from 'selectors/show';\n\nconst mapStateToProps = ({ show }) => {\n // select error and status\n const error = show.displayAsset.error;\n const status = show.displayAsset.status;\n // select asset\n const asset = selectAsset(show);\n // return props\n return {\n error,\n status,\n asset,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onFileRequest: (name, claimId) => {\n dispatch(fileRequested(name, claimId));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetDisplay/index.js","module.exports = (helmet, html, preloadedState) => {\n // take the html and preloadedState and return the full page\n return `\n \n \n \n \n \n \n \n ${helmet.title.toString()}\n ${helmet.meta.toString()}\n ${helmet.link.toString()}\n \n \n \n \n \n \n \n \n
\n
${html}
\n
\n \n \n \n \n `;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/renderFullPage.js","export const selectSiteState = (state) => {\n return state.site;\n};\n\nexport const selectSiteHost = (state) => {\n return state.site.host;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/selectors/site.js","module.exports = require(\"babel-polyfill\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"babel-polyfill\"\n// module id = 46\n// module chunks = 0","module.exports = require(\"whatwg-fetch\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"whatwg-fetch\"\n// module id = 47\n// module chunks = 0","// app dependencies\nconst express = require('express');\nconst bodyParser = require('body-parser');\nconst expressHandlebars = require('express-handlebars');\nconst Handlebars = require('handlebars');\nconst helmet = require('helmet');\nconst passport = require('passport');\nconst { serializeSpeechUser, deserializeSpeechUser } = require('./helpers/authHelpers.js');\nconst cookieSession = require('cookie-session');\nconst http = require('http');\n// logging dependencies\nconst logger = require('winston');\n\nconst {auth: { sessionKey }, details: { port: PORT }} = require('../config/siteConfig.js');\n\n// create an Express application\nconst app = express();\n\n// trust the proxy to get ip address for us\napp.enable('trust proxy');\n\n// add middleware\napp.use(helmet()); // set HTTP headers to protect against well-known web vulnerabilties\napp.use(express.static(`${__dirname}/public`)); // 'express.static' to serve static files from public directory\napp.use(bodyParser.json()); // 'body parser' for parsing application/json\napp.use(bodyParser.urlencoded({ extended: true })); // 'body parser' for parsing application/x-www-form-urlencoded\napp.use((req, res, next) => { // custom logging middleware to log all incoming http requests\n logger.verbose(`Request on ${req.originalUrl} from ${req.ip}`);\n next();\n});\n\n// configure passport\npassport.serializeUser(serializeSpeechUser);\npassport.deserializeUser(deserializeSpeechUser);\nconst localSignupStrategy = require('./passport/local-signup.js');\nconst localLoginStrategy = require('./passport/local-login.js');\npassport.use('local-signup', localSignupStrategy);\npassport.use('local-login', localLoginStrategy);\n// initialize passport\napp.use(cookieSession({\n name : 'session',\n keys : [sessionKey],\n maxAge: 24 * 60 * 60 * 1000, // i.e. 24 hours\n}));\napp.use(passport.initialize());\napp.use(passport.session());\n\n// configure handlebars & register it with express app\nconst hbs = expressHandlebars.create({\n defaultLayout: 'embed',\n handlebars : Handlebars,\n});\napp.engine('handlebars', hbs.engine);\napp.set('view engine', 'handlebars');\n\n// set the routes on the app\nrequire('./routes/auth-routes.js')(app);\nrequire('./routes/api-routes.js')(app);\nrequire('./routes/page-routes.js')(app);\nrequire('./routes/asset-routes.js')(app);\nrequire('./routes/fallback-routes.js')(app);\n\n// create server\nconst server = http.Server(app);\n\n// configure logger\nrequire('./helpers/configureLogger.js')(logger);\nrequire('./helpers/configureSlack.js')(logger);\n\n// sync sequelize\nconst db = require('./models/index');\ndb.sequelize.sync()\n // start the server\n .then(() => {\n server.listen(PORT, () => {\n logger.info(`Server is listening on PORT ${PORT}`);\n });\n })\n .catch((error) => {\n logger.error(`Startup Error:`, error);\n });\n\n\n\n// WEBPACK FOOTER //\n// ./server/server.js","module.exports = require(\"express\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"express\"\n// module id = 49\n// module chunks = 0","module.exports = require(\"body-parser\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"body-parser\"\n// module id = 50\n// module chunks = 0","module.exports = require(\"express-handlebars\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"express-handlebars\"\n// module id = 51\n// module chunks = 0","module.exports = require(\"handlebars\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"handlebars\"\n// module id = 52\n// module chunks = 0","module.exports = require(\"helmet\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"helmet\"\n// module id = 53\n// module chunks = 0","const logger = require('winston');\n\nmodule.exports = {\n serializeSpeechUser (user, done) { // returns user data to be serialized into session\n logger.debug('serializing user');\n done(null, user);\n },\n deserializeSpeechUser (user, done) { // deserializes session and populates additional info to req.user\n logger.debug('deserializing user');\n done(null, user);\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/authHelpers.js","module.exports = require(\"cookie-session\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"cookie-session\"\n// module id = 55\n// module chunks = 0","module.exports = require(\"http\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"http\"\n// module id = 56\n// module chunks = 0","const PassportLocalStrategy = require('passport-local').Strategy;\nconst lbryApi = require('../helpers/lbryApi.js');\nconst logger = require('winston');\nconst db = require('../models/index');\n\nmodule.exports = new PassportLocalStrategy(\n {\n usernameField: 'username',\n passwordField: 'password',\n },\n (username, password, done) => {\n logger.verbose(`new channel signup request. user: ${username} pass: ${password} .`);\n let userInfo = {};\n // server-side validaton of inputs (username, password)\n\n // create the channel and retrieve the metadata\n return lbryApi.createChannel(`@${username}`)\n .then(tx => {\n // create user record\n const userData = {\n userName: username,\n password: password,\n };\n logger.verbose('userData >', userData);\n // create user record\n const channelData = {\n channelName : `@${username}`,\n channelClaimId: tx.claim_id,\n };\n logger.verbose('channelData >', channelData);\n // create certificate record\n const certificateData = {\n claimId: tx.claim_id,\n name : `@${username}`,\n // address,\n };\n logger.verbose('certificateData >', certificateData);\n // save user and certificate to db\n return Promise.all([db.User.create(userData), db.Channel.create(channelData), db.Certificate.create(certificateData)]);\n })\n .then(([newUser, newChannel, newCertificate]) => {\n logger.verbose('user and certificate successfully created');\n // store the relevant newUser info to be passed back for req.User\n userInfo['id'] = newUser.id;\n userInfo['userName'] = newUser.userName;\n userInfo['channelName'] = newChannel.channelName;\n userInfo['channelClaimId'] = newChannel.channelClaimId;\n // associate the instances\n return Promise.all([newCertificate.setChannel(newChannel), newChannel.setUser(newUser)]);\n })\n .then(() => {\n logger.verbose('user and certificate successfully associated');\n return db.Certificate.getShortChannelIdFromLongChannelId(userInfo.channelClaimId, userInfo.channelName);\n })\n .then(shortChannelId => {\n userInfo['shortChannelId'] = shortChannelId;\n return done(null, userInfo);\n })\n .catch(error => {\n logger.error('signup error', error);\n return done(error);\n });\n }\n);\n\n\n\n// WEBPACK FOOTER //\n// ./server/passport/local-signup.js","module.exports = require(\"axios\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"axios\"\n// module id = 58\n// module chunks = 0","const lbryConfig = {\n api: {\n apiHost: 'localhost',\n apiPort: '5279',\n },\n};\n\nmodule.exports = lbryConfig;\n\n\n\n// WEBPACK FOOTER //\n// ./config/lbryConfig.js","module.exports = require(\"universal-analytics\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"universal-analytics\"\n// module id = 60\n// module chunks = 0","function MysqlConfig () {\n this.database = 'default';\n this.username = 'default';\n this.password = 'default';\n};\n\nmodule.exports = new MysqlConfig();\n\n\n\n// WEBPACK FOOTER //\n// ./config/mysqlConfig.js","const logger = require('winston');\nconst { returnShortId } = require('../helpers/sequelizeHelpers.js');\n\nmodule.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => {\n const Certificate = sequelize.define(\n 'Certificate',\n {\n address: {\n type : STRING,\n default: null,\n },\n amount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n claimId: {\n type : STRING,\n default: null,\n },\n claimSequence: {\n type : INTEGER,\n default: null,\n },\n decodedClaim: {\n type : BOOLEAN,\n default: null,\n },\n depth: {\n type : INTEGER,\n default: null,\n },\n effectiveAmount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n hasSignature: {\n type : BOOLEAN,\n default: null,\n },\n height: {\n type : INTEGER,\n default: null,\n },\n hex: {\n type : TEXT('long'),\n default: null,\n },\n name: {\n type : STRING,\n default: null,\n },\n nout: {\n type : INTEGER,\n default: null,\n },\n txid: {\n type : STRING,\n default: null,\n },\n validAtHeight: {\n type : INTEGER,\n default: null,\n },\n outpoint: {\n type : STRING,\n default: null,\n },\n valueVersion: {\n type : STRING,\n default: null,\n },\n claimType: {\n type : STRING,\n default: null,\n },\n certificateVersion: {\n type : STRING,\n default: null,\n },\n keyType: {\n type : STRING,\n default: null,\n },\n publicKey: {\n type : TEXT('long'),\n default: null,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Certificate.associate = db => {\n Certificate.belongsTo(db.Channel, {\n foreignKey: {\n allowNull: true,\n },\n });\n };\n\n Certificate.getShortChannelIdFromLongChannelId = function (longChannelId, channelName) {\n logger.debug(`getShortChannelIdFromLongChannelId ${channelName}:${longChannelId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: {name: channelName},\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n throw new Error('No channel(s) found with that channel name');\n default:\n return resolve(returnShortId(result, longChannelId));\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromShortChannelId = function (channelName, channelClaimId) {\n logger.debug(`getLongChannelIdFromShortChannelId(${channelName}, ${channelClaimId})`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: {\n name : channelName,\n claimId: {\n $like: `${channelClaimId}%`,\n },\n },\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n default: // note results must be sorted\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromChannelName = function (channelName) {\n logger.debug(`getLongChannelIdFromChannelName(${channelName})`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name: channelName },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.validateLongChannelId = function (name, claimId) {\n logger.debug(`validateLongChannelId(${name}, ${claimId})`);\n return new Promise((resolve, reject) => {\n this.findOne({\n where: {name, claimId},\n })\n .then(result => {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelId = function (channelName, channelClaimId) {\n logger.debug(`getLongChannelId(${channelName}, ${channelClaimId})`);\n if (channelClaimId && (channelClaimId.length === 40)) { // if a full channel id is provided\n return this.validateLongChannelId(channelName, channelClaimId);\n } else if (channelClaimId && channelClaimId.length < 40) { // if a short channel id is provided\n return this.getLongChannelIdFromShortChannelId(channelName, channelClaimId);\n } else {\n return this.getLongChannelIdFromChannelName(channelName); // if no channel id provided\n }\n };\n\n return Certificate;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/certificate.js","module.exports = (sequelize, { STRING }) => {\n const Channel = sequelize.define(\n 'Channel',\n {\n channelName: {\n type : STRING,\n allowNull: false,\n },\n channelClaimId: {\n type : STRING,\n allowNull: false,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Channel.associate = db => {\n Channel.belongsTo(db.User);\n Channel.hasOne(db.Certificate);\n };\n\n return Channel;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/channel.js","const logger = require('winston');\nconst { returnShortId } = require('../helpers/sequelizeHelpers.js');\nconst { assetDefaults: { thumbnail: defaultThumbnail }, details: { host } } = require('../../config/siteConfig.js');\n\nfunction determineFileExtensionFromContentType (contentType) {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n return 'jpeg';\n case 'image/png':\n return 'png';\n case 'image/gif':\n return 'gif';\n case 'video/mp4':\n return 'mp4';\n default:\n logger.debug('setting unknown file type as file extension jpeg');\n return 'jpeg';\n }\n};\n\nfunction determineThumbnail (storedThumbnail, defaultThumbnail) {\n if (storedThumbnail === '') {\n return defaultThumbnail;\n }\n return storedThumbnail;\n};\n\nfunction prepareClaimData (claim) {\n // logger.debug('preparing claim data based on resolved data:', claim);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['host'] = host;\n return claim;\n};\n\nmodule.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => {\n const Claim = sequelize.define(\n 'Claim',\n {\n address: {\n type : STRING,\n default: null,\n },\n amount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n claimId: {\n type : STRING,\n default: null,\n },\n claimSequence: {\n type : INTEGER,\n default: null,\n },\n decodedClaim: {\n type : BOOLEAN,\n default: null,\n },\n depth: {\n type : INTEGER,\n default: null,\n },\n effectiveAmount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n hasSignature: {\n type : BOOLEAN,\n default: null,\n },\n height: {\n type : INTEGER,\n default: null,\n },\n hex: {\n type : TEXT('long'),\n default: null,\n },\n name: {\n type : STRING,\n default: null,\n },\n nout: {\n type : INTEGER,\n default: null,\n },\n txid: {\n type : STRING,\n default: null,\n },\n validAtHeight: {\n type : INTEGER,\n default: null,\n },\n outpoint: {\n type : STRING,\n default: null,\n },\n claimType: {\n type : STRING,\n default: null,\n },\n certificateId: {\n type : STRING,\n default: null,\n },\n author: {\n type : STRING,\n default: null,\n },\n description: {\n type : TEXT('long'),\n default: null,\n },\n language: {\n type : STRING,\n default: null,\n },\n license: {\n type : STRING,\n default: null,\n },\n licenseUrl: {\n type : STRING,\n default: null,\n },\n nsfw: {\n type : BOOLEAN,\n default: null,\n },\n preview: {\n type : STRING,\n default: null,\n },\n thumbnail: {\n type : STRING,\n default: null,\n },\n title: {\n type : STRING,\n default: null,\n },\n metadataVersion: {\n type : STRING,\n default: null,\n },\n contentType: {\n type : STRING,\n default: null,\n },\n source: {\n type : STRING,\n default: null,\n },\n sourceType: {\n type : STRING,\n default: null,\n },\n sourceVersion: {\n type : STRING,\n default: null,\n },\n streamVersion: {\n type : STRING,\n default: null,\n },\n valueVersion: {\n type : STRING,\n default: null,\n },\n channelName: {\n type : STRING,\n allowNull: true,\n default : null,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Claim.associate = db => {\n Claim.belongsTo(db.File, {\n foreignKey: {\n allowNull: true,\n },\n });\n };\n\n Claim.getShortClaimIdFromLongClaimId = function (claimId, claimName) {\n logger.debug(`Claim.getShortClaimIdFromLongClaimId for ${claimName}#${claimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name: claimName },\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n throw new Error('No claim(s) found with that claim name');\n default:\n resolve(returnShortId(result, claimId));\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getAllChannelClaims = function (channelClaimId) {\n logger.debug(`Claim.getAllChannelClaims for ${channelClaimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { certificateId: channelClaimId },\n order: [['height', 'ASC']],\n raw : true, // returns an array of only data, not an array of instances\n })\n .then(channelClaimsArray => {\n // logger.debug('channelclaimsarray length:', channelClaimsArray.length);\n switch (channelClaimsArray.length) {\n case 0:\n return resolve(null);\n default:\n channelClaimsArray.forEach(claim => {\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n return claim;\n });\n return resolve(channelClaimsArray);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getClaimIdByLongChannelId = function (channelClaimId, claimName) {\n logger.debug(`finding claim id for claim ${claimName} from channel ${channelClaimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name: claimName, certificateId: channelClaimId },\n order: [['id', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(result[0].claimId);\n default:\n logger.error(`${result.length} records found for \"${claimName}\" in channel \"${channelClaimId}\"`);\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimIdFromShortClaimId = function (name, shortId) {\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: {\n name,\n claimId: {\n $like: `${shortId}%`,\n }},\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n default: // note results must be sorted\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getTopFreeClaimIdByClaimName = function (name) {\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']], // note: maybe height and effective amount need to switch?\n })\n .then(result => {\n logger.debug('length of result', result.length);\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].dataValues.claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.validateLongClaimId = function (name, claimId) {\n return new Promise((resolve, reject) => {\n this.findOne({\n where: {name, claimId},\n })\n .then(result => {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimId = function (claimName, claimId) {\n logger.debug(`getLongClaimId(${claimName}, ${claimId})`);\n if (claimId && (claimId.length === 40)) { // if a full claim id is provided\n return this.validateLongClaimId(claimName, claimId);\n } else if (claimId && claimId.length < 40) {\n return this.getLongClaimIdFromShortClaimId(claimName, claimId); // if a short claim id is provided\n } else {\n return this.getTopFreeClaimIdByClaimName(claimName); // if no claim id is provided\n }\n };\n\n Claim.resolveClaim = function (name, claimId) {\n logger.debug(`Claim.resolveClaim: ${name} ${claimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name, claimId },\n })\n .then(claimArray => {\n switch (claimArray.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(prepareClaimData(claimArray[0].dataValues));\n default:\n logger.error(`more than one record matches ${name}#${claimId} in db.Claim`);\n return resolve(prepareClaimData(claimArray[0].dataValues));\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n return Claim;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/claim.js","module.exports = (sequelize, { STRING, BOOLEAN, INTEGER }) => {\n const File = sequelize.define(\n 'File',\n {\n name: {\n type : STRING,\n allowNull: false,\n },\n claimId: {\n type : STRING,\n allowNull: false,\n },\n address: {\n type : STRING,\n allowNull: false,\n },\n outpoint: {\n type : STRING,\n allowNull: false,\n },\n height: {\n type : INTEGER,\n allowNull: false,\n default : 0,\n },\n fileName: {\n type : STRING,\n allowNull: false,\n },\n filePath: {\n type : STRING,\n allowNull: false,\n },\n fileType: {\n type: STRING,\n },\n nsfw: {\n type : BOOLEAN,\n allowNull : false,\n defaultValue: false,\n },\n trendingEligible: {\n type : BOOLEAN,\n allowNull : false,\n defaultValue: true,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n File.associate = db => {\n File.hasMany(db.Request);\n File.hasOne(db.Claim);\n };\n\n File.getRecentClaims = function () {\n return this.findAll({\n where: { nsfw: false, trendingEligible: true },\n order: [['createdAt', 'DESC']],\n limit: 25,\n });\n };\n\n return File;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/file.js","module.exports = (sequelize, { STRING, BOOLEAN, TEXT }) => {\n const Request = sequelize.define(\n 'Request',\n {\n action: {\n type : STRING,\n allowNull: false,\n },\n url: {\n type : STRING,\n allowNull: false,\n },\n ipAddress: {\n type : STRING,\n allowNull: true,\n },\n result: {\n type : TEXT('long'),\n allowNull: true,\n default : null,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Request.associate = db => {\n Request.belongsTo(db.File, {\n foreignKey: {\n allowNull: true,\n },\n });\n };\n\n return Request;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/request.js","'use strict';\nconst bcrypt = require('bcrypt');\nconst logger = require('winston');\n\nmodule.exports = (sequelize, { STRING }) => {\n const User = sequelize.define(\n 'User',\n {\n userName: {\n type : STRING,\n allowNull: false,\n },\n password: {\n type : STRING,\n allowNull: false,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n User.associate = db => {\n User.hasOne(db.Channel);\n };\n\n User.prototype.comparePassword = function (password) {\n return bcrypt.compare(password, this.password);\n };\n\n User.prototype.changePassword = function (newPassword) {\n return new Promise((resolve, reject) => {\n // generate a salt string to use for hashing\n bcrypt.genSalt((saltError, salt) => {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(newPassword, salt, (hashError, hash) => {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the current password with the new hash\n this\n .update({password: hash})\n .then(() => {\n resolve();\n })\n .catch(error => {\n reject(error);\n });\n });\n });\n });\n };\n\n // pre-save hook method to hash the user's password before the user's info is saved to the db.\n User.hook('beforeCreate', (user, options) => {\n logger.debug('User.beforeCreate hook...');\n return new Promise((resolve, reject) => {\n // generate a salt string to use for hashing\n bcrypt.genSalt((saltError, salt) => {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(user.password, salt, (hashError, hash) => {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the password string with the hash password value\n user.password = hash;\n resolve();\n });\n });\n });\n });\n\n return User;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/user.js","module.exports = require(\"bcrypt\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"bcrypt\"\n// module id = 68\n// module chunks = 0","const PassportLocalStrategy = require('passport-local').Strategy;\nconst logger = require('winston');\nconst db = require('../models/index');\n\nconst returnUserAndChannelInfo = (userInstance) => {\n return new Promise((resolve, reject) => {\n let userInfo = {};\n userInfo['id'] = userInstance.id;\n userInfo['userName'] = userInstance.userName;\n userInstance\n .getChannel()\n .then(({channelName, channelClaimId}) => {\n userInfo['channelName'] = channelName;\n userInfo['channelClaimId'] = channelClaimId;\n return db.Certificate.getShortChannelIdFromLongChannelId(channelClaimId, channelName);\n })\n .then(shortChannelId => {\n userInfo['shortChannelId'] = shortChannelId;\n resolve(userInfo);\n })\n .catch(error => {\n reject(error);\n });\n });\n};\n\nmodule.exports = new PassportLocalStrategy(\n {\n usernameField: 'username',\n passwordField: 'password',\n },\n (username, password, done) => {\n return db.User\n .findOne({\n where: {userName: username},\n })\n .then(user => {\n if (!user) {\n logger.debug('no user found');\n return done(null, false, {message: 'Incorrect username or password'});\n }\n return user.comparePassword(password)\n .then(isMatch => {\n if (!isMatch) {\n logger.debug('incorrect password');\n return done(null, false, {message: 'Incorrect username or password'});\n }\n logger.debug('Password was a match, returning User');\n return returnUserAndChannelInfo(user)\n .then(userInfo => {\n return done(null, userInfo);\n })\n .catch(error => {\n return error;\n });\n })\n .catch(error => {\n return error;\n });\n })\n .catch(error => {\n return done(error);\n });\n },\n);\n\n\n\n// WEBPACK FOOTER //\n// ./server/passport/local-login.js","const logger = require('winston');\nconst passport = require('passport');\n\nmodule.exports = (app) => {\n // route for sign up\n app.post('/signup', passport.authenticate('local-signup'), (req, res) => {\n logger.verbose(`successful signup for ${req.user.channelName}`);\n res.status(200).json({\n success : true,\n channelName : req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId,\n });\n });\n // route for log in\n app.post('/login', (req, res, next) => {\n passport.authenticate('local-login', (err, user, info) => {\n if (err) {\n return next(err);\n }\n if (!user) {\n return res.status(400).json({\n success: false,\n message: info.message,\n });\n }\n logger.debug('successful login');\n req.logIn(user, (err) => {\n if (err) {\n return next(err);\n }\n return res.status(200).json({\n success : true,\n channelName : req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId,\n });\n });\n })(req, res, next);\n });\n // route to log out\n app.get('/logout', (req, res) => {\n req.logout();\n res.status(200).json({success: true, message: 'you successfully logged out'});\n });\n // see if user is authenticated, and return credentials if so\n app.get('/user', (req, res) => {\n if (req.user) {\n res.status(200).json({success: true, data: req.user});\n } else {\n res.status(401).json({success: false, message: 'user is not logged in'});\n }\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/auth-routes.js","const logger = require('winston');\nconst multipart = require('connect-multiparty');\nconst { publishing: { uploadDirectory }, details: { host } } = require('../../config/siteConfig.js');\nconst multipartMiddleware = multipart({uploadDir: uploadDirectory});\nconst db = require('../models/index');\nconst { claimNameIsAvailable, checkChannelAvailability, publish } = require('../controllers/publishController.js');\nconst { getClaimList, resolveUri, getClaim } = require('../helpers/lbryApi.js');\nconst { addGetResultsToFileData, createBasicPublishParams, createThumbnailPublishParams, parsePublishApiRequestBody, parsePublishApiRequestFiles, createFileData } = require('../helpers/publishHelpers.js');\nconst errorHandlers = require('../helpers/errorHandlers.js');\nconst { sendGATimingEvent } = require('../helpers/googleAnalytics.js');\nconst { authenticateUser } = require('../auth/authentication.js');\nconst { getChannelData, getChannelClaims, getClaimId } = require('../controllers/serveController.js');\n\nconst NO_CHANNEL = 'NO_CHANNEL';\nconst NO_CLAIM = 'NO_CLAIM';\n\nmodule.exports = (app) => {\n // route to check whether site has published to a channel\n app.get('/api/channel/availability/:name', ({ ip, originalUrl, params: { name } }, res) => {\n const gaStartTime = Date.now();\n checkChannelAvailability(name)\n .then(availableName => {\n res.status(200).json(availableName);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short channel id from long channel Id\n app.get('/api/channel/short-id/:longId/:name', ({ ip, originalUrl, params }, res) => {\n db.Certificate.getShortChannelIdFromLongChannelId(params.longId, params.name)\n .then(shortId => {\n res.status(200).json(shortId);\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/data/:channelName/:channelClaimId', ({ ip, originalUrl, body, params }, res) => {\n const channelName = params.channelName;\n let channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n getChannelData(channelName, channelClaimId, 0)\n .then(data => {\n if (data === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'No matching channel was found'});\n }\n res.status(200).json({success: true, data});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/claims/:channelName/:channelClaimId/:page', ({ ip, originalUrl, body, params }, res) => {\n const channelName = params.channelName;\n let channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n const page = params.page;\n getChannelClaims(channelName, channelClaimId, page)\n .then(data => {\n if (data === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'No matching channel was found'});\n }\n res.status(200).json({success: true, data});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a claim_list request on the daemon\n app.get('/api/claim/list/:name', ({ ip, originalUrl, params }, res) => {\n getClaimList(params.name)\n .then(claimsList => {\n res.status(200).json(claimsList);\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get an asset\n app.get('/api/claim/get/:name/:claimId', ({ ip, originalUrl, params }, res) => {\n const name = params.name;\n const claimId = params.claimId;\n // resolve the claim\n db.Claim.resolveClaim(name, claimId)\n .then(resolveResult => {\n // make sure a claim actually exists at that uri\n if (!resolveResult) {\n throw new Error('No matching uri found in Claim table');\n }\n let fileData = createFileData(resolveResult);\n // get the claim\n return Promise.all([fileData, getClaim(`${name}#${claimId}`)]);\n })\n .then(([ fileData, getResult ]) => {\n fileData = addGetResultsToFileData(fileData, getResult);\n return Promise.all([db.upsert(db.File, fileData, {name, claimId}, 'File'), getResult]);\n })\n .then(([ fileRecord, {message, completed} ]) => {\n res.status(200).json({ success: true, message, completed });\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to check whether this site published to a claim\n app.get('/api/claim/availability/:name', ({ ip, originalUrl, params: { name } }, res) => {\n const gaStartTime = Date.now();\n claimNameIsAvailable(name)\n .then(result => {\n res.status(200).json(result);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a resolve request on the daemon\n app.get('/api/claim/resolve/:name/:claimId', ({ headers, ip, originalUrl, params }, res) => {\n resolveUri(`${params.name}#${params.claimId}`)\n .then(resolvedUri => {\n res.status(200).json(resolvedUri);\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a publish request on the daemon\n app.post('/api/claim/publish', multipartMiddleware, ({ body, files, headers, ip, originalUrl, user }, res) => {\n // define variables\n let channelName, channelId, channelPassword, description, fileName, filePath, fileType, gaStartTime, license, name, nsfw, thumbnail, thumbnailFileName, thumbnailFilePath, thumbnailFileType, title;\n // record the start time of the request\n gaStartTime = Date.now();\n // validate the body and files of the request\n try {\n // validateApiPublishRequest(body, files);\n ({name, nsfw, license, title, description, thumbnail} = parsePublishApiRequestBody(body));\n ({fileName, filePath, fileType, thumbnailFileName, thumbnailFilePath, thumbnailFileType} = parsePublishApiRequestFiles(files));\n ({channelName, channelId, channelPassword} = body);\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n // check channel authorization\n Promise.all([\n authenticateUser(channelName, channelId, channelPassword, user),\n claimNameIsAvailable(name),\n createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail),\n createThumbnailPublishParams(thumbnailFilePath, name, license, nsfw),\n ])\n .then(([{channelName, channelClaimId}, validatedClaimName, publishParams, thumbnailPublishParams]) => {\n // add channel details to the publish params\n if (channelName && channelClaimId) {\n publishParams['channel_name'] = channelName;\n publishParams['channel_id'] = channelClaimId;\n }\n // publish the thumbnail\n if (thumbnailPublishParams) {\n publish(thumbnailPublishParams, thumbnailFileName, thumbnailFileType);\n }\n // publish the asset\n return publish(publishParams, fileName, fileType);\n })\n .then(result => {\n res.status(200).json({\n success: true,\n message: 'publish completed successfully',\n data : {\n name,\n claimId: result.claim_id,\n url : `${host}/${result.claim_id}/${name}`,\n lbryTx : result,\n },\n });\n // record the publish end time and send to google analytics\n sendGATimingEvent('end-to-end', 'publish', fileType, gaStartTime, Date.now());\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short claim id from long claim Id\n app.get('/api/claim/short-id/:longId/:name', ({ ip, originalUrl, body, params }, res) => {\n db.Claim.getShortClaimIdFromLongClaimId(params.longId, params.name)\n .then(shortId => {\n res.status(200).json({success: true, data: shortId});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.post('/api/claim/long-id', ({ ip, originalUrl, body, params }, res) => {\n logger.debug('body:', body);\n const channelName = body.channelName;\n const channelClaimId = body.channelClaimId;\n const claimName = body.claimName;\n const claimId = body.claimId;\n getClaimId(channelName, channelClaimId, claimName, claimId)\n .then(result => {\n if (result === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'No matching channel could be found'});\n }\n if (result === NO_CLAIM) {\n return res.status(404).json({success: false, message: 'No matching claim id could be found'});\n }\n res.status(200).json({success: true, data: result});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/claim/data/:claimName/:claimId', ({ ip, originalUrl, body, params }, res) => {\n const claimName = params.claimName;\n let claimId = params.claimId;\n if (claimId === 'none') claimId = null;\n db.Claim.resolveClaim(claimName, claimId)\n .then(claimInfo => {\n if (!claimInfo) {\n return res.status(404).json({success: false, message: 'No claim could be found'});\n }\n res.status(200).json({success: true, data: claimInfo});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to see if asset is available locally\n app.get('/api/file/availability/:name/:claimId', ({ ip, originalUrl, params }, res) => {\n const name = params.name;\n const claimId = params.claimId;\n db.File.findOne({where: {name, claimId}})\n .then(result => {\n if (result) {\n return res.status(200).json({success: true, data: true});\n }\n res.status(200).json({success: true, data: false});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/api-routes.js","module.exports = require(\"connect-multiparty\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"connect-multiparty\"\n// module id = 72\n// module chunks = 0","const logger = require('winston');\nconst db = require('../models/index');\nconst lbryApi = require('../helpers/lbryApi.js');\nconst publishHelpers = require('../helpers/publishHelpers.js');\nconst { publishing: { primaryClaimAddress, additionalClaimAddresses } } = require('../../config/siteConfig.js');\nconst Sequelize = require('sequelize');\nconst Op = Sequelize.Op;\n\nmodule.exports = {\n publish (publishParams, fileName, fileType) {\n return new Promise((resolve, reject) => {\n let publishResults, certificateId, channelName;\n // publish the file\n return lbryApi.publishClaim(publishParams)\n .then(tx => {\n logger.info(`Successfully published ${publishParams.name} ${fileName}`, tx);\n publishResults = tx;\n // get the channel information\n if (publishParams.channel_name) {\n logger.debug(`this claim was published in channel: ${publishParams.channel_name}`);\n return db.Channel.findOne({where: {channelName: publishParams.channel_name}});\n } else {\n logger.debug('this claim was not published in a channel');\n return null;\n }\n })\n .then(channel => {\n // set channel information\n certificateId = null;\n channelName = null;\n if (channel) {\n certificateId = channel.channelClaimId;\n channelName = channel.channelName;\n }\n logger.debug(`certificateId: ${certificateId}`);\n })\n .then(() => {\n // create the File record\n const fileRecord = {\n name : publishParams.name,\n claimId : publishResults.claim_id,\n title : publishParams.metadata.title,\n description: publishParams.metadata.description,\n address : publishParams.claim_address,\n outpoint : `${publishResults.txid}:${publishResults.nout}`,\n height : 0,\n fileName,\n filePath : publishParams.file_path,\n fileType,\n nsfw : publishParams.metadata.nsfw,\n };\n // create the Claim record\n const claimRecord = {\n name : publishParams.name,\n claimId : publishResults.claim_id,\n title : publishParams.metadata.title,\n description: publishParams.metadata.description,\n address : publishParams.claim_address,\n thumbnail : publishParams.metadata.thumbnail,\n outpoint : `${publishResults.txid}:${publishResults.nout}`,\n height : 0,\n contentType: fileType,\n nsfw : publishParams.metadata.nsfw,\n amount : publishParams.bid,\n certificateId,\n channelName,\n };\n // upsert criteria\n const upsertCriteria = {\n name : publishParams.name,\n claimId: publishResults.claim_id,\n };\n // upsert the records\n return Promise.all([db.upsert(db.File, fileRecord, upsertCriteria, 'File'), db.upsert(db.Claim, claimRecord, upsertCriteria, 'Claim')]);\n })\n .then(([file, claim]) => {\n logger.debug('File and Claim records successfully created');\n return Promise.all([file.setClaim(claim), claim.setFile(file)]);\n })\n .then(() => {\n logger.debug('File and Claim records successfully associated');\n resolve(publishResults); // resolve the promise with the result from lbryApi.publishClaim;\n })\n .catch(error => {\n logger.error('PUBLISH ERROR', error);\n publishHelpers.deleteTemporaryFile(publishParams.file_path); // delete the local file\n reject(error);\n });\n });\n },\n claimNameIsAvailable (name) {\n const claimAddresses = additionalClaimAddresses || [];\n claimAddresses.push(primaryClaimAddress);\n // find any records where the name is used\n return db.Claim\n .findAll({\n attributes: ['address'],\n where : {\n name,\n address: {\n [Op.or]: claimAddresses,\n },\n },\n })\n .then(result => {\n if (result.length >= 1) {\n throw new Error('That claim is already in use');\n };\n return name;\n })\n .catch(error => {\n throw error;\n });\n },\n checkChannelAvailability (name) {\n return db.Channel\n .findAll({\n where: { channelName: name },\n })\n .then(result => {\n if (result.length >= 1) {\n throw new Error('That channel has already been claimed');\n }\n return name;\n })\n .catch(error => {\n throw error;\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/controllers/publishController.js","module.exports = require(\"fs\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"fs\"\n// module id = 74\n// module chunks = 0","const db = require('../models/index');\nconst logger = require('winston');\n\nmodule.exports = {\n authenticateUser (channelName, channelId, channelPassword, user) {\n // case: no channelName or channel Id are provided (anonymous), regardless of whether user token is provided\n if (!channelName && !channelId) {\n return {\n channelName : null,\n channelClaimId: null,\n };\n }\n // case: channelName or channel Id are provided with user token\n if (user) {\n if (channelName && channelName !== user.channelName) {\n throw new Error('the provided channel name does not match user credentials');\n }\n if (channelId && channelId !== user.channelClaimId) {\n throw new Error('the provided channel id does not match user credentials');\n }\n return {\n channelName : user.channelName,\n channelClaimId: user.channelClaimId,\n };\n }\n // case: channelName or channel Id are provided with password instead of user token\n if (!channelPassword) throw new Error('no channel password provided');\n return module.exports.authenticateChannelCredentials(channelName, channelId, channelPassword);\n },\n authenticateChannelCredentials (channelName, channelId, userPassword) {\n return new Promise((resolve, reject) => {\n // hoisted variables\n let channelData;\n // build the params for finding the channel\n let channelFindParams = {};\n if (channelName) channelFindParams['channelName'] = channelName;\n if (channelId) channelFindParams['channelClaimId'] = channelId;\n // find the channel\n db.Channel\n .findOne({\n where: channelFindParams,\n })\n .then(channel => {\n if (!channel) {\n logger.debug('no channel found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n channelData = channel.get();\n logger.debug('channel data:', channelData);\n return db.User.findOne({\n where: { userName: channelData.channelName.substring(1) },\n });\n })\n .then(user => {\n if (!user) {\n logger.debug('no user found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n return user.comparePassword(userPassword);\n })\n .then(isMatch => {\n if (!isMatch) {\n logger.debug('incorrect password');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n logger.debug('...password was a match...');\n resolve(channelData);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/auth/authentication.js","const CLAIMS_PER_PAGE = 12;\n\nmodule.exports = {\n returnPaginatedChannelClaims (channelName, longChannelClaimId, claims, page) {\n const totalPages = module.exports.determineTotalPages(claims);\n const paginationPage = module.exports.getPageFromQuery(page);\n const viewData = {\n channelName : channelName,\n longChannelClaimId: longChannelClaimId,\n claims : module.exports.extractPageFromClaims(claims, paginationPage),\n previousPage : module.exports.determinePreviousPage(paginationPage),\n currentPage : paginationPage,\n nextPage : module.exports.determineNextPage(totalPages, paginationPage),\n totalPages : totalPages,\n totalResults : module.exports.determineTotalClaims(claims),\n };\n return viewData;\n },\n getPageFromQuery (page) {\n if (page) {\n return parseInt(page);\n }\n return 1;\n },\n extractPageFromClaims (claims, pageNumber) {\n if (!claims) {\n return []; // if no claims, return this default\n }\n // logger.debug('claims is array?', Array.isArray(claims));\n // logger.debug(`pageNumber ${pageNumber} is number?`, Number.isInteger(pageNumber));\n const claimStartIndex = (pageNumber - 1) * CLAIMS_PER_PAGE;\n const claimEndIndex = claimStartIndex + CLAIMS_PER_PAGE;\n const pageOfClaims = claims.slice(claimStartIndex, claimEndIndex);\n return pageOfClaims;\n },\n determineTotalPages (claims) {\n if (!claims) {\n return 0;\n } else {\n const totalClaims = claims.length;\n if (totalClaims < CLAIMS_PER_PAGE) {\n return 1;\n }\n const fullPages = Math.floor(totalClaims / CLAIMS_PER_PAGE);\n const remainder = totalClaims % CLAIMS_PER_PAGE;\n if (remainder === 0) {\n return fullPages;\n }\n return fullPages + 1;\n }\n },\n determinePreviousPage (currentPage) {\n if (currentPage === 1) {\n return null;\n }\n return currentPage - 1;\n },\n determineNextPage (totalPages, currentPage) {\n if (currentPage === totalPages) {\n return null;\n }\n return currentPage + 1;\n },\n determineTotalClaims (claims) {\n if (!claims) {\n return 0;\n }\n return claims.length;\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/channelPagination.js","const { details: host } = require('../../config/siteConfig.js');\nconst handlePageRender = require('../helpers/handlePageRender.jsx');\n\nmodule.exports = (app) => {\n // route for the home page\n app.get('/', (req, res) => {\n handlePageRender(req, res);\n });\n // route to display login page\n app.get('/login', (req, res) => {\n handlePageRender(req, res);\n });\n // route to show 'about' page\n app.get('/about', (req, res) => {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/trending', (req, res) => {\n res.status(301).redirect('/popular');\n });\n app.get('/popular', (req, res) => {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/new', (req, res) => {\n handlePageRender(req, res);\n });\n // route to send embedable video player (for twitter)\n app.get('/embed/:claimId/:name', ({ params }, res) => {\n const claimId = params.claimId;\n const name = params.name;\n // get and render the content\n res.status(200).render('embed', { layout: 'embed', host, claimId, name });\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/page-routes.js","import * as actions from 'constants/publish_action_types';\nimport { LOGIN } from 'constants/publish_channel_select_states';\nconst { publishing } = require('../../config/siteConfig.js');\n\nconst initialState = {\n disabled : publishing.disabled,\n disabledMessage : publishing.disabledMessage,\n publishInChannel : false,\n selectedChannel : LOGIN,\n showMetadataInputs: false,\n status : {\n status : null,\n message: null,\n },\n error: {\n file : null,\n url : null,\n channel : null,\n publishSubmit: null,\n },\n file : null,\n claim : '',\n metadata: {\n title : '',\n description: '',\n license : '',\n nsfw : false,\n },\n thumbnail: null,\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n case actions.FILE_SELECTED:\n return Object.assign({}, initialState, { // note: clears to initial state\n file: action.data,\n });\n case actions.FILE_CLEAR:\n return initialState;\n case actions.METADATA_UPDATE:\n return Object.assign({}, state, {\n metadata: Object.assign({}, state.metadata, {\n [action.data.name]: action.data.value,\n }),\n });\n case actions.CLAIM_UPDATE:\n return Object.assign({}, state, {\n claim: action.data,\n });\n case actions.SET_PUBLISH_IN_CHANNEL:\n return Object.assign({}, state, {\n publishInChannel: action.channel,\n });\n case actions.PUBLISH_STATUS_UPDATE:\n return Object.assign({}, state, {\n status: action.data,\n });\n case actions.ERROR_UPDATE:\n return Object.assign({}, state, {\n error: Object.assign({}, state.error, {\n [action.data.name]: action.data.value,\n }),\n });\n case actions.SELECTED_CHANNEL_UPDATE:\n return Object.assign({}, state, {\n selectedChannel: action.data,\n });\n case actions.TOGGLE_METADATA_INPUTS:\n return Object.assign({}, state, {\n showMetadataInputs: action.data,\n });\n case actions.THUMBNAIL_NEW:\n return Object.assign({}, state, {\n thumbnail: action.data,\n });\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/publish.js","import * as actions from 'constants/channel_action_types';\n\nconst initialState = {\n loggedInChannel: {\n name : null,\n shortId: null,\n longId : null,\n },\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n case actions.CHANNEL_UPDATE:\n return Object.assign({}, state, {\n loggedInChannel: action.data,\n });\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/channel.js","import * as actions from 'constants/show_action_types';\nimport { LOCAL_CHECK, ERROR } from 'constants/asset_display_states';\n\nconst initialState = {\n request: {\n error: null,\n type : null,\n id : null,\n },\n requestList : {},\n channelList : {},\n assetList : {},\n displayAsset: {\n error : null,\n status: LOCAL_CHECK,\n },\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n // handle request\n case actions.REQUEST_ERROR:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n error: action.data,\n }),\n });\n case actions.REQUEST_UPDATE:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n type: action.data.requestType,\n id : action.data.requestId,\n }),\n });\n // store requests\n case actions.REQUEST_LIST_ADD:\n return Object.assign({}, state, {\n requestList: Object.assign({}, state.requestList, {\n [action.data.id]: {\n error: action.data.error,\n key : action.data.key,\n },\n }),\n });\n // asset data\n case actions.ASSET_ADD:\n return Object.assign({}, state, {\n assetList: Object.assign({}, state.assetList, {\n [action.data.id]: {\n error : action.data.error,\n name : action.data.name,\n claimId : action.data.claimId,\n shortId : action.data.shortId,\n claimData: action.data.claimData,\n },\n }),\n });\n // channel data\n case actions.CHANNEL_ADD:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, {\n [action.data.id]: {\n name : action.data.name,\n longId : action.data.longId,\n shortId : action.data.shortId,\n claimsData: action.data.claimsData,\n },\n }),\n });\n case actions.CHANNEL_CLAIMS_UPDATE_SUCCESS:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, {\n [action.data.channelListId]: Object.assign({}, state.channelList[action.data.channelListId], {\n claimsData: action.data.claimsData,\n }),\n }),\n });\n // display an asset\n case actions.FILE_AVAILABILITY_UPDATE:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n status: action.data,\n }),\n });\n case actions.DISPLAY_ASSET_ERROR:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n error : action.data,\n status: ERROR,\n }),\n });\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/show.js","const siteConfig = require('../../config/siteConfig.js');\n\nconst {\n analytics: {\n googleId: googleAnalyticsId,\n },\n assetDefaults: {\n thumbnail: defaultThumbnail,\n description: defaultDescription,\n },\n details: {\n description,\n host,\n title,\n twitter,\n },\n} = siteConfig;\n\nconst initialState = {\n description,\n googleAnalyticsId,\n host,\n title,\n twitter,\n defaultDescription,\n defaultThumbnail,\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/site.js","module.exports = require(\"react-ga\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-ga\"\n// module id = 82\n// module chunks = 0","import React from 'react';\nimport SEO from 'components/SEO';\nimport NavBar from 'containers/NavBar';\nimport PublishTool from 'containers/PublishTool';\n\nclass HomePage extends React.Component {\n render () {\n return (\n
\n \n \n
\n \n
\n
\n );\n }\n};\n\nexport default HomePage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/HomePage/index.jsx","import React from 'react';\nimport Helmet from 'react-helmet';\nimport PropTypes from 'prop-types';\n\nimport { createPageTitle } from 'utils/pageTitle';\nimport { createMetaTags } from 'utils/metaTags';\nimport { createCanonicalLink } from 'utils/canonicalLink';\n\nclass SEO extends React.Component {\n render () {\n // props from state\n const { defaultDescription, defaultThumbnail, siteDescription, siteHost, siteTitle, siteTwitter } = this.props;\n // props from parent\n const { asset, channel, pageUri } = this.props;\n let { pageTitle } = this.props;\n // create page title, tags, and canonical link\n pageTitle = createPageTitle(siteTitle, pageTitle);\n const metaTags = createMetaTags(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail);\n const canonicalLink = createCanonicalLink(asset, channel, pageUri, siteHost);\n // render results\n return (\n \n );\n }\n};\n\nSEO.propTypes = {\n pageTitle: PropTypes.string,\n pageUri : PropTypes.string,\n channel : PropTypes.object,\n asset : PropTypes.object,\n};\n\nexport default SEO;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/SEO/view.jsx","export const createPageTitle = (siteTitle, pageTitle) => {\n if (!pageTitle) {\n return `${siteTitle}`;\n }\n return `${siteTitle} - ${pageTitle}`;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/pageTitle.js","const determineOgThumbnailContentType = (thumbnail) => {\n if (thumbnail) {\n const fileExt = thumbnail.substring(thumbnail.lastIndexOf('.'));\n switch (fileExt) {\n case 'jpeg':\n case 'jpg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'gif':\n return 'image/gif';\n case 'mp4':\n return 'video/mp4';\n default:\n return 'image/jpeg';\n }\n }\n return '';\n};\n\nconst createBasicMetaTags = (siteHost, siteDescription, siteTitle, siteTwitter) => {\n return [\n {property: 'og:title', content: siteTitle},\n {property: 'og:url', content: siteHost},\n {property: 'og:site_name', content: siteTitle},\n {property: 'og:description', content: siteDescription},\n {property: 'twitter:site', content: siteTwitter},\n {property: 'twitter:card', content: 'summary'},\n ];\n};\n\nconst createChannelMetaTags = (siteTitle, siteHost, siteTwitter, channel) => {\n const { name, longId } = channel;\n return [\n {property: 'og:title', content: `${name} on ${siteTitle}`},\n {property: 'og:url', content: `${siteHost}/${name}:${longId}`},\n {property: 'og:site_name', content: siteTitle},\n {property: 'og:description', content: `${name}, a channel on ${siteTitle}`},\n {property: 'twitter:site', content: siteTwitter},\n {property: 'twitter:card', content: 'summary'},\n ];\n};\n\nconst createAssetMetaTags = (siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail) => {\n const { claimData } = asset;\n const { contentType } = claimData;\n const embedUrl = `${siteHost}/${claimData.claimId}/${claimData.name}`;\n const showUrl = `${siteHost}/${claimData.claimId}/${claimData.name}`;\n const source = `${siteHost}/${claimData.claimId}/${claimData.name}.${claimData.fileExt}`;\n const ogTitle = claimData.title || claimData.name;\n const ogDescription = claimData.description || defaultDescription;\n const ogThumbnailContentType = determineOgThumbnailContentType(claimData.thumbnail);\n const ogThumbnail = claimData.thumbnail || defaultThumbnail;\n const metaTags = [\n {property: 'og:title', content: ogTitle},\n {property: 'og:url', content: showUrl},\n {property: 'og:site_name', content: siteTitle},\n {property: 'og:description', content: ogDescription},\n {property: 'og:image:width', content: 600},\n {property: 'og:image:height', content: 315},\n {property: 'twitter:site', content: siteTwitter},\n ];\n if (contentType === 'video/mp4' || contentType === 'video/webm') {\n metaTags.push({property: 'og:video', content: source});\n metaTags.push({property: 'og:video:secure_url', content: source});\n metaTags.push({property: 'og:video:type', content: contentType});\n metaTags.push({property: 'og:image', content: ogThumbnail});\n metaTags.push({property: 'og:image:type', content: ogThumbnailContentType});\n metaTags.push({property: 'og:type', content: 'video'});\n metaTags.push({property: 'twitter:card', content: 'player'});\n metaTags.push({property: 'twitter:player', content: embedUrl});\n metaTags.push({property: 'twitter:player:width', content: 600});\n metaTags.push({property: 'twitter:text:player_width', content: 600});\n metaTags.push({property: 'twitter:player:height', content: 337});\n metaTags.push({property: 'twitter:player:stream', content: source});\n metaTags.push({property: 'twitter:player:stream:content_type', content: contentType});\n } else {\n metaTags.push({property: 'og:image', content: source});\n metaTags.push({property: 'og:image:type', content: contentType});\n metaTags.push({property: 'og:type', content: 'article'});\n metaTags.push({property: 'twitter:card', content: 'summary_large_image'});\n }\n return metaTags;\n};\n\nexport const createMetaTags = (siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail) => {\n if (asset) {\n return createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail);\n };\n if (channel) {\n return createChannelMetaTags(siteHost, siteTitle, siteTwitter, channel);\n };\n return createBasicMetaTags(siteDescription, siteHost, siteTitle, siteTwitter);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/metaTags.js","const createBasicCanonicalLink = (page, siteHost) => {\n return `${siteHost}/${page}`;\n};\n\nconst createAssetCanonicalLink = (asset, siteHost) => {\n let channelName, certificateId, name, claimId;\n if (asset.claimData) {\n ({ channelName, certificateId, name, claimId } = asset.claimData);\n };\n if (channelName) {\n return `${siteHost}/${channelName}:${certificateId}/${name}`;\n };\n return `${siteHost}/${claimId}/${name}`;\n};\n\nconst createChannelCanonicalLink = (channel, siteHost) => {\n const { name, longId } = channel;\n return `${siteHost}/${name}:${longId}`;\n};\n\nexport const createCanonicalLink = (asset, channel, page, siteHost) => {\n if (asset) {\n return createAssetCanonicalLink(asset, siteHost);\n }\n if (channel) {\n return createChannelCanonicalLink(channel, siteHost);\n }\n return createBasicCanonicalLink(page, siteHost);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/canonicalLink.js","import React from 'react';\nimport { NavLink, withRouter } from 'react-router-dom';\nimport Logo from 'components/Logo';\nimport NavBarChannelDropdown from 'components/NavBarChannelOptionsDropdown';\nimport request from 'utils/request';\n\nconst VIEW = 'VIEW';\nconst LOGOUT = 'LOGOUT';\n\nclass NavBar extends React.Component {\n constructor (props) {\n super(props);\n this.checkForLoggedInUser = this.checkForLoggedInUser.bind(this);\n this.logoutUser = this.logoutUser.bind(this);\n this.handleSelection = this.handleSelection.bind(this);\n }\n componentDidMount () {\n // check to see if the user is already logged in\n this.checkForLoggedInUser();\n }\n checkForLoggedInUser () {\n const params = {credentials: 'include'};\n request('/user', params)\n .then(({ data }) => {\n this.props.onChannelLogin(data.channelName, data.shortChannelId, data.channelClaimId);\n })\n .catch(error => {\n console.log('/user error:', error.message);\n });\n }\n logoutUser () {\n const params = {credentials: 'include'};\n request('/logout', params)\n .then(() => {\n this.props.onChannelLogout();\n })\n .catch(error => {\n console.log('/logout error', error.message);\n });\n }\n handleSelection (event) {\n const value = event.target.selectedOptions[0].value;\n switch (value) {\n case LOGOUT:\n this.logoutUser();\n break;\n case VIEW:\n // redirect to channel page\n this.props.history.push(`/${this.props.channelName}:${this.props.channelLongId}`);\n break;\n default:\n break;\n }\n }\n render () {\n const { siteDescription } = this.props;\n return (\n
\n
\n \n
\n {siteDescription}\n
\n
\n Publish\n About\n { this.props.channelName ? (\n \n ) : (\n Channel\n )}\n
\n
\n
\n );\n }\n}\n\nexport default withRouter(NavBar);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/NavBar/view.jsx","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nfunction Logo () {\n return (\n \n \n Logo\n Spee.ch logo\n \n \n \n Spee<h\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Logo;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/Logo/index.jsx","import React from 'react';\n\nfunction NavBarChannelDropdown ({ channelName, handleSelection, defaultSelection, VIEW, LOGOUT }) {\n return (\n \n );\n};\n\nexport default NavBarChannelDropdown;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/NavBarChannelOptionsDropdown/index.jsx","module.exports = require(\"cross-fetch/polyfill\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"cross-fetch/polyfill\"\n// module id = 91\n// module chunks = 0","import {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n disabled: publish.disabled,\n file : publish.file,\n status : publish.status.status,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTool/index.js","import React from 'react';\nimport Dropzone from 'containers/Dropzone';\nimport PublishDetails from 'containers/PublishDetails';\nimport PublishStatus from 'containers/PublishStatus';\nimport PublishDisabledMessage from 'containers/PublishDisabledMessage';\n\nclass PublishTool extends React.Component {\n render () {\n if (this.props.disabled) {\n console.log('publish is disabled');\n return (\n \n );\n } else {\n console.log('publish is not disabled');\n if (this.props.file) {\n if (this.props.status) {\n return (\n \n );\n } else {\n return ;\n }\n }\n return ;\n }\n }\n};\n\nexport default PublishTool;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTool/view.jsx","import React from 'react';\nimport { validateFile } from 'utils/file';\nimport PublishPreview from 'components/PublishPreview';\n\nclass Dropzone extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n dragOver : false,\n mouseOver : false,\n dimPreview: false,\n };\n this.handleDrop = this.handleDrop.bind(this);\n this.handleDragOver = this.handleDragOver.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleDragEnter = this.handleDragEnter.bind(this);\n this.handleDragLeave = this.handleDragLeave.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleClick = this.handleClick.bind(this);\n this.handleFileInput = this.handleFileInput.bind(this);\n this.chooseFile = this.chooseFile.bind(this);\n }\n handleDrop (event) {\n event.preventDefault();\n this.setState({dragOver: false});\n // if dropped items aren't files, reject them\n const dt = event.dataTransfer;\n if (dt.items) {\n if (dt.items[0].kind === 'file') {\n const droppedFile = dt.items[0].getAsFile();\n this.chooseFile(droppedFile);\n }\n }\n }\n handleDragOver (event) {\n event.preventDefault();\n }\n handleDragEnd (event) {\n var dt = event.dataTransfer;\n if (dt.items) {\n for (var i = 0; i < dt.items.length; i++) {\n dt.items.remove(i);\n }\n } else {\n event.dataTransfer.clearData();\n }\n }\n handleDragEnter () {\n this.setState({dragOver: true, dimPreview: true});\n }\n handleDragLeave () {\n this.setState({dragOver: false, dimPreview: false});\n }\n handleMouseEnter () {\n this.setState({mouseOver: true, dimPreview: true});\n }\n handleMouseLeave () {\n this.setState({mouseOver: false, dimPreview: false});\n }\n handleClick (event) {\n event.preventDefault();\n document.getElementById('file_input').click();\n }\n handleFileInput (event) {\n event.preventDefault();\n const fileList = event.target.files;\n this.chooseFile(fileList[0]);\n }\n chooseFile (file) {\n if (file) {\n try {\n validateFile(file); // validate the file's name, type, and size\n } catch (error) {\n return this.props.setFileError(error.message);\n }\n // stage it so it will be ready when the publish button is clicked\n this.props.selectFile(file);\n }\n }\n render () {\n return (\n
\n
\n \n
\n
\n {this.props.file ? (\n
\n \n
\n { this.state.dragOver ? (\n
\n

Drop it.

\n
\n ) : (\n null\n )}\n { this.state.mouseOver ? (\n
\n

{this.props.fileError}

\n

Drag & drop image or video here to publish

\n

OR

\n

CHOOSE FILE

\n
\n ) : (\n null\n )}\n
\n
\n ) : (\n
\n { this.state.dragOver ? (\n
\n

Drop it.

\n
\n ) : (\n
\n

{this.props.fileError}

\n

Drag & drop image or video here to publish

\n

OR

\n

CHOOSE FILE

\n
\n )}\n
\n )}\n
\n
\n );\n }\n};\n\nexport default Dropzone;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/Dropzone/view.jsx","module.exports = {\n validateFile (file) {\n if (!file) {\n throw new Error('no file provided');\n }\n if (/'/.test(file.name)) {\n throw new Error('apostrophes are not allowed in the file name');\n }\n // validate size and type\n switch (file.type) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n if (file.size > 10000000) {\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n throw new Error('Sorry, GIFs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n throw new Error(file.type + ' is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/file.js","import React from 'react';\nimport PropTypes from 'prop-types';\n\nclass PublishPreview extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n imgSource : '',\n defaultThumbnail: '/assets/img/video_thumb_default.png',\n };\n }\n componentDidMount () {\n this.setPreviewImageSource(this.props.file);\n }\n componentWillReceiveProps (newProps) {\n if (newProps.file !== this.props.file) {\n this.setPreviewImageSource(newProps.file);\n }\n if (newProps.thumbnail !== this.props.thumbnail) {\n if (newProps.thumbnail) {\n this.setPreviewImageSourceFromFile(newProps.thumbnail);\n } else {\n this.setState({imgSource: this.state.defaultThumbnail});\n }\n }\n }\n setPreviewImageSourceFromFile (file) {\n const previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = () => {\n this.setState({imgSource: previewReader.result});\n };\n }\n setPreviewImageSource (file) {\n if (file.type !== 'video/mp4') {\n this.setPreviewImageSourceFromFile(file);\n } else {\n if (this.props.thumbnail) {\n this.setPreviewImageSourceFromFile(this.props.thumbnail);\n }\n this.setState({imgSource: this.state.defaultThumbnail});\n }\n }\n render () {\n return (\n \n );\n }\n};\n\nPublishPreview.propTypes = {\n dimPreview: PropTypes.bool.isRequired,\n file : PropTypes.object.isRequired,\n thumbnail : PropTypes.object,\n};\n\nexport default PublishPreview;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/PublishPreview/index.jsx","import {connect} from 'react-redux';\nimport {clearFile, startPublish} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, publish }) => {\n return {\n file: publish.file,\n };\n};\n\nconst mapDispatchToProps = {\n clearFile,\n startPublish,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDetails/index.js","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport Dropzone from 'containers/Dropzone';\nimport PublishTitleInput from 'containers/PublishTitleInput';\nimport PublishUrlInput from 'containers/PublishUrlInput';\nimport PublishThumbnailInput from 'containers/PublishThumbnailInput';\nimport PublishMetadataInputs from 'containers/PublishMetadataInputs';\nimport ChannelSelect from 'containers/ChannelSelect';\n\nclass PublishDetails extends React.Component {\n constructor (props) {\n super(props)\n this.onPublishSubmit = this.onPublishSubmit.bind(this);\n }\n onPublishSubmit () {\n this.props.startPublish(this.props.history);\n }\n render () {\n return (\n
\n
\n \n
\n {/* left column */}\n
\n
\n \n
\n
\n {/* right column */}\n
\n
\n
\n \n
\n
\n \n
\n { (this.props.file.type === 'video/mp4') && (\n
\n \n
\n )}\n
\n \n
\n
\n \n
\n
\n \n
\n
\n

By clicking 'Publish', you affirm that you have the rights to publish this content to the LBRY network, and that you understand the properties of publishing it to a decentralized, user-controlled network. Read more.

\n
\n
\n
\n
\n );\n }\n};\n\nexport default withRouter(PublishDetails);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDetails/view.jsx","import {connect} from 'react-redux';\nimport {updateMetadata} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n title: publish.metadata.title,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onMetadataChange: (name, value) => {\n dispatch(updateMetadata(name, value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTitleInput/index.js","import React from 'react';\n\nclass PublishTitleInput extends React.Component {\n constructor (props) {\n super(props);\n this.handleInput = this.handleInput.bind(this);\n }\n handleInput (e) {\n const name = e.target.name;\n const value = e.target.value;\n this.props.onMetadataChange(name, value);\n }\n render () {\n return (\n \n );\n }\n}\n\nexport default PublishTitleInput;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTitleInput/view.jsx","import {updateClaim, updateError} from 'actions/publish';\nimport {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, publish }) => {\n return {\n loggedInChannelName : channel.loggedInChannel.name,\n loggedInChannelShortId: channel.loggedInChannel.shortId,\n fileName : publish.file.name,\n publishInChannel : publish.publishInChannel,\n selectedChannel : publish.selectedChannel,\n claim : publish.claim,\n urlError : publish.error.url,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onClaimChange: (value) => {\n dispatch(updateClaim(value));\n dispatch(updateError('publishSubmit', null));\n },\n onUrlError: (value) => {\n dispatch(updateError('url', value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishUrlInput/index.js","import React from 'react';\nimport request from 'utils/request';\nimport UrlMiddle from 'components/PublishUrlMiddleDisplay';\n\nclass PublishUrlInput extends React.Component {\n constructor (props) {\n super(props);\n this.handleInput = this.handleInput.bind(this);\n }\n componentDidMount () {\n const { claim, fileName } = this.props;\n if (!claim) {\n this.setClaimName(fileName);\n }\n }\n componentWillReceiveProps ({ claim, fileName }) {\n // if a new file was chosen, update the claim name\n if (fileName !== this.props.fileName) {\n return this.setClaimName(fileName);\n }\n // if the claim has updated, check its availability\n if (claim !== this.props.claim) {\n this.validateClaim(claim);\n }\n }\n handleInput (event) {\n let value = event.target.value;\n value = this.cleanseInput(value);\n // update the state\n this.props.onClaimChange(value);\n }\n cleanseInput (input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n setClaimName (fileName) {\n const fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.'));\n const cleanClaimName = this.cleanseInput(fileNameWithoutEnding);\n this.props.onClaimChange(cleanClaimName);\n }\n validateClaim (claim) {\n if (!claim) {\n return this.props.onUrlError('Enter a url above');\n }\n request(`/api/claim/availability/${claim}`)\n .then(() => {\n this.props.onUrlError(null);\n })\n .catch((error) => {\n this.props.onUrlError(error.message);\n });\n }\n render () {\n const { claim, loggedInChannelName, loggedInChannelShortId, publishInChannel, selectedChannel, urlError } = this.props;\n return (\n
\n
\n spee.ch / \n \n \n { (claim && !urlError) && {'\\u2713'} }\n { urlError && {'\\u2716'} }\n
\n
\n { urlError ? (\n

{urlError}

\n ) : (\n

Choose a custom url

\n )}\n
\n
\n );\n }\n}\n\nexport default PublishUrlInput;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishUrlInput/view.jsx","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction UrlMiddle ({publishInChannel, selectedChannel, loggedInChannelName, loggedInChannelShortId}) {\n if (publishInChannel) {\n if (selectedChannel === loggedInChannelName) {\n return {loggedInChannelName}:{loggedInChannelShortId} /;\n }\n return @channelSelect a channel below /;\n }\n return (\n xyzThis will be a random id /\n );\n}\n\nUrlMiddle.propTypes = {\n publishInChannel : PropTypes.bool.isRequired,\n loggedInChannelName : PropTypes.string,\n loggedInChannelShortId: PropTypes.string,\n};\n\nexport default UrlMiddle;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/PublishUrlMiddleDisplay/index.jsx","import { connect } from 'react-redux';\nimport { onNewThumbnail } from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish: { file } }) => {\n return {\n file,\n };\n};\n\nconst mapDispatchToProps = {\n onNewThumbnail,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishThumbnailInput/index.js","import React from 'react';\n\nfunction dataURItoBlob(dataURI) {\n // convert base64/URLEncoded data component to raw binary data held in a string\n let byteString = atob(dataURI.split(',')[1]);\n // separate out the mime component\n let mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n // write the bytes of the string to a typed array\n let ia = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n return new Blob([ia], {type: mimeString});\n}\n\nclass PublishThumbnailInput extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n videoSource : null,\n error : null,\n sliderMinRange: 1,\n sliderMaxRange: null,\n sliderValue : null,\n };\n this.handleVideoLoadedData = this.handleVideoLoadedData.bind(this);\n this.handleSliderChange = this.handleSliderChange.bind(this);\n this.createThumbnail = this.createThumbnail.bind(this);\n }\n componentDidMount () {\n const { file } = this.props;\n this.setVideoSource(file);\n }\n componentWillReceiveProps (nextProps) {\n // if file changes\n if (nextProps.file && nextProps.file !== this.props.file) {\n const { file } = nextProps;\n this.setVideoSource(file);\n };\n }\n setVideoSource (file) {\n const previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = () => {\n const dataUri = previewReader.result;\n const blob = dataURItoBlob(dataUri);\n const videoSource = URL.createObjectURL(blob);\n this.setState({ videoSource });\n };\n }\n handleVideoLoadedData (event) {\n const duration = event.target.duration;\n const totalMinutes = Math.floor(duration / 60);\n const totalSeconds = Math.floor(duration % 60);\n // set the slider\n this.setState({\n sliderMaxRange: duration * 100,\n sliderValue : duration * 100 / 2,\n totalMinutes,\n totalSeconds,\n });\n // update the current time of the video\n let video = document.getElementById('video-thumb-player');\n video.currentTime = duration / 2;\n }\n handleSliderChange (event) {\n const value = parseInt(event.target.value);\n // update the slider value\n this.setState({\n sliderValue: value,\n });\n // update the current time of the video\n let video = document.getElementById('video-thumb-player');\n video.currentTime = value / 100;\n }\n createThumbnail () {\n // take a snapshot\n let video = document.getElementById('video-thumb-player');\n let canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);\n const dataUrl = canvas.toDataURL();\n const blob = dataURItoBlob(dataUrl);\n const snapshot = new File([blob], `thumbnail.png`, {\n type: 'image/png',\n });\n // set the thumbnail in redux store\n if (snapshot) {\n this.props.onNewThumbnail(snapshot);\n }\n }\n render () {\n const { error, videoSource, sliderMinRange, sliderMaxRange, sliderValue, totalMinutes, totalSeconds } = this.state;\n return (\n
\n \n \n {\n sliderValue ? (\n
\n
\n 0'00\"\n {totalMinutes}'{totalSeconds}\"\n
\n
\n \n
\n
\n ) : (\n

loading...

\n )\n }\n { error ? (\n

{error}

\n ) : (\n

Use slider to set thumbnail

\n )}\n
\n );\n }\n}\n\nexport default PublishThumbnailInput;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishThumbnailInput/view.jsx","import {connect} from 'react-redux';\nimport {updateMetadata, toggleMetadataInputs} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n showMetadataInputs: publish.showMetadataInputs,\n description : publish.metadata.description,\n license : publish.metadata.license,\n nsfw : publish.metadata.nsfw,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onMetadataChange: (name, value) => {\n dispatch(updateMetadata(name, value));\n },\n onToggleMetadataInputs: (value) => {\n dispatch(toggleMetadataInputs(value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishMetadataInputs/index.js","import React from 'react';\nimport ExpandingTextArea from 'components/ExpandingTextArea';\n\nclass PublishMetadataInputs extends React.Component {\n constructor (props) {\n super(props);\n this.toggleShowInputs = this.toggleShowInputs.bind(this);\n this.handleInput = this.handleInput.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n }\n toggleShowInputs () {\n this.props.onToggleMetadataInputs(!this.props.showMetadataInputs);\n }\n handleInput (event) {\n const target = event.target;\n const value = target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n this.props.onMetadataChange(name, value);\n }\n handleSelect (event) {\n const name = event.target.name;\n const selectedOption = event.target.selectedOptions[0].value;\n this.props.onMetadataChange(name, selectedOption);\n }\n render () {\n return (\n
\n {this.props.showMetadataInputs && (\n
\n
\n
\n \n
\n \n
\n
\n\n
\n
\n \n
\n \n
\n
\n\n
\n
\n \n
\n \n
\n
\n
\n )}\n \n
\n );\n }\n}\n\nexport default PublishMetadataInputs;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishMetadataInputs/view.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nclass ExpandingTextarea extends Component {\n constructor (props) {\n super(props);\n this._handleChange = this._handleChange.bind(this);\n }\n componentDidMount () {\n this.adjustTextarea({});\n }\n _handleChange (event) {\n const { onChange } = this.props;\n if (onChange) onChange(event);\n this.adjustTextarea(event);\n }\n adjustTextarea ({ target = this.el }) {\n target.style.height = 0;\n target.style.height = `${target.scrollHeight}px`;\n }\n render () {\n const { ...rest } = this.props;\n return (\n this.el = x}\n onChange={this._handleChange}\n />\n );\n }\n}\n\nExpandingTextarea.propTypes = {\n onChange: PropTypes.func,\n};\n\nexport default ExpandingTextarea;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/ExpandingTextArea/index.jsx","import {connect} from 'react-redux';\nimport {setPublishInChannel, updateSelectedChannel, updateError} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, publish }) => {\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n publishInChannel : publish.publishInChannel,\n selectedChannel : publish.selectedChannel,\n channelError : publish.error.channel,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onPublishInChannelChange: (value) => {\n dispatch(updateError('channel', null));\n dispatch(setPublishInChannel(value));\n },\n onChannelSelect: (value) => {\n dispatch(updateError('channel', null));\n dispatch(updateSelectedChannel(value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelSelect/index.js","import React from 'react';\nimport ChannelLoginForm from 'containers/ChannelLoginForm';\nimport ChannelCreateForm from 'containers/ChannelCreateForm';\nimport * as states from 'constants/publish_channel_select_states';\n\nclass ChannelSelect extends React.Component {\n constructor (props) {\n super(props);\n this.toggleAnonymousPublish = this.toggleAnonymousPublish.bind(this);\n this.handleSelection = this.handleSelection.bind(this);\n }\n toggleAnonymousPublish (event) {\n const value = event.target.value;\n if (value === 'anonymous') {\n this.props.onPublishInChannelChange(false);\n } else {\n this.props.onPublishInChannelChange(true);\n }\n }\n handleSelection (event) {\n const selectedOption = event.target.selectedOptions[0].value;\n this.props.onChannelSelect(selectedOption);\n }\n render () {\n return (\n
\n
\n
\n \n \n
\n
\n \n \n
\n { this.props.channelError ? (\n

{this.props.channelError}

\n ) : (\n

Publish anonymously or in a channel

\n )}\n
\n { this.props.publishInChannel && (\n
\n
\n \n
\n \n
\n { (this.props.selectedChannel === states.LOGIN) && }\n { (this.props.selectedChannel === states.CREATE) && }\n
\n )}\n
\n );\n }\n}\n\nexport default ChannelSelect;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelSelect/view.jsx","import React from 'react';\nimport request from 'utils/request';\n\nclass ChannelLoginForm extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n error : null,\n name : '',\n password: '',\n };\n this.handleInput = this.handleInput.bind(this);\n this.loginToChannel = this.loginToChannel.bind(this);\n }\n handleInput (event) {\n const name = event.target.name;\n const value = event.target.value;\n this.setState({[name]: value});\n }\n loginToChannel (event) {\n event.preventDefault();\n const params = {\n method : 'POST',\n body : JSON.stringify({username: this.state.name, password: this.state.password}),\n headers: new Headers({\n 'Content-Type': 'application/json',\n }),\n credentials: 'include',\n };\n request('login', params)\n .then(({success, channelName, shortChannelId, channelClaimId, message}) => {\n if (success) {\n this.props.onChannelLogin(channelName, shortChannelId, channelClaimId);\n } else {\n this.setState({'error': message});\n };\n })\n .catch(error => {\n if (error.message) {\n this.setState({'error': error.message});\n } else {\n this.setState({'error': error});\n }\n });\n }\n render () {\n return (\n
\n
\n
\n \n
\n
\n @\n \n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n { this.state.error ? (\n

{this.state.error}

\n ) : (\n

Enter the name and password for your channel

\n )}\n
\n \n
\n
\n );\n }\n}\n\nexport default ChannelLoginForm;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelLoginForm/view.jsx","import React from 'react';\nimport ProgressBar from 'components/ProgressBar';\nimport request from 'utils/request';\n\nclass ChannelCreateForm extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n error : null,\n channel : '',\n password: '',\n status : null,\n };\n this.handleChannelInput = this.handleChannelInput.bind(this);\n this.handleInput = this.handleInput.bind(this);\n this.createChannel = this.createChannel.bind(this);\n }\n cleanseChannelInput (input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n handleChannelInput (event) {\n let value = event.target.value;\n value = this.cleanseChannelInput(value);\n this.setState({channel: value});\n if (value) {\n this.updateIsChannelAvailable(value);\n } else {\n this.setState({error: 'Please enter a channel name'});\n }\n }\n handleInput (event) {\n const name = event.target.name;\n const value = event.target.value;\n this.setState({[name]: value});\n }\n updateIsChannelAvailable (channel) {\n const channelWithAtSymbol = `@${channel}`;\n request(`/api/channel/availability/${channelWithAtSymbol}`)\n .then(() => {\n this.setState({'error': null});\n })\n .catch((error) => {\n this.setState({'error': error.message});\n });\n }\n checkIsChannelAvailable (channel) {\n const channelWithAtSymbol = `@${channel}`;\n return request(`/api/channel/availability/${channelWithAtSymbol}`);\n }\n checkIsPasswordProvided (password) {\n return new Promise((resolve, reject) => {\n if (!password || password.length < 1) {\n return reject(new Error('Please provide a password'));\n }\n resolve();\n });\n }\n makePublishChannelRequest (username, password) {\n const params = {\n method : 'POST',\n body : JSON.stringify({username, password}),\n headers: new Headers({\n 'Content-Type': 'application/json',\n }),\n credentials: 'include',\n };\n return new Promise((resolve, reject) => {\n request('/signup', params)\n .then(result => {\n return resolve(result);\n })\n .catch(error => {\n reject(new Error(`Unfortunately, we encountered an error while creating your channel. Please let us know in Discord! ${error.message}`));\n });\n });\n }\n createChannel (event) {\n event.preventDefault();\n this.checkIsPasswordProvided(this.state.password)\n .then(() => {\n return this.checkIsChannelAvailable(this.state.channel);\n })\n .then(() => {\n this.setState({status: 'We are publishing your new channel. Sit tight...'});\n return this.makePublishChannelRequest(this.state.channel, this.state.password);\n })\n .then(result => {\n this.setState({status: null});\n this.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId);\n })\n .catch((error) => {\n if (error.message) {\n this.setState({'error': error.message, status: null});\n } else {\n this.setState({'error': error, status: null});\n };\n });\n }\n render () {\n return (\n
\n { !this.state.status ? (\n
\n
\n
\n \n
\n
\n @\n \n { (this.state.channel && !this.state.error) && {'\\u2713'} }\n { this.state.error && {'\\u2716'} }\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n {this.state.error ? (\n

{this.state.error}

\n ) : (\n

Choose a name and password for your channel

\n )}\n
\n \n
\n
\n ) : (\n
\n

{this.state.status}

\n \n
\n )}\n
\n );\n }\n}\n\nexport default ChannelCreateForm;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelCreateForm/view.jsx","import React from 'react';\n\nconst ActiveStatusBar = () => {\n return | ;\n};\n\nexport default ActiveStatusBar;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/ActiveStatusBar/index.jsx","import React from 'react';\n\nconst InactiveStatusBar = () => {\n return | ;\n};\n\nexport default InactiveStatusBar;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/InactiveStatusBar/index.jsx","import {connect} from 'react-redux';\nimport {clearFile} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n status : publish.status.status,\n message: publish.status.message,\n };\n};\n\nconst mapDispatchToProps = {\n clearFile,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishStatus/index.js","import React from 'react';\nimport ProgressBar from 'components/ProgressBar';\nimport * as publishStates from 'constants/publish_claim_states';\n\nclass PublishStatus extends React.Component {\n render () {\n const { status, message, clearFile } = this.props;\n return (\n
\n {status === publishStates.LOAD_START &&\n
\n

File is loading to server

\n

0%

\n
\n }\n {status === publishStates.LOADING &&\n
\n
\n

File is loading to server

\n

{message}

\n
\n
\n }\n {status === publishStates.PUBLISHING &&\n
\n

Upload complete. Your file is now being published on the blockchain...

\n \n

Curious what magic is happening here? Learn more.

\n
\n }\n {status === publishStates.SUCCESS &&\n
\n

Your publish is complete! You are being redirected to it now.

\n

If you are not automatically redirected, click here.

\n
\n }\n {status === publishStates.FAILED &&\n
\n

Something went wrong...

\n

{message}

\n

For help, post the above error text in the #speech channel on the lbry discord

\n \n
\n }\n
\n );\n }\n};\n\nexport default PublishStatus;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishStatus/view.jsx","export const LOAD_START = 'LOAD_START';\nexport const LOADING = 'LOADING';\nexport const PUBLISHING = 'PUBLISHING';\nexport const SUCCESS = 'SUCCESS';\nexport const FAILED = 'FAILED';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/publish_claim_states.js","import {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n message: publish.disabledMessage,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDisabledMessage/index.js","import React from 'react';\n\nclass PublishDisabledMessage extends React.Component {\n render () {\n const message = this.props.message;\n console.log('this.props.message:', message);\n return (\n
\n

Publishing is currently disabled.

\n

{message}

\n
\n );\n }\n}\n\nexport default PublishDisabledMessage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDisabledMessage/view.jsx","import React from 'react';\nimport NavBar from 'containers/NavBar';\nimport SEO from 'components/SEO';\n\nclass AboutPage extends React.Component {\n render () {\n return (\n
\n \n \n
\n
\n
\n

Spee.ch is an open-source project. Please contribute to the existing site, or fork it and make your own.

\n

TWITTER

\n

GITHUB

\n

DISCORD CHANNEL

\n

DOCUMENTATION

\n
\n
\n
\n

Spee.ch is a media-hosting site that reads from and publishes content to the LBRY blockchain.

\n

Spee.ch is a hosting service, but with the added benefit that it stores your content on a decentralized network of computers -- the LBRY network. This means that your images are stored in multiple locations without a single point of failure.

\n

Contribute

\n

If you have an idea for your own spee.ch-like site on top of LBRY, fork our github repo and go to town!

\n

If you want to improve spee.ch, join our discord channel or solve one of our github issues.

\n
\n
\n
\n
\n );\n }\n};\n\nexport default AboutPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/AboutPage/index.jsx","import {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ channel }) => {\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/LoginPage/index.js","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport SEO from 'components/SEO';\nimport NavBar from 'containers/NavBar';\nimport ChannelLoginForm from 'containers/ChannelLoginForm';\nimport ChannelCreateForm from 'containers/ChannelCreateForm';\n\nclass LoginPage extends React.Component {\n componentWillReceiveProps (newProps) {\n // re-route the user to the homepage if the user is logged in\n if (newProps.loggedInChannelName !== this.props.loggedInChannelName) {\n this.props.history.push(`/`);\n }\n }\n render () {\n return (\n
\n \n \n
\n
\n
\n

Channels allow you to publish and group content under an identity. You can create a channel for yourself, or share one with like-minded friends. You can create 1 channel, or 100, so whether you're documenting important events, or making a public repository for cat gifs (password: '1234'), try creating a channel for it!

\n
\n
\n
\n

Log in to an existing channel:

\n \n

Create a brand new channel:

\n \n
\n
\n
\n
\n );\n }\n};\n\nexport default withRouter(LoginPage);\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/LoginPage/view.jsx","import { connect } from 'react-redux';\nimport { onHandleShowPageUri } from 'actions/show';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n return {\n error : show.request.error,\n requestType: show.request.type,\n };\n};\n\nconst mapDispatchToProps = {\n onHandleShowPageUri,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/ShowPage/index.js","import React from 'react';\nimport ErrorPage from 'pages/ErrorPage';\nimport ShowAssetLite from 'containers/ShowAssetLite';\nimport ShowAssetDetails from 'containers/ShowAssetDetails';\nimport ShowChannel from 'containers/ShowChannel';\n\nimport { CHANNEL, ASSET_LITE, ASSET_DETAILS } from 'constants/show_request_types';\n\nclass ShowPage extends React.Component {\n componentDidMount () {\n this.props.onHandleShowPageUri(this.props.match.params);\n }\n componentWillReceiveProps (nextProps) {\n if (nextProps.match.params !== this.props.match.params) {\n this.props.onHandleShowPageUri(nextProps.match.params);\n }\n }\n render () {\n const { error, requestType } = this.props;\n if (error) {\n return (\n \n );\n }\n switch (requestType) {\n case CHANNEL:\n return ;\n case ASSET_LITE:\n return ;\n case ASSET_DETAILS:\n return ;\n default:\n return

loading...

;\n }\n }\n};\n\nexport default ShowPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/ShowPage/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select request info\n const requestId = show.request.id;\n // select asset info\n let asset;\n const request = show.requestList[requestId] || null;\n const assetList = show.assetList;\n if (request && assetList) {\n const assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetLite/index.js","import React from 'react';\nimport SEO from 'components/SEO';\nimport { Link } from 'react-router-dom';\nimport AssetDisplay from 'containers/AssetDisplay';\n\nclass ShowLite extends React.Component {\n render () {\n const { asset } = this.props;\n if (asset) {\n const { name, claimId } = asset.claimData;\n return (\n
\n \n \n hosted\n via Spee.ch\n
\n );\n }\n return (\n
\n

loading asset data...

\n
\n );\n }\n};\n\nexport default ShowLite;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetLite/view.jsx","import React from 'react';\nimport ProgressBar from 'components/ProgressBar';\nimport { LOCAL_CHECK, UNAVAILABLE, ERROR, AVAILABLE } from 'constants/asset_display_states';\n\nclass AssetDisplay extends React.Component {\n componentDidMount () {\n const { asset: { claimData: { name, claimId } } } = this.props;\n this.props.onFileRequest(name, claimId);\n }\n render () {\n const { status, error, asset: { claimData: { name, claimId, contentType, fileExt, thumbnail } } } = this.props;\n return (\n
\n {(status === LOCAL_CHECK) &&\n
\n

Checking to see if Spee.ch has your asset locally...

\n
\n }\n {(status === UNAVAILABLE) &&\n
\n

Sit tight, we're searching the LBRY blockchain for your asset!

\n \n

Curious what magic is happening here? Learn more.

\n
\n }\n {(status === ERROR) &&\n
\n

Unfortunately, we couldn't download your asset from LBRY. You can help us out by sharing the below error message in the LBRY discord.

\n

{error}

\n
\n }\n {(status === AVAILABLE) &&\n (() => {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n return (\n \n );\n case 'image/gif':\n return (\n \n );\n case 'video/mp4':\n return (\n \n );\n default:\n return (\n

Unsupported file type

\n );\n }\n })()\n }\n
\n );\n }\n};\n\nexport default AssetDisplay;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetDisplay/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select request info\n const requestId = show.request.id;\n // select asset info\n let asset;\n const request = show.requestList[requestId] || null;\n const assetList = show.assetList;\n if (request && assetList) {\n const assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetDetails/index.js","import React from 'react';\nimport SEO from 'components/SEO';\nimport NavBar from 'containers/NavBar';\nimport ErrorPage from 'pages/ErrorPage';\nimport AssetTitle from 'containers/AssetTitle';\nimport AssetDisplay from 'containers/AssetDisplay';\nimport AssetInfo from 'containers/AssetInfo';\n\nclass ShowAssetDetails extends React.Component {\n render () {\n const { asset } = this.props;\n if (asset) {\n const { claimData: { name } } = asset;\n return (\n
\n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n );\n };\n return (\n \n );\n }\n};\n\nexport default ShowAssetDetails;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetDetails/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\nimport { selectAsset } from 'selectors/show';\n\nconst mapStateToProps = ({ show }) => {\n const { claimData: { title } } = selectAsset(show);\n return {\n title,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetTitle/index.js","import React from 'react';\n\nconst AssetTitle = ({ title }) => {\n return (\n
\n {title}\n
\n );\n};\n\nexport default AssetTitle;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetTitle/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\nimport { selectAsset } from 'selectors/show';\n\nconst mapStateToProps = ({ show }) => {\n // select asset\n const asset = selectAsset(show);\n // return props\n return {\n asset,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetInfo/index.js","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nclass AssetInfo extends React.Component {\n constructor (props) {\n super(props);\n this.copyToClipboard = this.copyToClipboard.bind(this);\n }\n copyToClipboard (event) {\n var elementToCopy = event.target.dataset.elementtocopy;\n var element = document.getElementById(elementToCopy);\n element.select();\n try {\n document.execCommand('copy');\n } catch (err) {\n this.setState({error: 'Oops, unable to copy'});\n }\n }\n render () {\n const { asset: { shortId, claimData : { channelName, certificateId, description, name, claimId, fileExt, contentType, thumbnail, host } } } = this.props;\n return (\n
\n {channelName &&\n
\n
\n Channel:\n
\n
\n {channelName}\n
\n
\n }\n\n {description &&\n
\n {description}\n
\n }\n\n
\n
\n
\n Share:\n
\n
\n \n twitter\n facebook\n tumblr\n reddit\n
\n
\n
\n
\n\n
\n \n );\n }\n};\n\nexport default AssetInfo;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetInfo/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select request info\n const requestId = show.request.id;\n // select request\n const previousRequest = show.requestList[requestId] || null;\n // select channel\n let channel;\n if (previousRequest) {\n const channelKey = previousRequest.key;\n channel = show.channelList[channelKey] || null;\n }\n return {\n channel,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowChannel/index.js","import React from 'react';\nimport SEO from 'components/SEO';\nimport ErrorPage from 'pages/ErrorPage';\nimport NavBar from 'containers/NavBar';\nimport ChannelClaimsDisplay from 'containers/ChannelClaimsDisplay';\n\nclass ShowChannel extends React.Component {\n render () {\n const { channel } = this.props;\n if (channel) {\n const { name, longId, shortId } = channel;\n return (\n
\n \n \n
\n
\n

channel name: {name}

\n

full channel id: {longId}

\n

short channel id: {shortId}

\n
\n
\n \n
\n
\n
\n );\n };\n return (\n \n );\n }\n};\n\nexport default ShowChannel;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowChannel/view.jsx","import { connect } from 'react-redux';\nimport { onUpdateChannelClaims } from 'actions/show';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select channel key\n const request = show.requestList[show.request.id];\n const channelKey = request.key;\n // select channel claims\n const channel = show.channelList[channelKey] || null;\n // return props\n return {\n channelKey,\n channel,\n };\n};\n\nconst mapDispatchToProps = {\n onUpdateChannelClaims,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelClaimsDisplay/index.js","import React from 'react';\nimport AssetPreview from 'components/AssetPreview';\n\nclass ChannelClaimsDisplay extends React.Component {\n constructor (props) {\n super(props);\n this.showNextResultsPage = this.showNextResultsPage.bind(this);\n this.showPreviousResultsPage = this.showPreviousResultsPage.bind(this);\n }\n showPreviousResultsPage () {\n const { channel: { claimsData: { currentPage } } } = this.props;\n const previousPage = parseInt(currentPage) - 1;\n this.showNewPage(previousPage);\n }\n showNextResultsPage () {\n const { channel: { claimsData: { currentPage } } } = this.props;\n const nextPage = parseInt(currentPage) + 1;\n this.showNewPage(nextPage);\n }\n showNewPage (page) {\n const { channelKey, channel: { name, longId } } = this.props;\n this.props.onUpdateChannelClaims(channelKey, name, longId, page);\n }\n render () {\n const { channel: { claimsData: { claims, currentPage, totalPages } } } = this.props;\n return (\n
\n {(claims.length > 0) ? (\n
\n {claims.map((claim, index) => )}\n
\n {(currentPage > 1) &&\n \n }\n {(currentPage < totalPages) &&\n \n }\n
\n
\n ) : (\n

There are no claims in this channel

\n )}\n
\n );\n }\n};\n\nexport default ChannelClaimsDisplay;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelClaimsDisplay/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({site: {defaults: { defaultThumbnail }}}) => {\n return {\n defaultThumbnail,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/AssetPreview/index.js","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nconst AssetPreview = ({ defaultThumbnail, claimData: { name, claimId, fileExt, contentType, thumbnail } }) => {\n const directSourceLink = `${claimId}/${name}.${fileExt}`;\n const showUrlLink = `/${claimId}/${name}`;\n return (\n
\n \n {(() => {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n case 'image/gif':\n return (\n \n );\n case 'video/mp4':\n return (\n \n );\n default:\n return (\n

unsupported file type

\n );\n }\n })()}\n \n
\n );\n};\n\nexport default AssetPreview;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/AssetPreview/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ site: { host, title } }) => {\n return {\n host,\n title,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/FourOhFourPage/index.jsx","import React from 'react';\nimport NavBar from 'containers/NavBar';\nimport Helmet from 'react-helmet';\n\nclass FourOhForPage extends React.Component {\n render () {\n const {title, host} = this.props;\n return (\n
\n \n {title} - 404\n \n \n \n
\n

404

\n

That page does not exist

\n
\n
\n );\n }\n};\n\nexport default FourOhForPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/FourOhFourPage/view.jsx","const { sendGAServeEvent } = require('../helpers/googleAnalytics');\nconst { determineResponseType, flipClaimNameAndIdForBackwardsCompatibility, logRequestData, getClaimIdAndServeAsset } = require('../helpers/serveHelpers.js');\nconst lbryUri = require('../helpers/lbryUri.js');\nconst handleShowRender = require('../helpers/handleShowRender.jsx');\nconst SERVE = 'SERVE';\n\nmodule.exports = (app) => {\n // route to serve a specific asset using the channel or claim id\n app.get('/:identifier/:claim', (req, res) => {\n const { headers, ip, originalUrl, params } = req;\n // decide if this is a show request\n let hasFileExtension;\n try {\n ({ hasFileExtension } = lbryUri.parseModifier(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n let responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n let claimName;\n try {\n ({ claimName } = lbryUri.parseClaim(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n // parse the identifier\n let isChannel, channelName, channelClaimId, claimId;\n try {\n ({ isChannel, channelName, channelClaimId, claimId } = lbryUri.parseIdentifier(params.identifier));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n if (!isChannel) {\n [claimId, claimName] = flipClaimNameAndIdForBackwardsCompatibility(claimId, claimName);\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, channelName, claimId);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res);\n });\n // route to serve the winning asset at a claim or a channel page\n app.get('/:claim', (req, res) => {\n const { headers, ip, originalUrl, params } = req;\n // decide if this is a show request\n let hasFileExtension;\n try {\n ({ hasFileExtension } = lbryUri.parseModifier(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n let responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n let claimName;\n try {\n ({claimName} = lbryUri.parseClaim(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, null, null);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(null, null, claimName, null, originalUrl, ip, res);\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/asset-routes.js","const logger = require('winston');\nconst { getClaimId, getLocalFileRecord } = require('../controllers/serveController.js');\nconst { handleErrorResponse } = require('./errorHandlers.js');\n\nconst SERVE = 'SERVE';\nconst SHOW = 'SHOW';\nconst NO_FILE = 'NO_FILE';\nconst NO_CHANNEL = 'NO_CHANNEL';\nconst NO_CLAIM = 'NO_CLAIM';\n\nfunction clientAcceptsHtml ({accept}) {\n return accept && accept.match(/text\\/html/);\n};\n\nfunction requestIsFromBrowser (headers) {\n return headers['user-agent'] && headers['user-agent'].match(/Mozilla/);\n};\n\nfunction clientWantsAsset ({accept, range}) {\n const imageIsWanted = accept && accept.match(/image\\/.*/) && !accept.match(/text\\/html/) && !accept.match(/text\\/\\*/);\n const videoIsWanted = accept && range;\n return imageIsWanted || videoIsWanted;\n};\n\nfunction isValidClaimId (claimId) {\n return ((claimId.length === 40) && !/[^A-Za-z0-9]/g.test(claimId));\n};\n\nfunction isValidShortId (claimId) {\n return claimId.length === 1; // it should really evaluate the short url itself\n};\n\nfunction isValidShortIdOrClaimId (input) {\n return (isValidClaimId(input) || isValidShortId(input));\n};\n\nfunction serveAssetToClient (claimId, name, res) {\n return getLocalFileRecord(claimId, name)\n .then(fileRecord => {\n // check that a local record was found\n if (fileRecord === NO_FILE) {\n return res.status(307).redirect(`/api/claim/get/${name}/${claimId}`);\n }\n // serve the file\n const {filePath, fileType} = fileRecord;\n logger.verbose(`serving file: ${filePath}`);\n const sendFileOptions = {\n headers: {\n 'X-Content-Type-Options': 'nosniff',\n 'Content-Type' : fileType || 'image/jpeg',\n },\n };\n res.status(200).sendFile(filePath, sendFileOptions);\n })\n .catch(error => {\n throw error;\n });\n};\n\nmodule.exports = {\n getClaimIdAndServeAsset (channelName, channelClaimId, claimName, claimId, originalUrl, ip, res) {\n // get the claim Id and then serve the asset\n getClaimId(channelName, channelClaimId, claimName, claimId)\n .then(fullClaimId => {\n if (fullClaimId === NO_CLAIM) {\n return res.status(404).json({success: false, message: 'no claim id could be found'});\n } else if (fullClaimId === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'no channel id could be found'});\n }\n serveAssetToClient(fullClaimId, claimName, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'success');\n })\n .catch(error => {\n handleErrorResponse(originalUrl, ip, error, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'fail');\n });\n },\n determineResponseType (hasFileExtension, headers) {\n let responseType;\n if (hasFileExtension) {\n responseType = SERVE; // assume a serve request if file extension is present\n if (clientAcceptsHtml(headers)) { // if the request comes from a browser, change it to a show request\n responseType = SHOW;\n }\n } else {\n responseType = SHOW;\n if (clientWantsAsset(headers) && requestIsFromBrowser(headers)) { // this is in case someone embeds a show url\n logger.debug('Show request came from browser but wants an image/video. Changing response to serve...');\n responseType = SERVE;\n }\n }\n return responseType;\n },\n flipClaimNameAndIdForBackwardsCompatibility (identifier, name) {\n // this is a patch for backwards compatability with '/name/claim_id' url format\n if (isValidShortIdOrClaimId(name) && !isValidShortIdOrClaimId(identifier)) {\n const tempName = name;\n name = identifier;\n identifier = tempName;\n }\n return [identifier, name];\n },\n logRequestData (responseType, claimName, channelName, claimId) {\n logger.debug('responseType ===', responseType);\n logger.debug('claim name === ', claimName);\n logger.debug('channel name ===', channelName);\n logger.debug('claim id ===', claimId);\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/serveHelpers.js","const logger = require('winston');\n\nmodule.exports = {\n REGEXP_INVALID_CLAIM : /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS : /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR : '@',\n parseIdentifier : function (identifier) {\n logger.debug('parsing identifier:', identifier);\n const componentsRegex = new RegExp(\n '([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, value, modifierSeperator, modifier] = componentsRegex\n .exec(identifier)\n .map(match => match || null);\n logger.debug(`${proto}, ${value}, ${modifierSeperator}, ${modifier}`);\n\n // Validate and process name\n if (!value) {\n throw new Error(`Check your url. No channel name provided before \"${modifierSeperator}\"`);\n }\n const isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n const channelName = isChannel ? value : null;\n let claimId;\n if (isChannel) {\n if (!channelName) {\n throw new Error('No channel name after @.');\n }\n const nameBadChars = (channelName).match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error(`Invalid characters in channel name: ${nameBadChars.join(', ')}.`);\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n let channelClaimId;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error(`No modifier provided after separator \"${modifierSeperator}\"`);\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error(`The \"${modifierSeperator}\" modifier is not currently supported`);\n }\n }\n return {\n isChannel,\n channelName,\n channelClaimId,\n claimId,\n };\n },\n parseClaim: function (claim) {\n logger.debug('parsing name:', claim);\n const componentsRegex = new RegExp(\n '([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, claimName, modifierSeperator, modifier] = componentsRegex\n .exec(claim)\n .map(match => match || null);\n logger.debug(`${proto}, ${claimName}, ${modifierSeperator}, ${modifier}`);\n\n // Validate and process name\n if (!claimName) {\n throw new Error('No claim name provided before .');\n }\n const nameBadChars = (claimName).match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error(`Invalid characters in claim name: ${nameBadChars.join(', ')}.`);\n }\n // Validate and process modifier\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error(`No file extension provided after separator ${modifierSeperator}.`);\n }\n if (modifierSeperator !== '.') {\n throw new Error(`The ${modifierSeperator} modifier is not supported in the claim name`);\n }\n }\n // return results\n return {\n claimName,\n };\n },\n parseModifier: function (claim) {\n logger.debug('parsing modifier:', claim);\n const componentsRegex = new RegExp(\n '([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, claimName, modifierSeperator, modifier] = componentsRegex\n .exec(claim)\n .map(match => match || null);\n logger.debug(`${proto}, ${claimName}, ${modifierSeperator}, ${modifier}`);\n // Validate and process modifier\n let hasFileExtension = false;\n if (modifierSeperator) {\n hasFileExtension = true;\n }\n return {\n hasFileExtension,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/lbryUri.js","import React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport { createStore, applyMiddleware } from 'redux';\nimport Reducer from '../../client/reducers/index';\nimport { Provider } from 'react-redux';\nimport { StaticRouter } from 'react-router-dom';\nimport GAListener from '../../client/components/GAListener/index';\nimport App from '../../client/app';\nimport renderFullPage from './renderFullPage';\nimport createSagaMiddleware from 'redux-saga';\nimport { call } from 'redux-saga/effects';\nimport { handleShowPageUri } from '../../client/sagas/show_uri';\nimport { onHandleShowPageUri } from '../../client/actions/show';\n\nimport Helmet from 'react-helmet';\n\nconst returnSagaWithParams = (saga, params) => {\n return function * () {\n yield call(saga, params);\n };\n};\n\nmodule.exports = (req, res) => {\n let context = {};\n\n // create and apply middleware\n const sagaMiddleware = createSagaMiddleware();\n const middleware = applyMiddleware(sagaMiddleware);\n\n // create a new Redux store instance\n const store = createStore(Reducer, middleware);\n\n // create saga\n const action = onHandleShowPageUri(req.params);\n const saga = returnSagaWithParams(handleShowPageUri, action);\n\n // run the saga middleware\n sagaMiddleware\n .run(saga)\n .done\n .then(() => {\n // render component to a string\n const html = renderToString(\n \n \n \n \n \n \n \n );\n\n // get head tags from helmet\n const helmet = Helmet.renderStatic();\n\n // check for a redirect\n if (context.url) {\n return res.redirect(301, context.url);\n }\n\n // get the initial state from our Redux store\n const preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send(renderFullPage(helmet, html, preloadedState));\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/handleShowRender.jsx","module.exports = require(\"redux-saga\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"redux-saga\"\n// module id = 146\n// module chunks = 0","import { call, put, takeLatest } from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { onRequestError, onNewChannelRequest, onNewAssetRequest } from 'actions/show';\nimport { newAssetRequest } from 'sagas/show_asset';\nimport { newChannelRequest } from 'sagas/show_channel';\nimport lbryUri from 'utils/lbryUri';\n\nfunction * parseAndUpdateIdentifierAndClaim (modifier, claim) {\n // this is a request for an asset\n // claim will be an asset claim\n // the identifier could be a channel or a claim id\n let isChannel, channelName, channelClaimId, claimId, claimName, extension;\n try {\n ({ isChannel, channelName, channelClaimId, claimId } = lbryUri.parseIdentifier(modifier));\n ({ claimName, extension } = lbryUri.parseClaim(claim));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // trigger an new action to update the store\n if (isChannel) {\n return yield call(newAssetRequest, onNewAssetRequest(claimName, null, channelName, channelClaimId, extension));\n };\n yield call(newAssetRequest, onNewAssetRequest(claimName, claimId, null, null, extension));\n}\nfunction * parseAndUpdateClaimOnly (claim) {\n // this could be a request for an asset or a channel page\n // claim could be an asset claim or a channel claim\n let isChannel, channelName, channelClaimId;\n try {\n ({ isChannel, channelName, channelClaimId } = lbryUri.parseIdentifier(claim));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // trigger an new action to update the store\n // return early if this request is for a channel\n if (isChannel) {\n return yield call(newChannelRequest, onNewChannelRequest(channelName, channelClaimId));\n }\n // if not for a channel, parse the claim request\n let claimName, extension;\n try {\n ({claimName, extension} = lbryUri.parseClaim(claim));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n yield call(newAssetRequest, onNewAssetRequest(claimName, null, null, null, extension));\n}\n\nexport function * handleShowPageUri (action) {\n const { identifier, claim } = action.data;\n if (identifier) {\n return yield call(parseAndUpdateIdentifierAndClaim, identifier, claim);\n }\n yield call(parseAndUpdateClaimOnly, claim);\n};\n\nexport function * watchHandleShowPageUri () {\n yield takeLatest(actions.HANDLE_SHOW_URI, handleShowPageUri);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/show_uri.js","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { addRequestToRequestList, onRequestError, onRequestUpdate, addAssetToAssetList } from 'actions/show';\nimport { getLongClaimId, getShortId, getClaimData } from 'api/assetApi';\nimport { selectShowState } from 'selectors/show';\nimport { selectSiteHost } from 'selectors/site';\n\nexport function * newAssetRequest (action) {\n const { requestType, requestId, name, modifier } = action.data;\n // put an action to update the request in redux\n yield put(onRequestUpdate(requestType, requestId));\n // is this an existing request?\n // If this uri is in the request list, it's already been fetched\n const state = yield select(selectShowState);\n const host = yield select(selectSiteHost);\n if (state.requestList[requestId]) {\n return null;\n }\n // get long id && add request to request list\n let longId;\n try {\n ({data: longId} = yield call(getLongClaimId, host, name, modifier));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n const assetKey = `a#${name}#${longId}`;\n yield put(addRequestToRequestList(requestId, null, assetKey));\n // is this an existing asset?\n // If this asset is in the asset list, it's already been fetched\n if (state.assetList[assetKey]) {\n return null;\n }\n // get short Id\n let shortId;\n try {\n ({data: shortId} = yield call(getShortId, host, name, longId));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // get asset claim data\n let claimData;\n try {\n ({data: claimData} = yield call(getClaimData, host, name, longId));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // add asset to asset list\n yield put(addAssetToAssetList(assetKey, null, name, longId, shortId, claimData));\n // clear any errors in request error\n yield put(onRequestError(null));\n};\n\nexport function * watchNewAssetRequest () {\n yield takeLatest(actions.ASSET_REQUEST_NEW, newAssetRequest);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/show_asset.js","import Request from 'utils/request';\n\nexport function getLongClaimId (host, name, modifier) {\n let body = {};\n // create request params\n if (modifier) {\n if (modifier.id) {\n body['claimId'] = modifier.id;\n } else {\n body['channelName'] = modifier.channel.name;\n body['channelClaimId'] = modifier.channel.id;\n }\n }\n body['claimName'] = name;\n const params = {\n method : 'POST',\n headers: { 'Content-Type': 'application/json' },\n body : JSON.stringify(body),\n };\n // create url\n const url = `${host}/api/claim/long-id`;\n // return the request promise\n return Request(url, params);\n};\n\nexport function getShortId (host, name, claimId) {\n const url = `${host}/api/claim/short-id/${claimId}/${name}`;\n return Request(url);\n};\n\nexport function getClaimData (host, name, claimId) {\n const url = `${host}/api/claim/data/${name}/${claimId}`;\n return Request(url);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/api/assetApi.js","import {call, put, select, takeLatest} from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { addNewChannelToChannelList, addRequestToRequestList, onRequestError, onRequestUpdate, updateChannelClaims } from 'actions/show';\nimport { getChannelClaims, getChannelData } from 'api/channelApi';\nimport { selectShowState } from 'selectors/show';\nimport { selectSiteHost } from 'selectors/site';\n\nexport function * newChannelRequest (action) {\n const { requestType, requestId, channelName, channelId } = action.data;\n // put an action to update the request in redux\n yield put(onRequestUpdate(requestType, requestId));\n // is this an existing request?\n // If this uri is in the request list, it's already been fetched\n const state = yield select(selectShowState);\n const host = yield select(selectSiteHost);\n if (state.requestList[requestId]) {\n return null;\n }\n // get channel long id\n let longId, shortId;\n try {\n ({ data: {longChannelClaimId: longId, shortChannelClaimId: shortId} } = yield call(getChannelData, host, channelName, channelId));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // store the request in the channel requests list\n const channelKey = `c#${channelName}#${longId}`;\n yield put(addRequestToRequestList(requestId, null, channelKey));\n // is this an existing channel?\n // If this channel is in the channel list, it's already been fetched\n if (state.channelList[channelKey]) {\n return null;\n }\n // get channel claims data\n let claimsData;\n try {\n ({ data: claimsData } = yield call(getChannelClaims, host, longId, channelName, 1));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // store the channel data in the channel list\n yield put(addNewChannelToChannelList(channelKey, channelName, shortId, longId, claimsData));\n // clear any request errors\n yield put(onRequestError(null));\n}\n\nexport function * watchNewChannelRequest () {\n yield takeLatest(actions.CHANNEL_REQUEST_NEW, newChannelRequest);\n};\n\nfunction * getNewClaimsAndUpdateChannel (action) {\n const { channelKey, name, longId, page } = action.data;\n const host = yield select(selectSiteHost);\n let claimsData;\n try {\n ({ data: claimsData } = yield call(getChannelClaims, host, longId, name, page));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n yield put(updateChannelClaims(channelKey, claimsData));\n}\n\nexport function * watchUpdateChannelClaims () {\n yield takeLatest(actions.CHANNEL_CLAIMS_UPDATE_ASYNC, getNewClaimsAndUpdateChannel);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/show_channel.js","import Request from 'utils/request';\n\nexport function getChannelData (host, id, name) {\n if (!id) id = 'none';\n const url = `${host}/api/channel/data/${name}/${id}`;\n return Request(url);\n};\n\nexport function getChannelClaims (host, longId, name, page) {\n if (!page) page = 1;\n const url = `${host}/api/channel/claims/${name}/${longId}/${page}`;\n return Request(url);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/api/channelApi.js","module.exports = {\n REGEXP_INVALID_CLAIM : /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS : /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR : '@',\n parseIdentifier : function (identifier) {\n const componentsRegex = new RegExp(\n '([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, value, modifierSeperator, modifier] = componentsRegex // eslint-disable-line no-unused-vars\n .exec(identifier)\n .map(match => match || null);\n\n // Validate and process name\n if (!value) {\n throw new Error(`Check your URL. No channel name provided before \"${modifierSeperator}\"`);\n }\n const isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n const channelName = isChannel ? value : null;\n let claimId;\n if (isChannel) {\n if (!channelName) {\n throw new Error('Check your URL. No channel name after \"@\".');\n }\n const nameBadChars = (channelName).match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error(`Check your URL. Invalid characters in channel name: \"${nameBadChars.join(', ')}\".`);\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n let channelClaimId;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error(`Check your URL. No modifier provided after separator \"${modifierSeperator}\"`);\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error(`Check your URL. The \"${modifierSeperator}\" modifier is not currently supported`);\n }\n }\n return {\n isChannel,\n channelName,\n channelClaimId: channelClaimId || null,\n claimId : claimId || null,\n };\n },\n parseClaim: function (name) {\n const componentsRegex = new RegExp(\n '([^:$#/.]*)' + // name (stops at the first extension)\n '([:$#.]?)([^/]*)' // extension separator, extension (stops at the first path separator or end)\n );\n const [proto, claimName, extensionSeperator, extension] = componentsRegex // eslint-disable-line no-unused-vars\n .exec(name)\n .map(match => match || null);\n\n // Validate and process name\n if (!claimName) {\n throw new Error('Check your URL. No claim name provided before \".\"');\n }\n const nameBadChars = (claimName).match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error(`Check your URL. Invalid characters in claim name: \"${nameBadChars.join(', ')}\".`);\n }\n // Validate and process extension\n if (extensionSeperator) {\n if (!extension) {\n throw new Error(`Check your URL. No file extension provided after separator \"${extensionSeperator}\".`);\n }\n if (extensionSeperator !== '.') {\n throw new Error(`Check your URL. The \"${extensionSeperator}\" separator is not supported in the claim name.`);\n }\n }\n return {\n claimName,\n extension: extension || null,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/lbryUri.js","const handlePageRender = require('../helpers/handlePageRender.jsx');\n\nmodule.exports = app => {\n // a catch-all route if someone visits a page that does not exist\n app.use('*', (req, res) => {\n // send response\n handlePageRender(req, res);\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/fallback-routes.js","const { logLevel } = require('../../config/loggerConfig');\n\nmodule.exports = (winston) => {\n // configure\n winston.configure({\n transports: [\n new (winston.transports.Console)({\n level : logLevel,\n timestamp : false,\n colorize : true,\n prettyPrint : true,\n handleExceptions : true,\n humanReadableUnhandledException: true,\n }),\n ],\n });\n // test all the log levels\n winston.error('Level 0');\n winston.warn('Level 1');\n winston.info('Level 2');\n winston.verbose('Level 3');\n winston.debug('Level 4');\n winston.silly('Level 5');\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/configureLogger.js","const loggerConfig = {\n logLevel: 'debug', // options: silly, debug, verbose, info\n};\n\nmodule.exports = loggerConfig;\n\n\n\n// WEBPACK FOOTER //\n// ./config/loggerConfig.js","const winstonSlackWebHook = require('winston-slack-webhook').SlackWebHook;\nconst slackConfig = require('../../config/slackConfig.js');\n\nmodule.exports = (winston) => {\n const {slackWebHook, slackErrorChannel, slackInfoChannel} = slackConfig;\n if (slackWebHook) {\n // add a transport for errors to slack\n if (slackErrorChannel) {\n winston.add(winstonSlackWebHook, {\n name : 'slack-errors-transport',\n level : 'warn',\n webhookUrl: slackWebHook,\n channel : slackErrorChannel,\n username : 'spee.ch',\n iconEmoji : ':face_with_head_bandage:',\n });\n };\n if (slackInfoChannel) {\n winston.add(winstonSlackWebHook, {\n name : 'slack-info-transport',\n level : 'info',\n webhookUrl: slackWebHook,\n channel : slackInfoChannel,\n username : 'spee.ch',\n iconEmoji : ':nerd_face:',\n });\n };\n // send test message\n winston.error('Slack \"error\" logging is online.');\n winston.info('Slack \"info\" logging is online.');\n } else {\n winston.warn('Slack logging is not enabled because no slackWebHook config var provided.');\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/configureSlack.js","module.exports = require(\"winston-slack-webhook\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"winston-slack-webhook\"\n// module id = 157\n// module chunks = 0","function SlackConfig () {\n this.slackWebHook = 'default';\n this.slackErrorChannel = 'default';\n this.slackInfoChannel = 'default';\n};\n\nmodule.exports = new SlackConfig();\n\n\n\n// WEBPACK FOOTER //\n// ./config/slackConfig.js"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index 8e3bd71b..c7c9672e 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "test": "mocha --recursive", "test-all": "mocha --recursive", "start": "node index.js", - "start-dev": "nodemon server/index.js", + "start-dev": "nodemon index.js", "lint": "eslint .", "fix": "eslint . --fix", "precommit": "eslint .", diff --git a/server/server.js b/server.js similarity index 70% rename from server/server.js rename to server.js index cd3da657..bb0dbdf5 100644 --- a/server/server.js +++ b/server.js @@ -1,17 +1,23 @@ -// app dependencies +// dependencies const express = require('express'); const bodyParser = require('body-parser'); const expressHandlebars = require('express-handlebars'); const Handlebars = require('handlebars'); const helmet = require('helmet'); const passport = require('passport'); -const { serializeSpeechUser, deserializeSpeechUser } = require('./helpers/authHelpers.js'); const cookieSession = require('cookie-session'); -const http = require('http'); -// logging dependencies +const { serializeSpeechUser, deserializeSpeechUser } = require('./server/helpers/authHelpers.js'); const logger = require('winston'); -const {auth: { sessionKey }, details: { port: PORT }} = require('../config/siteConfig.js'); +// require configs +const {auth: { sessionKey }, details: { port: PORT }} = require('./config/siteConfig.js'); + +const db = require('./server/models'); + +// configure logging +require('./server/helpers/configureLogger.js')(logger); +// configure slack +require('./server/helpers/configureSlack.js')(logger); // create an Express application const app = express(); @@ -32,8 +38,8 @@ app.use((req, res, next) => { // custom logging middleware to log all incoming // configure passport passport.serializeUser(serializeSpeechUser); passport.deserializeUser(deserializeSpeechUser); -const localSignupStrategy = require('./passport/local-signup.js'); -const localLoginStrategy = require('./passport/local-login.js'); +const localSignupStrategy = require('./server/passport/local-signup.js'); +const localLoginStrategy = require('./server/passport/local-login.js'); passport.use('local-signup', localSignupStrategy); passport.use('local-login', localLoginStrategy); // initialize passport @@ -53,25 +59,22 @@ const hbs = expressHandlebars.create({ app.engine('handlebars', hbs.engine); app.set('view engine', 'handlebars'); -// set the routes on the app -require('./routes/auth-routes.js')(app); -require('./routes/api-routes.js')(app); -require('./routes/page-routes.js')(app); -require('./routes/asset-routes.js')(app); -require('./routes/fallback-routes.js')(app); - -// create server -const server = http.Server(app); - -// configure logger -require('./helpers/configureLogger.js')(logger); -require('./helpers/configureSlack.js')(logger); - // sync sequelize -const db = require('./models/index'); -db.sequelize.sync() - // start the server +db.sequelize + .sync() .then(() => { + // set the routes on the app + require('./server/routes/auth-routes.js')(app); + require('./server/routes/api-routes.js')(app); + require('./server/routes/page-routes.js')(app); + require('./server/routes/asset-routes.js')(app); + require('./server/routes/fallback-routes.js')(app); + // create server + const http = require('http'); + return http.Server(app); + }) + // start the server + .then(server => { server.listen(PORT, () => { logger.info(`Server is listening on PORT ${PORT}`); }); diff --git a/server/auth/authentication.js b/server/auth/authentication.js index 2148485f..290aeac5 100644 --- a/server/auth/authentication.js +++ b/server/auth/authentication.js @@ -1,4 +1,4 @@ -const db = require('../models/index'); +const db = require('../models'); const logger = require('winston'); module.exports = { diff --git a/server/helpers/configureLogger.js b/server/helpers/configureLogger.js index 8b8776fa..cf78b453 100644 --- a/server/helpers/configureLogger.js +++ b/server/helpers/configureLogger.js @@ -1,4 +1,4 @@ -const { logLevel } = require('../../config/loggerConfig'); +const { logLevel } = require('../../devConfig/loggerConfig'); module.exports = (winston) => { // configure diff --git a/server/helpers/configureSlack.js b/server/helpers/configureSlack.js index c7353f41..f94a3e8a 100644 --- a/server/helpers/configureSlack.js +++ b/server/helpers/configureSlack.js @@ -1,5 +1,5 @@ const winstonSlackWebHook = require('winston-slack-webhook').SlackWebHook; -const slackConfig = require('../../config/slackConfig.js'); +const slackConfig = require('../../devConfig/slackConfig.js'); module.exports = (winston) => { const {slackWebHook, slackErrorChannel, slackInfoChannel} = slackConfig; diff --git a/server/helpers/handlePageRender.jsx b/server/helpers/handlePageRender.jsx index bcf62b43..1c01c8c3 100644 --- a/server/helpers/handlePageRender.jsx +++ b/server/helpers/handlePageRender.jsx @@ -1,11 +1,11 @@ import React from 'react'; import { renderToString } from 'react-dom/server'; import { createStore } from 'redux'; -import Reducer from '../../client/reducers/index'; +import Reducer from 'reducers'; import { Provider } from 'react-redux'; import { StaticRouter } from 'react-router-dom'; -import GAListener from '../../client/components/GAListener/index'; -import App from '../../client/app'; +import GAListener from 'components/GAListener'; +import App from 'app.jsx'; import renderFullPage from './renderFullPage.js'; import Helmet from 'react-helmet'; diff --git a/server/helpers/handleShowRender.jsx b/server/helpers/handleShowRender.jsx index bb5c4bf1..aa155e32 100644 --- a/server/helpers/handleShowRender.jsx +++ b/server/helpers/handleShowRender.jsx @@ -1,16 +1,16 @@ import React from 'react'; import { renderToString } from 'react-dom/server'; import { createStore, applyMiddleware } from 'redux'; -import Reducer from '../../client/reducers/index'; +import Reducer from 'reducers/index'; import { Provider } from 'react-redux'; import { StaticRouter } from 'react-router-dom'; -import GAListener from '../../client/components/GAListener/index'; -import App from '../../client/app'; +import GAListener from 'components/GAListener'; +import App from 'app.jsx'; import renderFullPage from './renderFullPage'; import createSagaMiddleware from 'redux-saga'; import { call } from 'redux-saga/effects'; -import { handleShowPageUri } from '../../client/sagas/show_uri'; -import { onHandleShowPageUri } from '../../client/actions/show'; +import { handleShowPageUri } from 'sagas/show_uri'; +import { onHandleShowPageUri } from 'actions/show'; import Helmet from 'react-helmet'; diff --git a/server/helpers/lbryApi.js b/server/helpers/lbryApi.js index 4d54ad2b..72735cd0 100644 --- a/server/helpers/lbryApi.js +++ b/server/helpers/lbryApi.js @@ -1,6 +1,6 @@ const axios = require('axios'); const logger = require('winston'); -const { api: { apiHost, apiPort } } = require('../../config/lbryConfig.js'); +const { api: { apiHost, apiPort } } = require('../../devConfig/lbryConfig.js'); const lbryApiUri = 'http://' + apiHost + ':' + apiPort; const { chooseGaLbrynetPublishLabel, sendGATimingEvent } = require('./googleAnalytics.js'); diff --git a/server/passport/local-signup.js b/server/passport/local-signup.js index 02d9fa69..07971a9e 100644 --- a/server/passport/local-signup.js +++ b/server/passport/local-signup.js @@ -1,7 +1,7 @@ const PassportLocalStrategy = require('passport-local').Strategy; const lbryApi = require('../helpers/lbryApi.js'); const logger = require('winston'); -const db = require('../models/index'); +const db = require('../models'); module.exports = new PassportLocalStrategy( { diff --git a/server/routes/api-routes.js b/server/routes/api-routes.js index d2ec536c..2db7b22a 100644 --- a/server/routes/api-routes.js +++ b/server/routes/api-routes.js @@ -2,7 +2,7 @@ const logger = require('winston'); const multipart = require('connect-multiparty'); const { publishing: { uploadDirectory }, details: { host } } = require('../../config/siteConfig.js'); const multipartMiddleware = multipart({uploadDir: uploadDirectory}); -const db = require('../models/index'); +const db = require('../models'); const { claimNameIsAvailable, checkChannelAvailability, publish } = require('../controllers/publishController.js'); const { getClaimList, resolveUri, getClaim } = require('../helpers/lbryApi.js'); const { addGetResultsToFileData, createBasicPublishParams, createThumbnailPublishParams, parsePublishApiRequestBody, parsePublishApiRequestFiles, createFileData } = require('../helpers/publishHelpers.js'); diff --git a/server/task-scripts/update-channel-names.js b/server/task-scripts/update-channel-names.js index fae22cc1..b04afdb8 100644 --- a/server/task-scripts/update-channel-names.js +++ b/server/task-scripts/update-channel-names.js @@ -1,6 +1,6 @@ // load dependencies const logger = require('winston'); -const db = require('../models/index'); // require our models for syncing +const db = require('../models'); // require our models for syncing // configure logging require('../helpers/configureLogger.js')(logger); diff --git a/webpack.server.common.js b/webpack.server.common.js index c631af87..6d21cdd8 100644 --- a/webpack.server.common.js +++ b/webpack.server.common.js @@ -8,10 +8,10 @@ module.exports = { __dirname: false, }, externals: [nodeExternals()], - entry : ['babel-polyfill', 'whatwg-fetch', './server/server.js'], + entry : ['babel-polyfill', 'whatwg-fetch', './server.js'], output : { - path : Path.join(__dirname, 'server/'), - publicPath : 'server/', + path : Path.join(__dirname, '/'), + publicPath : '/', filename : 'index.js', library : '', libraryTarget: 'commonjs-module', From 321eb1b99355de6c307b05d768bb7edfb838c7f4 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Mon, 19 Mar 2018 15:46:49 -0700 Subject: [PATCH 12/16] updated readme --- README.md | 14 ++++++++------ server/controllers/publishController.js | 2 +- server/controllers/serveController.js | 2 +- server/helpers/handleShowRender.jsx | 2 +- server/helpers/statsHelpers.js | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 5321e6c0..0898be0c 100644 --- a/README.md +++ b/README.md @@ -12,11 +12,13 @@ Spee.ch is a web app that reads and publishes images and videos to and from the * start spee.ch * clone this repo * run `npm install` - * create your ` - speechConfig.js` file - * copy `speechConfig.js.example` and name it `speechConfig.js` + * create your own config files in `/config` + * copy `example.js.example` and name it `example.js` * replace the `null` values in the config file with the appropriate values for your environment - * build the app by running `npm run build-prod` + * create your own config files in `/devConfig` + * copy `example.js.example` and name it `example.js` + * note: you must create these files, but the default values are sufficient if you do not want to update them. + * build the app by running `npm run build` * to start the server, run `npm run start` * visit [localhost:3000](http://localhost:3000) * start spee.ch-sync (optional, recommended) @@ -46,8 +48,8 @@ Spee.ch is a web app that reads and publishes images and videos to and from the * /api/claim/publish * example: `curl -F 'name=MyPictureName' -F 'file=@/path/to/myPicture.jpeg' https://spee.ch/api/claim/publish` * Parameters: - * `name` - * `file` (must be type .mp4, .jpeg, .jpg, .gif, or .png) + * `name` (required) + * `file` (required) (must be type .mp4, .jpeg, .jpg, .gif, or .png) * `nsfw` (optional) * `license` (optional) * `title` (optional) diff --git a/server/controllers/publishController.js b/server/controllers/publishController.js index 149293ca..1d133b37 100644 --- a/server/controllers/publishController.js +++ b/server/controllers/publishController.js @@ -1,5 +1,5 @@ const logger = require('winston'); -const db = require('../models/index'); +const db = require('../models'); const lbryApi = require('../helpers/lbryApi.js'); const publishHelpers = require('../helpers/publishHelpers.js'); const { publishing: { primaryClaimAddress, additionalClaimAddresses } } = require('../../config/siteConfig.js'); diff --git a/server/controllers/serveController.js b/server/controllers/serveController.js index 845c465f..a1a8fbc8 100644 --- a/server/controllers/serveController.js +++ b/server/controllers/serveController.js @@ -1,4 +1,4 @@ -const db = require('../models/index'); +const db = require('../models'); const logger = require('winston'); const { returnPaginatedChannelClaims } = require('../helpers/channelPagination.js'); diff --git a/server/helpers/handleShowRender.jsx b/server/helpers/handleShowRender.jsx index aa155e32..e5076c95 100644 --- a/server/helpers/handleShowRender.jsx +++ b/server/helpers/handleShowRender.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { renderToString } from 'react-dom/server'; import { createStore, applyMiddleware } from 'redux'; -import Reducer from 'reducers/index'; +import Reducer from 'reducers'; import { Provider } from 'react-redux'; import { StaticRouter } from 'react-router-dom'; import GAListener from 'components/GAListener'; diff --git a/server/helpers/statsHelpers.js b/server/helpers/statsHelpers.js index 8ec90f22..9e471172 100644 --- a/server/helpers/statsHelpers.js +++ b/server/helpers/statsHelpers.js @@ -1,5 +1,5 @@ const logger = require('winston'); -const db = require('../models/index'); +const db = require('../models'); module.exports = { postToStats (action, url, ipAddress, name, claimId, result) { From 9696ef04dccb8a77e8ce01f07d7aaf7b602b00a4 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Mon, 19 Mar 2018 16:58:15 -0700 Subject: [PATCH 13/16] removed non-sensitive config vars from .gitignore --- .gitignore | 6 +----- README.md | 6 ++---- devConfig/lbryConfig.js.example | 6 ------ devConfig/loggerConfig.js.example | 3 --- ...{sequelizeCliConfig.js.example => sequelizeCliConfig.js} | 4 +++- devConfig/slackConfig.js | 5 +++++ devConfig/slackConfig.js.example | 5 ----- devConfig/testingConfig.js | 5 +++++ devConfig/testingConfig.js.example | 5 ----- 9 files changed, 16 insertions(+), 29 deletions(-) delete mode 100644 devConfig/lbryConfig.js.example delete mode 100644 devConfig/loggerConfig.js.example rename devConfig/{sequelizeCliConfig.js.example => sequelizeCliConfig.js} (84%) create mode 100644 devConfig/slackConfig.js delete mode 100644 devConfig/slackConfig.js.example create mode 100644 devConfig/testingConfig.js delete mode 100644 devConfig/testingConfig.js.example diff --git a/.gitignore b/.gitignore index 7bc3a273..0612b374 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,8 @@ node_modules/ .idea/ -config/lbryConfig.js -config/loggerConfig.js + config/mysqlConfig.js config/siteConfig.js -devConfig/slackConfig.js -devConfig/sequelizeCliConfig.js -devConfig/testingConfig.js public/bundle/ index.js diff --git a/README.md b/README.md index 0898be0c..1b135906 100644 --- a/README.md +++ b/README.md @@ -13,11 +13,9 @@ Spee.ch is a web app that reads and publishes images and videos to and from the * clone this repo * run `npm install` * create your own config files in `/config` - * copy `example.js.example` and name it `example.js` + * copy `mysqlConfig.js.example` and name it `mysqlConfig.js` + * copy `siteConfig.js.example` and name it `siteConfig.js` * replace the `null` values in the config file with the appropriate values for your environment - * create your own config files in `/devConfig` - * copy `example.js.example` and name it `example.js` - * note: you must create these files, but the default values are sufficient if you do not want to update them. * build the app by running `npm run build` * to start the server, run `npm run start` * visit [localhost:3000](http://localhost:3000) diff --git a/devConfig/lbryConfig.js.example b/devConfig/lbryConfig.js.example deleted file mode 100644 index dd954fcc..00000000 --- a/devConfig/lbryConfig.js.example +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - api: { - apiHost: 'localhost', - apiPort: '5279', - }, -}; diff --git a/devConfig/loggerConfig.js.example b/devConfig/loggerConfig.js.example deleted file mode 100644 index bbbbbbcf..00000000 --- a/devConfig/loggerConfig.js.example +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - logLevel: 'debug', // options: silly, debug, verbose, info -}; diff --git a/devConfig/sequelizeCliConfig.js.example b/devConfig/sequelizeCliConfig.js similarity index 84% rename from devConfig/sequelizeCliConfig.js.example rename to devConfig/sequelizeCliConfig.js index 8b91eccb..e17d75a5 100644 --- a/devConfig/sequelizeCliConfig.js.example +++ b/devConfig/sequelizeCliConfig.js @@ -1,4 +1,4 @@ -module.exports = { +const sequelizeCliConfig = { development: { username: '', password: '', @@ -21,3 +21,5 @@ module.exports = { dialect : 'mysql', }, }; + +module.exports = sequelizeCliConfig; diff --git a/devConfig/slackConfig.js b/devConfig/slackConfig.js new file mode 100644 index 00000000..a0d59ca6 --- /dev/null +++ b/devConfig/slackConfig.js @@ -0,0 +1,5 @@ +module.exports = { + slackWebHook : '', + slackErrorChannel: '', + slackInfoChannel : null, +}; diff --git a/devConfig/slackConfig.js.example b/devConfig/slackConfig.js.example deleted file mode 100644 index 9f4b8f21..00000000 --- a/devConfig/slackConfig.js.example +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - slackWebHook : null, - slackErrorChannel: null, - slackInfoChannel : null, -}; diff --git a/devConfig/testingConfig.js b/devConfig/testingConfig.js new file mode 100644 index 00000000..3ad9e8a1 --- /dev/null +++ b/devConfig/testingConfig.js @@ -0,0 +1,5 @@ +module.exports = { + testChannel : '', + testChannelId : '', + testChannelPassword: '', +}; diff --git a/devConfig/testingConfig.js.example b/devConfig/testingConfig.js.example deleted file mode 100644 index 4837fc20..00000000 --- a/devConfig/testingConfig.js.example +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - testChannel : null, // a channel to make test publishes in - testChannelId : null, // the claim id for the test channel - testChannelPassword: null, // password for the test channel -}; From 348bedfb550c7e5b14fa47e0ad65b467b4336864 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Mon, 19 Mar 2018 18:18:52 -0700 Subject: [PATCH 14/16] updated the readme and moved server.js into server folder --- README.md | 33 +- config/mysqlConfig.js.example | 6 +- config/siteConfig.js.example | 30 +- index.js | 10909 -------------------------------- index.js.map | 1 - package.json | 4 +- server.js => server/server.js | 24 +- webpack.server.common.js | 6 +- 8 files changed, 64 insertions(+), 10949 deletions(-) delete mode 100644 index.js delete mode 100644 index.js.map rename server.js => server/server.js (78%) diff --git a/README.md b/README.md index 1b135906..980b8179 100644 --- a/README.md +++ b/README.md @@ -13,16 +13,41 @@ Spee.ch is a web app that reads and publishes images and videos to and from the * clone this repo * run `npm install` * create your own config files in `/config` - * copy `mysqlConfig.js.example` and name it `mysqlConfig.js` - * copy `siteConfig.js.example` and name it `siteConfig.js` - * replace the `null` values in the config file with the appropriate values for your environment + * copy `mysqlConfig.js.example`, name it `mysqlConfig.js`, and update its contents. + * copy `siteConfig.js.example`, name it `siteConfig.js`, and update its contents. * build the app by running `npm run build` + * for development, `npm run build-dev` will build the app and continue to listen for changes, building again when a change is made. * to start the server, run `npm run start` -* visit [localhost:3000](http://localhost:3000) + * for development, `npm run start-dev` will start the server and continue to listen for changes, restarting the server again whenever a change is made. + * for production, [pm2](http://pm2.keymetrics.io/docs/usage/quick-start/) is a great tool for starting and managing node processes +* visit [localhost:3000](http://localhost:3000) and check out your spee.ch app! * start spee.ch-sync (optional, recommended) * Note: this tool will decode blocks from the `lbry` blockchain and update the Claim and Certificate tables in mysql with all the claims from the blockchain. This is not necessary if you only want to host and resolve content published through your version of spee.ch, but it is required if you want to retrieve and host other content from the lbry network. * install and run this [`speech-sync`](https://github.com/billbitt/spee.ch-sync) tool +## Development & App Structure +* the `client/` folder houses all of the `react` and `redux` code. + * `client.js` is the entry point for the app. This file is the entry point for webpack to build the client bundle. + * `app.jsx` is the parent component that houses the rest of the app components + * components are located in `client/components`, `client/containers`, and `client/pages` + * `/components` contains the 'dumb' components that receive props (if any) from their parents + * `/containers` contains the 'smart' redux-connected components that receive props from the `redux-store` + * `/pages` contains the components which act as the main pages of the app + * actions are located in the `client/actions` folder + * reducers are located in the `client/reducers` folder + * sagas are located in the `client/sagas` folder +* the `server/` folder contains all of server code. + * `server.js` is the entry point for the server. It creates the [express app](https://expressjs.com/), requires the routes, syncs the database, and starts the server listening on the `PORT` designated in the config file. This file is the entry point for webpack to build the server bundle. + * the `/routes` folder contains all of the routes for the express app + * the `/models` folder contains all of the models which the app uses to interact with the `mysql` database. Note: this app uses the [sequelize](http://docs.sequelizejs.com/) orm. +* webpack + * During the build process, webpack creates two bundles for this project: + * (1) a client-side app bundle which will be located at `public/bundle/bundle.js` + * (2) a server bundle which will be located at `server/index.js` +* configuration + * the `config/` folder contains all of the required config files. The project contains `.example` files which can be copied to create the necessary `.js` files + * the `devConfig/` folder contains optional config files. Updating these files is not necessary. If you update these files, make sure to add them to your `.gitignore` file so they are not included in source control. + ## Tests * Spee.ch uses `mocha` with `chai` for testing. * To run all tests that do not require LBC, run `npm test -- --grep @usesLbc --invert` diff --git a/config/mysqlConfig.js.example b/config/mysqlConfig.js.example index 58f2b2ae..ef1b36d1 100644 --- a/config/mysqlConfig.js.example +++ b/config/mysqlConfig.js.example @@ -1,5 +1,5 @@ module.exports = { - database: 'default', - username: 'default', - password: 'default', + database: 'default', // your mysql database name + username: 'default', // your mysql username + password: 'default', // your mysql password }; diff --git a/config/siteConfig.js.example b/config/siteConfig.js.example index de2fe86d..a96057c0 100644 --- a/config/siteConfig.js.example +++ b/config/siteConfig.js.example @@ -1,28 +1,28 @@ module.exports = { analytics: { - googleId: 'default', + googleId: 'default', // optional: add a google id }, assetDefaults: { - description: 'An asset published on Spee.ch', - thumbnail : 'https://spee.ch/assets/img/video_thumb_default.png', - title : 'Spee.ch', + description: 'An asset published on Spee.ch', // optional: add a default description for assets on your site + thumbnail : 'https://spee.ch/assets/img/video_thumb_default.png', // optional: add a default thumbnail image for assets on your site + title : 'Spee.ch', // optional: add a default title for assets on your site }, auth: { - sessionKey: 'default', + sessionKey: 'default', // choose a secret session key }, details: { - description: 'Open-source, decentralized image and video sharing.', - host : 'default', - port : 3000, - title : 'Spee.ch', - twitter : '@spee_ch', + description: 'Open-source, decentralized image and video sharing.', // add a description for your site + host : 'https://some.cool.site', // add the host of your site (e.g. 'https://spee.ch') + port : 3000, // add the port your site should listen on + title : 'Spee.ch', // add a title for your site + twitter : '@default', // optional: add the twitter handle for your site }, publishing: { - additionalClaimAddresses: [], - disabled : false, - disabledMessage : 'Please check back soon.', - primaryClaimAddress : 'default', - thumbnailChannel : 'default', + additionalClaimAddresses: [], // optional: if you have other wallet addresses that you have used to publish from, enter them here + disabled : false, // optional: if 'true' this will disable publishing + disabledMessage : 'Please check back soon.', // optional: if publishing is disabled, this message will be displayed instead + primaryClaimAddress : 'default', // required: choose an address from your lbry wallet and enter it here + thumbnailChannel : 'default', // thumbnailChannelId : 'default', uploadDirectory : '/home/lbry/Uploads', }, diff --git a/index.js b/index.js deleted file mode 100644 index 3c88b473..00000000 --- a/index.js +++ /dev/null @@ -1,10909 +0,0 @@ -module.exports = -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "/"; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 45); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -module.exports = require("react"); - -/***/ }), -/* 1 */ -/***/ (function(module, exports) { - -module.exports = require("react-redux"); - -/***/ }), -/* 2 */ -/***/ (function(module, exports) { - -module.exports = require("winston"); - -/***/ }), -/* 3 */ -/***/ (function(module, exports) { - -module.exports = require("react-router-dom"); - -/***/ }), -/* 4 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.selectFile = selectFile; -exports.clearFile = clearFile; -exports.updateMetadata = updateMetadata; -exports.updateClaim = updateClaim; -exports.setPublishInChannel = setPublishInChannel; -exports.updatePublishStatus = updatePublishStatus; -exports.updateError = updateError; -exports.updateSelectedChannel = updateSelectedChannel; -exports.toggleMetadataInputs = toggleMetadataInputs; -exports.onNewThumbnail = onNewThumbnail; -exports.startPublish = startPublish; - -var _publish_action_types = __webpack_require__(32); - -var actions = _interopRequireWildcard(_publish_action_types); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -// export action creators -function selectFile(file) { - return { - type: actions.FILE_SELECTED, - data: file - }; -}; - -function clearFile() { - return { - type: actions.FILE_CLEAR - }; -}; - -function updateMetadata(name, value) { - return { - type: actions.METADATA_UPDATE, - data: { - name: name, - value: value - } - }; -}; - -function updateClaim(value) { - return { - type: actions.CLAIM_UPDATE, - data: value - }; -}; - -function setPublishInChannel(channel) { - return { - type: actions.SET_PUBLISH_IN_CHANNEL, - channel: channel - }; -}; - -function updatePublishStatus(status, message) { - return { - type: actions.PUBLISH_STATUS_UPDATE, - data: { - status: status, - message: message - } - }; -}; - -function updateError(name, value) { - return { - type: actions.ERROR_UPDATE, - data: { - name: name, - value: value - } - }; -}; - -function updateSelectedChannel(channelName) { - return { - type: actions.SELECTED_CHANNEL_UPDATE, - data: channelName - }; -}; - -function toggleMetadataInputs(showMetadataInputs) { - return { - type: actions.TOGGLE_METADATA_INPUTS, - data: showMetadataInputs - }; -}; - -function onNewThumbnail(file) { - return { - type: actions.THUMBNAIL_NEW, - data: file - }; -}; - -function startPublish(history) { - return { - type: actions.PUBLISH_START, - data: { history: history } - }; -} - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function SiteConfig() { - this.analytics = { - googleId: 'default' - }; - this.assetDefaults = { - description: 'An asset published on Spee.ch', - thumbnail: 'https://spee.ch/assets/img/video_thumb_default.png', - title: 'Spee.ch' - }; - this.auth = { - sessionKey: 'default' - }; - this.details = { - description: 'Open-source, decentralized image and video sharing.', - host: 'default', - port: 3000, - title: 'Spee.ch', - twitter: '@spee_ch' - }; - this.publishing = { - additionalClaimAddresses: [], - disabled: false, - disabledMessage: 'Please check back soon.', - primaryClaimAddress: 'default', - thumbnailChannel: 'default', - thumbnailChannelId: 'default', - uploadDirectory: '/home/lbry/Uploads' - }; -}; - -module.exports = new SiteConfig(); - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var Sequelize = __webpack_require__(24); -var logger = __webpack_require__(2); - -console.log('exporting sequelize models'); - -var _require = __webpack_require__(66), - database = _require.database, - username = _require.username, - password = _require.password; - -var db = {}; -// set sequelize options -var sequelize = new Sequelize(database, username, password, { - host: 'localhost', - dialect: 'mysql', - dialectOptions: { decimalNumbers: true }, // fix to ensure DECIMAL will not be stored as a string - logging: false, - pool: { - max: 5, - min: 0, - idle: 10000, - acquire: 10000 - } -}); - -// establish mysql connection -sequelize.authenticate().then(function () { - logger.info('Sequelize has established mysql connection successfully.'); -}).catch(function (err) { - logger.error('Sequelize was unable to connect to the database:', err); -}); - -// manually add each model to the db object -var Certificate = __webpack_require__(67); -var Channel = __webpack_require__(68); -var Claim = __webpack_require__(69); -var File = __webpack_require__(70); -var Request = __webpack_require__(71); -var User = __webpack_require__(72); -db['Certificate'] = sequelize.import('Certificate', Certificate); -db['Channel'] = sequelize.import('Channel', Channel); -db['Claim'] = sequelize.import('Claim', Claim); -db['File'] = sequelize.import('File', File); -db['Request'] = sequelize.import('Request', Request); -db['User'] = sequelize.import('User', User); - -// run model.association for each model in the db object that has an association -Object.keys(db).forEach(function (modelName) { - if (db[modelName].associate) { - logger.info('Associating model:', modelName); - db[modelName].associate(db); - } -}); - -db.sequelize = sequelize; -db.Sequelize = Sequelize; - -// add an 'upsert' method to the db object -db.upsert = function (Model, values, condition, tableName) { - return Model.findOne({ - where: condition - }).then(function (obj) { - if (obj) { - // update - logger.debug('updating record in db.' + tableName); - return obj.update(values); - } else { - // insert - logger.debug('creating record in db.' + tableName); - return Model.create(values); - } - }).catch(function (error) { - logger.error(tableName + '.upsert error', error); - throw error; - }); -}; - -module.exports = db; - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _channel = __webpack_require__(19); - -var _publish = __webpack_require__(4); - -var _view = __webpack_require__(93); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var channel = _ref.channel, - site = _ref.site; - - return { - channelName: channel.loggedInChannel.name, - channelShortId: channel.loggedInChannel.shortId, - channelLongId: channel.loggedInChannel.longId, - siteDescription: site.description - }; -}; - -var mapDispatchToProps = function mapDispatchToProps(dispatch) { - return { - onChannelLogin: function onChannelLogin(name, shortId, longId) { - dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId)); - dispatch((0, _publish.updateSelectedChannel)(name)); - }, - onChannelLogout: function onChannelLogout() { - dispatch((0, _channel.updateLoggedInChannel)(null, null, null)); - } - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); - -/***/ }), -/* 8 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.onHandleShowPageUri = onHandleShowPageUri; -exports.onRequestError = onRequestError; -exports.onNewChannelRequest = onNewChannelRequest; -exports.onNewAssetRequest = onNewAssetRequest; -exports.onRequestUpdate = onRequestUpdate; -exports.addRequestToRequestList = addRequestToRequestList; -exports.addAssetToAssetList = addAssetToAssetList; -exports.addNewChannelToChannelList = addNewChannelToChannelList; -exports.onUpdateChannelClaims = onUpdateChannelClaims; -exports.updateChannelClaims = updateChannelClaims; -exports.fileRequested = fileRequested; -exports.updateFileAvailability = updateFileAvailability; -exports.updateDisplayAssetError = updateDisplayAssetError; - -var _show_action_types = __webpack_require__(12); - -var actions = _interopRequireWildcard(_show_action_types); - -var _show_request_types = __webpack_require__(41); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -// basic request parsing -function onHandleShowPageUri(params) { - return { - type: actions.HANDLE_SHOW_URI, - data: params - }; -}; - -function onRequestError(error) { - return { - type: actions.REQUEST_ERROR, - data: error - }; -}; - -function onNewChannelRequest(channelName, channelId) { - var requestType = _show_request_types.CHANNEL; - var requestId = 'cr#' + channelName + '#' + channelId; - return { - type: actions.CHANNEL_REQUEST_NEW, - data: { requestType: requestType, requestId: requestId, channelName: channelName, channelId: channelId } - }; -}; - -function onNewAssetRequest(name, id, channelName, channelId, extension) { - var requestType = extension ? _show_request_types.ASSET_LITE : _show_request_types.ASSET_DETAILS; - var requestId = 'ar#' + name + '#' + id + '#' + channelName + '#' + channelId; - return { - type: actions.ASSET_REQUEST_NEW, - data: { - requestType: requestType, - requestId: requestId, - name: name, - modifier: { - id: id, - channel: { - name: channelName, - id: channelId - } - } - } - }; -}; - -function onRequestUpdate(requestType, requestId) { - return { - type: actions.REQUEST_UPDATE, - data: { - requestType: requestType, - requestId: requestId - } - }; -}; - -function addRequestToRequestList(id, error, key) { - return { - type: actions.REQUEST_LIST_ADD, - data: { id: id, error: error, key: key } - }; -}; - -// asset actions - -function addAssetToAssetList(id, error, name, claimId, shortId, claimData) { - return { - type: actions.ASSET_ADD, - data: { id: id, error: error, name: name, claimId: claimId, shortId: shortId, claimData: claimData } - }; -} - -// channel actions - -function addNewChannelToChannelList(id, name, shortId, longId, claimsData) { - return { - type: actions.CHANNEL_ADD, - data: { id: id, name: name, shortId: shortId, longId: longId, claimsData: claimsData } - }; -}; - -function onUpdateChannelClaims(channelKey, name, longId, page) { - return { - type: actions.CHANNEL_CLAIMS_UPDATE_ASYNC, - data: { channelKey: channelKey, name: name, longId: longId, page: page } - }; -}; - -function updateChannelClaims(channelListId, claimsData) { - return { - type: actions.CHANNEL_CLAIMS_UPDATE_SUCCESS, - data: { channelListId: channelListId, claimsData: claimsData } - }; -}; - -// display a file - -function fileRequested(name, claimId) { - return { - type: actions.FILE_REQUESTED, - data: { name: name, claimId: claimId } - }; -}; - -function updateFileAvailability(status) { - return { - type: actions.FILE_AVAILABILITY_UPDATE, - data: status - }; -}; - -function updateDisplayAssetError(error) { - return { - type: actions.DISPLAY_ASSET_ERROR, - data: error - }; -}; - -/***/ }), -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _view = __webpack_require__(89); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var site = _ref.site; - var defaultDescription = site.defaultDescription, - defaultThumbnail = site.defaultThumbnail, - siteDescription = site.description, - siteHost = site.host, - siteTitle = site.title, - siteTwitter = site.twitter; - - return { - defaultDescription: defaultDescription, - defaultThumbnail: defaultThumbnail, - siteDescription: siteDescription, - siteHost: siteHost, - siteTitle: siteTitle, - siteTwitter: siteTwitter - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); - -/***/ }), -/* 10 */ -/***/ (function(module, exports) { - -module.exports = require("prop-types"); - -/***/ }), -/* 11 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -exports.default = request; - -__webpack_require__(96); - -/** - * Parses the JSON returned by a network request - * - * @param {object} response A response from a network request - * - * @return {object} The parsed JSON from the request - */ -function parseJSON(response) { - if (response.status === 204 || response.status === 205) { - return null; - } - return response.json(); -} - -/** - * Parses the status returned by a network request - * - * @param {object} response A response from a network request - * @param {object} response The parsed JSON from the network request - * - * @return {object | undefined} Returns object with status and statusText, or undefined - */ -function checkStatus(response, jsonResponse) { - if (response.status >= 200 && response.status < 300) { - return jsonResponse; - } - var error = new Error(jsonResponse.message); - error.response = response; - throw error; -} - -/** - * Requests a URL, returning a promise - * - * @param {string} url The URL we want to request - * @param {object} [options] The options we want to pass to "fetch" - * - * @return {object} The response data - */ - -function request(url, options) { - return fetch(url, options).then(function (response) { - return Promise.all([response, parseJSON(response)]); - }).then(function (_ref) { - var _ref2 = _slicedToArray(_ref, 2), - response = _ref2[0], - jsonResponse = _ref2[1]; - - return checkStatus(response, jsonResponse); - }); -} - -/***/ }), -/* 12 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -// request actions -var HANDLE_SHOW_URI = exports.HANDLE_SHOW_URI = 'HANDLE_SHOW_URI'; -var REQUEST_ERROR = exports.REQUEST_ERROR = 'REQUEST_ERROR'; -var REQUEST_UPDATE = exports.REQUEST_UPDATE = 'REQUEST_UPDATE'; -var ASSET_REQUEST_NEW = exports.ASSET_REQUEST_NEW = 'ASSET_REQUEST_NEW'; -var CHANNEL_REQUEST_NEW = exports.CHANNEL_REQUEST_NEW = 'CHANNEL_REQUEST_NEW'; -var REQUEST_LIST_ADD = exports.REQUEST_LIST_ADD = 'REQUEST_LIST_ADD'; - -// asset actions -var ASSET_ADD = exports.ASSET_ADD = 'ASSET_ADD'; - -// channel actions -var CHANNEL_ADD = exports.CHANNEL_ADD = 'CHANNEL_ADD'; - -var CHANNEL_CLAIMS_UPDATE_ASYNC = exports.CHANNEL_CLAIMS_UPDATE_ASYNC = 'CHANNEL_CLAIMS_UPDATE_ASYNC'; -var CHANNEL_CLAIMS_UPDATE_SUCCESS = exports.CHANNEL_CLAIMS_UPDATE_SUCCESS = 'CHANNEL_CLAIMS_UPDATE_SUCCESS'; - -// asset/file display actions -var FILE_REQUESTED = exports.FILE_REQUESTED = 'FILE_REQUESTED'; -var FILE_AVAILABILITY_UPDATE = exports.FILE_AVAILABILITY_UPDATE = 'FILE_AVAILABILITY_UPDATE'; -var DISPLAY_ASSET_ERROR = exports.DISPLAY_ASSET_ERROR = 'DISPLAY_ASSET_ERROR'; - -/***/ }), -/* 13 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var selectAsset = exports.selectAsset = function selectAsset(show) { - var request = show.requestList[show.request.id]; - var assetKey = request.key; - return show.assetList[assetKey]; -}; - -var selectShowState = exports.selectShowState = function selectShowState(state) { - return state.show; -}; - -/***/ }), -/* 14 */ -/***/ (function(module, exports) { - -module.exports = require("react-helmet"); - -/***/ }), -/* 15 */ -/***/ (function(module, exports) { - -module.exports = require("redux-saga/effects"); - -/***/ }), -/* 16 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var axios = __webpack_require__(63); -var logger = __webpack_require__(2); - -var _require = __webpack_require__(64), - _require$api = _require.api, - apiHost = _require$api.apiHost, - apiPort = _require$api.apiPort; - -var lbryApiUri = 'http://' + apiHost + ':' + apiPort; - -var _require2 = __webpack_require__(17), - chooseGaLbrynetPublishLabel = _require2.chooseGaLbrynetPublishLabel, - sendGATimingEvent = _require2.sendGATimingEvent; - -var handleLbrynetResponse = function handleLbrynetResponse(_ref, resolve, reject) { - var data = _ref.data; - - logger.debug('lbry api data:', data); - if (data.result) { - // check for an error - if (data.result.error) { - logger.debug('Lbrynet api error:', data.result.error); - reject(new Error(data.result.error)); - return; - }; - resolve(data.result); - return; - } - // fallback in case it just timed out - reject(JSON.stringify(data)); -}; - -module.exports = { - publishClaim: function publishClaim(publishParams) { - logger.debug('lbryApi >> Publishing claim to "' + publishParams.name + '"'); - var gaStartTime = Date.now(); - return new Promise(function (resolve, reject) { - axios.post(lbryApiUri, { - method: 'publish', - params: publishParams - }).then(function (response) { - sendGATimingEvent('lbrynet', 'publish', chooseGaLbrynetPublishLabel(publishParams), gaStartTime, Date.now()); - handleLbrynetResponse(response, resolve, reject); - }).catch(function (error) { - reject(error); - }); - }); - }, - getClaim: function getClaim(uri) { - logger.debug('lbryApi >> Getting Claim for "' + uri + '"'); - var gaStartTime = Date.now(); - return new Promise(function (resolve, reject) { - axios.post(lbryApiUri, { - method: 'get', - params: { uri: uri, timeout: 20 } - }).then(function (response) { - sendGATimingEvent('lbrynet', 'getClaim', 'GET', gaStartTime, Date.now()); - handleLbrynetResponse(response, resolve, reject); - }).catch(function (error) { - reject(error); - }); - }); - }, - getClaimList: function getClaimList(claimName) { - logger.debug('lbryApi >> Getting claim_list for "' + claimName + '"'); - var gaStartTime = Date.now(); - return new Promise(function (resolve, reject) { - axios.post(lbryApiUri, { - method: 'claim_list', - params: { name: claimName } - }).then(function (response) { - sendGATimingEvent('lbrynet', 'getClaimList', 'CLAIM_LIST', gaStartTime, Date.now()); - handleLbrynetResponse(response, resolve, reject); - }).catch(function (error) { - reject(error); - }); - }); - }, - resolveUri: function resolveUri(uri) { - logger.debug('lbryApi >> Resolving URI for "' + uri + '"'); - var gaStartTime = Date.now(); - return new Promise(function (resolve, reject) { - axios.post(lbryApiUri, { - method: 'resolve', - params: { uri: uri } - }).then(function (_ref2) { - var data = _ref2.data; - - sendGATimingEvent('lbrynet', 'resolveUri', 'RESOLVE', gaStartTime, Date.now()); - if (data.result[uri].error) { - // check for errors - reject(data.result[uri].error); - } else { - // if no errors, resolve - resolve(data.result[uri]); - } - }).catch(function (error) { - reject(error); - }); - }); - }, - getDownloadDirectory: function getDownloadDirectory() { - logger.debug('lbryApi >> Retrieving the download directory path from lbry daemon...'); - var gaStartTime = Date.now(); - return new Promise(function (resolve, reject) { - axios.post(lbryApiUri, { - method: 'settings_get' - }).then(function (_ref3) { - var data = _ref3.data; - - sendGATimingEvent('lbrynet', 'getDownloadDirectory', 'SETTINGS_GET', gaStartTime, Date.now()); - if (data.result) { - resolve(data.result.download_directory); - } else { - return new Error('Successfully connected to lbry daemon, but unable to retrieve the download directory.'); - } - }).catch(function (error) { - logger.error('Lbrynet Error:', error); - resolve('/home/lbry/Downloads/'); - }); - }); - }, - createChannel: function createChannel(name) { - logger.debug('lbryApi >> Creating channel for ' + name + '...'); - var gaStartTime = Date.now(); - return new Promise(function (resolve, reject) { - axios.post(lbryApiUri, { - method: 'channel_new', - params: { - channel_name: name, - amount: 0.1 - } - }).then(function (response) { - sendGATimingEvent('lbrynet', 'createChannel', 'CHANNEL_NEW', gaStartTime, Date.now()); - handleLbrynetResponse(response, resolve, reject); - }).catch(function (error) { - reject(error); - }); - }); - } -}; - -/***/ }), -/* 17 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var logger = __webpack_require__(2); -var ua = __webpack_require__(65); - -var _require = __webpack_require__(5), - googleId = _require.analytics.googleId, - title = _require.details.title; - -function createServeEventParams(headers, ip, originalUrl) { - return { - eventCategory: 'client requests', - eventAction: 'serve request', - eventLabel: originalUrl, - ipOverride: ip, - userAgentOverride: headers['user-agent'] - }; -}; - -function createPublishTimingEventParams(category, variable, label, startTime, endTime) { - var duration = endTime - startTime; - return { - userTimingCategory: category, - userTimingVariableName: variable, - userTimingTime: duration, - userTimingLabel: label - }; -}; - -function sendGoogleAnalyticsEvent(ip, params) { - var visitorId = ip.replace(/\./g, '-'); - var visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true }); - visitor.event(params, function (err) { - if (err) { - logger.error('Google Analytics Event Error >>', err); - } - }); -}; - -function sendGoogleAnalyticsTiming(visitorId, params) { - var visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true }); - visitor.timing(params, function (err) { - if (err) { - logger.error('Google Analytics Event Error >>', err); - } - logger.debug('Timing event successfully sent to google analytics'); - }); -}; - -module.exports = { - sendGAServeEvent: function sendGAServeEvent(headers, ip, originalUrl) { - var params = createServeEventParams(headers, ip, originalUrl); - sendGoogleAnalyticsEvent(ip, params); - }, - sendGATimingEvent: function sendGATimingEvent(category, variable, label, startTime, endTime) { - var params = createPublishTimingEventParams(category, variable, label, startTime, endTime); - sendGoogleAnalyticsTiming(title, params); - }, - chooseGaLbrynetPublishLabel: function chooseGaLbrynetPublishLabel(_ref) { - var channelName = _ref.channel_name, - channelId = _ref.channel_id; - - return channelName || channelId ? 'PUBLISH_IN_CHANNEL_CLAIM' : 'PUBLISH_ANONYMOUS_CLAIM'; - } -}; - -/***/ }), -/* 18 */ -/***/ (function(module, exports) { - -module.exports = require("redux"); - -/***/ }), -/* 19 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.updateLoggedInChannel = updateLoggedInChannel; - -var _channel_action_types = __webpack_require__(34); - -var actions = _interopRequireWildcard(_channel_action_types); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -// export action creators - -function updateLoggedInChannel(name, shortId, longId) { - return { - type: actions.CHANNEL_UPDATE, - data: { - name: name, - shortId: shortId, - longId: longId - } - }; -}; - -/***/ }), -/* 20 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(10); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _ActiveStatusBar = __webpack_require__(118); - -var _ActiveStatusBar2 = _interopRequireDefault(_ActiveStatusBar); - -var _InactiveStatusBar = __webpack_require__(119); - -var _InactiveStatusBar2 = _interopRequireDefault(_InactiveStatusBar); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var ProgressBar = function (_React$Component) { - _inherits(ProgressBar, _React$Component); - - function ProgressBar(props) { - _classCallCheck(this, ProgressBar); - - var _this = _possibleConstructorReturn(this, (ProgressBar.__proto__ || Object.getPrototypeOf(ProgressBar)).call(this, props)); - - _this.state = { - bars: [], - index: 0, - incrementer: 1 - }; - _this.createBars = _this.createBars.bind(_this); - _this.startProgressBar = _this.startProgressBar.bind(_this); - _this.updateProgressBar = _this.updateProgressBar.bind(_this); - _this.stopProgressBar = _this.stopProgressBar.bind(_this); - return _this; - } - - _createClass(ProgressBar, [{ - key: 'componentDidMount', - value: function componentDidMount() { - this.createBars(); - this.startProgressBar(); - } - }, { - key: 'componentWillUnmount', - value: function componentWillUnmount() { - this.stopProgressBar(); - } - }, { - key: 'createBars', - value: function createBars() { - var bars = []; - for (var i = 0; i <= this.props.size; i++) { - bars.push({ isActive: false }); - } - this.setState({ bars: bars }); - } - }, { - key: 'startProgressBar', - value: function startProgressBar() { - this.updateInterval = setInterval(this.updateProgressBar.bind(this), 300); - } - }, { - key: 'updateProgressBar', - value: function updateProgressBar() { - var index = this.state.index; - var incrementer = this.state.incrementer; - var bars = this.state.bars; - // flip incrementer if necessary, to stay in bounds - if (index < 0 || index > this.props.size) { - incrementer = incrementer * -1; - index += incrementer; - } - // update the indexed bar - if (incrementer > 0) { - bars[index].isActive = true; - } else { - bars[index].isActive = false; - }; - // increment index - index += incrementer; - // update state - this.setState({ - bars: bars, - incrementer: incrementer, - index: index - }); - } - }, { - key: 'stopProgressBar', - value: function stopProgressBar() { - clearInterval(this.updateInterval); - } - }, { - key: 'render', - value: function render() { - return _react2.default.createElement( - 'div', - null, - this.state.bars.map(function (bar, index) { - return bar.isActive ? _react2.default.createElement(_ActiveStatusBar2.default, { key: index }) : _react2.default.createElement(_InactiveStatusBar2.default, { key: index }); - }) - ); - } - }]); - - return ProgressBar; -}(_react2.default.Component); - -; - -ProgressBar.propTypes = { - size: _propTypes2.default.number.isRequired -}; - -exports.default = ProgressBar; - -/***/ }), -/* 21 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(10); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _NavBar = __webpack_require__(7); - -var _NavBar2 = _interopRequireDefault(_NavBar); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var ErrorPage = function (_React$Component) { - _inherits(ErrorPage, _React$Component); - - function ErrorPage() { - _classCallCheck(this, ErrorPage); - - return _possibleConstructorReturn(this, (ErrorPage.__proto__ || Object.getPrototypeOf(ErrorPage)).apply(this, arguments)); - } - - _createClass(ErrorPage, [{ - key: 'render', - value: function render() { - var error = this.props.error; - - return _react2.default.createElement( - 'div', - null, - _react2.default.createElement(_NavBar2.default, null), - _react2.default.createElement( - 'div', - { className: 'row row--padded' }, - _react2.default.createElement( - 'p', - null, - error - ) - ) - ); - } - }]); - - return ErrorPage; -}(_react2.default.Component); - -; - -ErrorPage.propTypes = { - error: _propTypes2.default.string.isRequired -}; - -exports.default = ErrorPage; - -/***/ }), -/* 22 */ -/***/ (function(module, exports) { - -module.exports = require("passport"); - -/***/ }), -/* 23 */ -/***/ (function(module, exports) { - -module.exports = require("passport-local"); - -/***/ }), -/* 24 */ -/***/ (function(module, exports) { - -module.exports = require("sequelize"); - -/***/ }), -/* 25 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = { - returnShortId: function returnShortId(claimsArray, longId) { - var claimIndex = void 0; - var shortId = longId.substring(0, 1); // default short id is the first letter - var shortIdLength = 0; - // find the index of this claim id - claimIndex = claimsArray.findIndex(function (element) { - return element.claimId === longId; - }); - if (claimIndex < 0) { - throw new Error('claim id not found in claims list'); - } - // get an array of all claims with lower height - var possibleMatches = claimsArray.slice(0, claimIndex); - // remove certificates with the same prefixes until none are left. - while (possibleMatches.length > 0) { - shortIdLength += 1; - shortId = longId.substring(0, shortIdLength); - possibleMatches = possibleMatches.filter(function (element) { - return element.claimId && element.claimId.substring(0, shortIdLength) === shortId; - }); - } - return shortId; - } -}; - -/***/ }), -/* 26 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var logger = __webpack_require__(2); -var fs = __webpack_require__(79); - -var _require = __webpack_require__(5), - details = _require.details, - publishing = _require.publishing; - -module.exports = { - parsePublishApiRequestBody: function parsePublishApiRequestBody(_ref) { - var name = _ref.name, - nsfw = _ref.nsfw, - license = _ref.license, - title = _ref.title, - description = _ref.description, - thumbnail = _ref.thumbnail; - - // validate name - if (!name) { - throw new Error('no name field found in request'); - } - var invalidNameCharacters = /[^A-Za-z0-9,-]/.exec(name); - if (invalidNameCharacters) { - throw new Error('The claim name you provided is not allowed. Only the following characters are allowed: A-Z, a-z, 0-9, and "-"'); - } - // optional parameters - nsfw = nsfw === 'true'; - license = license || null; - title = title || null; - description = description || null; - thumbnail = thumbnail || null; - // return results - return { - name: name, - nsfw: nsfw, - license: license, - title: title, - description: description, - thumbnail: thumbnail - }; - }, - parsePublishApiRequestFiles: function parsePublishApiRequestFiles(_ref2) { - var file = _ref2.file, - thumbnail = _ref2.thumbnail; - - // make sure a file was provided - if (!file) { - throw new Error('no file with key of [file] found in request'); - } - if (!file.path) { - throw new Error('no file path found'); - } - if (!file.type) { - throw new Error('no file type found'); - } - if (!file.size) { - throw new Error('no file type found'); - } - // validate the file name - if (/'/.test(file.name)) { - throw new Error('apostrophes are not allowed in the file name'); - } - // validate the file - module.exports.validateFileTypeAndSize(file); - // return results - return { - fileName: file.name, - filePath: file.path, - fileType: file.type, - thumbnailFileName: thumbnail ? thumbnail.name : null, - thumbnailFilePath: thumbnail ? thumbnail.path : null, - thumbnailFileType: thumbnail ? thumbnail.type : null - }; - }, - validateFileTypeAndSize: function validateFileTypeAndSize(file) { - // check file type and size - switch (file.type) { - case 'image/jpeg': - case 'image/jpg': - case 'image/png': - if (file.size > 10000000) { - logger.debug('publish > file validation > .jpeg/.jpg/.png was too big'); - throw new Error('Sorry, images are limited to 10 megabytes.'); - } - break; - case 'image/gif': - if (file.size > 50000000) { - logger.debug('publish > file validation > .gif was too big'); - throw new Error('Sorry, .gifs are limited to 50 megabytes.'); - } - break; - case 'video/mp4': - if (file.size > 50000000) { - logger.debug('publish > file validation > .mp4 was too big'); - throw new Error('Sorry, videos are limited to 50 megabytes.'); - } - break; - default: - logger.debug('publish > file validation > unrecognized file type'); - throw new Error('The ' + file.type + ' content type is not supported. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.'); - } - return file; - }, - createBasicPublishParams: function createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail) { - logger.debug('Creating Publish Parameters'); - // provide defaults for title - if (title === null || title.trim() === '') { - title = name; - } - // provide default for description - if (description === null || description.trim() === '') { - description = ''; - } - // provide default for license - if (license === null || license.trim() === '') { - license = ' '; // default to empty string - } - // create the publish params - var publishParams = { - name: name, - file_path: filePath, - bid: 0.01, - metadata: { - description: description, - title: title, - author: details.title, - language: 'en', - license: license, - nsfw: nsfw - }, - claim_address: publishing.primaryClaimAddress - }; - // add thumbnail to channel if video - if (thumbnail) { - publishParams['metadata']['thumbnail'] = thumbnail; - } - return publishParams; - }, - createThumbnailPublishParams: function createThumbnailPublishParams(thumbnailFilePath, claimName, license, nsfw) { - if (!thumbnailFilePath) { - return; - } - logger.debug('Creating Thumbnail Publish Parameters'); - // create the publish params - return { - name: claimName + '-thumb', - file_path: thumbnailFilePath, - bid: 0.01, - metadata: { - title: claimName + ' thumbnail', - description: 'a thumbnail for ' + claimName, - author: details.title, - language: 'en', - license: license, - nsfw: nsfw - }, - claim_address: publishing.primaryClaimAddress, - channel_name: publishing.thumbnailChannel, - channel_id: publishing.thumbnailChannelId - }; - }, - deleteTemporaryFile: function deleteTemporaryFile(filePath) { - fs.unlink(filePath, function (err) { - if (err) { - logger.error('error deleting temporary file ' + filePath); - throw err; - } - logger.debug('successfully deleted ' + filePath); - }); - }, - addGetResultsToFileData: function addGetResultsToFileData(fileInfo, getResult) { - fileInfo.fileName = getResult.file_name; - fileInfo.filePath = getResult.download_path; - return fileInfo; - }, - createFileData: function createFileData(_ref3) { - var name = _ref3.name, - claimId = _ref3.claimId, - outpoint = _ref3.outpoint, - height = _ref3.height, - address = _ref3.address, - nsfw = _ref3.nsfw, - contentType = _ref3.contentType; - - return { - name: name, - claimId: claimId, - outpoint: outpoint, - height: height, - address: address, - fileName: '', - filePath: '', - fileType: contentType, - nsfw: nsfw - }; - } -}; - -/***/ }), -/* 27 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var logger = __webpack_require__(2); - -module.exports = { - handleErrorResponse: function handleErrorResponse(originalUrl, ip, error, res) { - logger.error('Error on ' + originalUrl, module.exports.useObjectPropertiesIfNoKeys(error)); - - var _module$exports$retur = module.exports.returnErrorMessageAndStatus(error), - _module$exports$retur2 = _slicedToArray(_module$exports$retur, 2), - status = _module$exports$retur2[0], - message = _module$exports$retur2[1]; - - res.status(status).json(module.exports.createErrorResponsePayload(status, message)); - }, - returnErrorMessageAndStatus: function returnErrorMessageAndStatus(error) { - var status = void 0, - message = void 0; - // check for daemon being turned off - if (error.code === 'ECONNREFUSED') { - status = 503; - message = 'Connection refused. The daemon may not be running.'; - // fallback for everything else - } else { - status = 400; - if (error.message) { - message = error.message; - } else { - message = error; - }; - }; - return [status, message]; - }, - useObjectPropertiesIfNoKeys: function useObjectPropertiesIfNoKeys(err) { - if (Object.keys(err).length === 0) { - var newErrorObject = {}; - Object.getOwnPropertyNames(err).forEach(function (key) { - newErrorObject[key] = err[key]; - }); - return newErrorObject; - } - return err; - }, - createErrorResponsePayload: function createErrorResponsePayload(status, message) { - return { - status: status, - success: false, - message: message - }; - } -}; - -/***/ }), -/* 28 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var db = __webpack_require__(6); -var logger = __webpack_require__(2); - -var _require = __webpack_require__(81), - returnPaginatedChannelClaims = _require.returnPaginatedChannelClaims; - -var NO_CHANNEL = 'NO_CHANNEL'; -var NO_CLAIM = 'NO_CLAIM'; -var NO_FILE = 'NO_FILE'; - -module.exports = { - getClaimId: function getClaimId(channelName, channelClaimId, name, claimId) { - if (channelName) { - return module.exports.getClaimIdByChannel(channelName, channelClaimId, name); - } else { - return module.exports.getClaimIdByClaim(name, claimId); - } - }, - getClaimIdByClaim: function getClaimIdByClaim(claimName, claimId) { - logger.debug('getClaimIdByClaim(' + claimName + ', ' + claimId + ')'); - return new Promise(function (resolve, reject) { - db.Claim.getLongClaimId(claimName, claimId).then(function (longClaimId) { - if (!longClaimId) { - resolve(NO_CLAIM); - } - resolve(longClaimId); - }).catch(function (error) { - reject(error); - }); - }); - }, - getClaimIdByChannel: function getClaimIdByChannel(channelName, channelClaimId, claimName) { - logger.debug('getClaimIdByChannel(' + channelName + ', ' + channelClaimId + ', ' + claimName + ')'); - return new Promise(function (resolve, reject) { - db.Certificate.getLongChannelId(channelName, channelClaimId) // 1. get the long channel id - .then(function (longChannelId) { - if (!longChannelId) { - return [null, null]; - } - return Promise.all([longChannelId, db.Claim.getClaimIdByLongChannelId(longChannelId, claimName)]); // 2. get the long claim id - }).then(function (_ref) { - var _ref2 = _slicedToArray(_ref, 2), - longChannelId = _ref2[0], - longClaimId = _ref2[1]; - - if (!longChannelId) { - return resolve(NO_CHANNEL); - } - if (!longClaimId) { - return resolve(NO_CLAIM); - } - resolve(longClaimId); - }).catch(function (error) { - reject(error); - }); - }); - }, - getChannelData: function getChannelData(channelName, channelClaimId, page) { - return new Promise(function (resolve, reject) { - // 1. get the long channel Id (make sure channel exists) - db.Certificate.getLongChannelId(channelName, channelClaimId).then(function (longChannelClaimId) { - if (!longChannelClaimId) { - return [null, null, null]; - } - // 2. get the short ID and all claims for that channel - return Promise.all([longChannelClaimId, db.Certificate.getShortChannelIdFromLongChannelId(longChannelClaimId, channelName)]); - }).then(function (_ref3) { - var _ref4 = _slicedToArray(_ref3, 2), - longChannelClaimId = _ref4[0], - shortChannelClaimId = _ref4[1]; - - if (!longChannelClaimId) { - return resolve(NO_CHANNEL); - } - // 3. return all the channel information - resolve({ - channelName: channelName, - longChannelClaimId: longChannelClaimId, - shortChannelClaimId: shortChannelClaimId - }); - }).catch(function (error) { - reject(error); - }); - }); - }, - getChannelClaims: function getChannelClaims(channelName, channelClaimId, page) { - return new Promise(function (resolve, reject) { - // 1. get the long channel Id (make sure channel exists) - db.Certificate.getLongChannelId(channelName, channelClaimId).then(function (longChannelClaimId) { - if (!longChannelClaimId) { - return [null, null, null]; - } - // 2. get the short ID and all claims for that channel - return Promise.all([longChannelClaimId, db.Claim.getAllChannelClaims(longChannelClaimId)]); - }).then(function (_ref5) { - var _ref6 = _slicedToArray(_ref5, 2), - longChannelClaimId = _ref6[0], - channelClaimsArray = _ref6[1]; - - if (!longChannelClaimId) { - return resolve(NO_CHANNEL); - } - // 3. format the data for the view, including pagination - var paginatedChannelViewData = returnPaginatedChannelClaims(channelName, longChannelClaimId, channelClaimsArray, page); - // 4. return all the channel information and contents - resolve(paginatedChannelViewData); - }).catch(function (error) { - reject(error); - }); - }); - }, - getLocalFileRecord: function getLocalFileRecord(claimId, name) { - return db.File.findOne({ where: { claimId: claimId, name: name } }).then(function (file) { - if (!file) { - return NO_FILE; - } - return file.dataValues; - }); - } -}; - -/***/ }), -/* 29 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _server = __webpack_require__(30); - -var _redux = __webpack_require__(18); - -var _index = __webpack_require__(31); - -var _index2 = _interopRequireDefault(_index); - -var _reactRedux = __webpack_require__(1); - -var _reactRouterDom = __webpack_require__(3); - -var _index3 = __webpack_require__(36); - -var _index4 = _interopRequireDefault(_index3); - -var _app = __webpack_require__(37); - -var _app2 = _interopRequireDefault(_app); - -var _renderFullPage = __webpack_require__(43); - -var _renderFullPage2 = _interopRequireDefault(_renderFullPage); - -var _reactHelmet = __webpack_require__(14); - -var _reactHelmet2 = _interopRequireDefault(_reactHelmet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = function (req, res) { - var context = {}; - - // create a new Redux store instance - var store = (0, _redux.createStore)(_index2.default); - - // render component to a string - var html = (0, _server.renderToString)(_react2.default.createElement( - _reactRedux.Provider, - { store: store }, - _react2.default.createElement( - _reactRouterDom.StaticRouter, - { location: req.url, context: context }, - _react2.default.createElement( - _index4.default, - null, - _react2.default.createElement(_app2.default, null) - ) - ) - )); - - // get head tags from helmet - var helmet = _reactHelmet2.default.renderStatic(); - - // check for a redirect - if (context.url) { - // Somewhere a `` was rendered - return res.redirect(301, context.url); - } else {} - // we're good, send the response - - - // get the initial state from our Redux store - var preloadedState = store.getState(); - - // send the rendered page back to the client - res.send((0, _renderFullPage2.default)(helmet, html, preloadedState)); -}; - -/***/ }), -/* 30 */ -/***/ (function(module, exports) { - -module.exports = require("react-dom/server"); - -/***/ }), -/* 31 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _redux = __webpack_require__(18); - -var _publish = __webpack_require__(83); - -var _publish2 = _interopRequireDefault(_publish); - -var _channel = __webpack_require__(84); - -var _channel2 = _interopRequireDefault(_channel); - -var _show = __webpack_require__(85); - -var _show2 = _interopRequireDefault(_show); - -var _site = __webpack_require__(86); - -var _site2 = _interopRequireDefault(_site); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = (0, _redux.combineReducers)({ - channel: _channel2.default, - publish: _publish2.default, - show: _show2.default, - site: _site2.default -}); - -/***/ }), -/* 32 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var FILE_SELECTED = exports.FILE_SELECTED = 'FILE_SELECTED'; -var FILE_CLEAR = exports.FILE_CLEAR = 'FILE_CLEAR'; -var METADATA_UPDATE = exports.METADATA_UPDATE = 'METADATA_UPDATE'; -var CLAIM_UPDATE = exports.CLAIM_UPDATE = 'CLAIM_UPDATE'; -var SET_PUBLISH_IN_CHANNEL = exports.SET_PUBLISH_IN_CHANNEL = 'SET_PUBLISH_IN_CHANNEL'; -var PUBLISH_STATUS_UPDATE = exports.PUBLISH_STATUS_UPDATE = 'PUBLISH_STATUS_UPDATE'; -var ERROR_UPDATE = exports.ERROR_UPDATE = 'ERROR_UPDATE'; -var SELECTED_CHANNEL_UPDATE = exports.SELECTED_CHANNEL_UPDATE = 'SELECTED_CHANNEL_UPDATE'; -var TOGGLE_METADATA_INPUTS = exports.TOGGLE_METADATA_INPUTS = 'TOGGLE_METADATA_INPUTS'; -var THUMBNAIL_NEW = exports.THUMBNAIL_NEW = 'THUMBNAIL_NEW'; -var PUBLISH_START = exports.PUBLISH_START = 'PUBLISH_START'; - -/***/ }), -/* 33 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var LOGIN = exports.LOGIN = 'Existing'; -var CREATE = exports.CREATE = 'New'; - -/***/ }), -/* 34 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var CHANNEL_UPDATE = exports.CHANNEL_UPDATE = 'CHANNEL_UPDATE'; - -/***/ }), -/* 35 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var LOCAL_CHECK = exports.LOCAL_CHECK = 'LOCAL_CHECK'; -var UNAVAILABLE = exports.UNAVAILABLE = 'UNAVAILABLE'; -var ERROR = exports.ERROR = 'ERROR'; -var AVAILABLE = exports.AVAILABLE = 'AVAILABLE'; - -/***/ }), -/* 36 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _reactGa = __webpack_require__(87); - -var _reactGa2 = _interopRequireDefault(_reactGa); - -var _reactRouterDom = __webpack_require__(3); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var _require = __webpack_require__(5), - googleId = _require.analytics.googleId; - -_reactGa2.default.initialize(googleId); - -var GAListener = function (_React$Component) { - _inherits(GAListener, _React$Component); - - function GAListener() { - _classCallCheck(this, GAListener); - - return _possibleConstructorReturn(this, (GAListener.__proto__ || Object.getPrototypeOf(GAListener)).apply(this, arguments)); - } - - _createClass(GAListener, [{ - key: 'componentDidMount', - value: function componentDidMount() { - this.sendPageView(this.props.history.location); - this.props.history.listen(this.sendPageView); - } - }, { - key: 'sendPageView', - value: function sendPageView(location) { - _reactGa2.default.set({ page: location.pathname }); - _reactGa2.default.pageview(location.pathname); - } - }, { - key: 'render', - value: function render() { - return this.props.children; - } - }]); - - return GAListener; -}(_react2.default.Component); - -exports.default = (0, _reactRouterDom.withRouter)(GAListener); - -/***/ }), -/* 37 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _reactRouterDom = __webpack_require__(3); - -var _HomePage = __webpack_require__(88); - -var _HomePage2 = _interopRequireDefault(_HomePage); - -var _AboutPage = __webpack_require__(125); - -var _AboutPage2 = _interopRequireDefault(_AboutPage); - -var _LoginPage = __webpack_require__(126); - -var _LoginPage2 = _interopRequireDefault(_LoginPage); - -var _ShowPage = __webpack_require__(128); - -var _ShowPage2 = _interopRequireDefault(_ShowPage); - -var _FourOhFourPage = __webpack_require__(145); - -var _FourOhFourPage2 = _interopRequireDefault(_FourOhFourPage); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// or use the provided local homepage -var App = function App() { - return _react2.default.createElement( - _reactRouterDom.Switch, - null, - _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/', component: _HomePage2.default }), - _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/about', component: _AboutPage2.default }), - _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/login', component: _LoginPage2.default }), - _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/:identifier/:claim', component: _ShowPage2.default }), - _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/:claim', component: _ShowPage2.default }), - _react2.default.createElement(_reactRouterDom.Route, { component: _FourOhFourPage2.default }) - ); -}; - -exports.default = App; - -/***/ }), -/* 38 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _publish = __webpack_require__(4); - -var _view = __webpack_require__(99); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var publish = _ref.publish; - - return { - file: publish.file, - thumbnail: publish.thumbnail, - fileError: publish.error.file - }; -}; - -var mapDispatchToProps = function mapDispatchToProps(dispatch) { - return { - selectFile: function selectFile(file) { - dispatch((0, _publish.selectFile)(file)); - }, - setFileError: function setFileError(value) { - dispatch((0, _publish.clearFile)()); - dispatch((0, _publish.updateError)('file', value)); - } - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); - -/***/ }), -/* 39 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _channel = __webpack_require__(19); - -var _view = __webpack_require__(116); - -var _view2 = _interopRequireDefault(_view); - -var _publish = __webpack_require__(4); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapDispatchToProps = function mapDispatchToProps(dispatch) { - return { - onChannelLogin: function onChannelLogin(name, shortId, longId) { - dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId)); - dispatch((0, _publish.updateSelectedChannel)(name)); - } - }; -}; - -exports.default = (0, _reactRedux.connect)(null, mapDispatchToProps)(_view2.default); - -/***/ }), -/* 40 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _channel = __webpack_require__(19); - -var _view = __webpack_require__(117); - -var _view2 = _interopRequireDefault(_view); - -var _publish = __webpack_require__(4); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapDispatchToProps = function mapDispatchToProps(dispatch) { - return { - onChannelLogin: function onChannelLogin(name, shortId, longId) { - dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId)); - dispatch((0, _publish.updateSelectedChannel)(name)); - } - }; -}; - -exports.default = (0, _reactRedux.connect)(null, mapDispatchToProps)(_view2.default); - -/***/ }), -/* 41 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var CHANNEL = exports.CHANNEL = 'CHANNEL'; -var ASSET_LITE = exports.ASSET_LITE = 'ASSET_LITE'; -var ASSET_DETAILS = exports.ASSET_DETAILS = 'ASSET_DETAILS'; - -/***/ }), -/* 42 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _view = __webpack_require__(132); - -var _view2 = _interopRequireDefault(_view); - -var _show = __webpack_require__(8); - -var _show2 = __webpack_require__(13); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var show = _ref.show; - - // select error and status - var error = show.displayAsset.error; - var status = show.displayAsset.status; - // select asset - var asset = (0, _show2.selectAsset)(show); - // return props - return { - error: error, - status: status, - asset: asset - }; -}; - -var mapDispatchToProps = function mapDispatchToProps(dispatch) { - return { - onFileRequest: function onFileRequest(name, claimId) { - dispatch((0, _show.fileRequested)(name, claimId)); - } - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); - -/***/ }), -/* 43 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = function (helmet, html, preloadedState) { - // take the html and preloadedState and return the full page - return '\n \n \n \n \n \n \n \n ' + helmet.title.toString() + '\n ' + helmet.meta.toString() + '\n ' + helmet.link.toString() + '\n \n \n \n \n \n \n \n \n
\n
' + html + '
\n
\n \n \n \n \n '; -}; - -/***/ }), -/* 44 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var selectSiteState = exports.selectSiteState = function selectSiteState(state) { - return state.site; -}; - -var selectSiteHost = exports.selectSiteHost = function selectSiteHost(state) { - return state.site.host; -}; - -/***/ }), -/* 45 */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(46); -__webpack_require__(47); -module.exports = __webpack_require__(48); - - -/***/ }), -/* 46 */ -/***/ (function(module, exports) { - -module.exports = require("babel-polyfill"); - -/***/ }), -/* 47 */ -/***/ (function(module, exports) { - -module.exports = require("whatwg-fetch"); - -/***/ }), -/* 48 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -// app dependencies -var express = __webpack_require__(49); -var bodyParser = __webpack_require__(50); -var expressHandlebars = __webpack_require__(51); -var Handlebars = __webpack_require__(52); -var helmet = __webpack_require__(53); -var passport = __webpack_require__(22); - -var _require = __webpack_require__(54), - serializeSpeechUser = _require.serializeSpeechUser, - deserializeSpeechUser = _require.deserializeSpeechUser; - -var cookieSession = __webpack_require__(55); -var http = __webpack_require__(56); -// logging dependencies -var logger = __webpack_require__(2); -// configure logger -__webpack_require__(57)(logger); -__webpack_require__(59)(logger); - -var _require2 = __webpack_require__(5), - sessionKey = _require2.auth.sessionKey, - PORT = _require2.details.port; - -// create an Express application - - -var app = express(); - -// trust the proxy to get ip address for us -app.enable('trust proxy'); - -// add middleware -app.use(helmet()); // set HTTP headers to protect against well-known web vulnerabilties -app.use(express.static(__dirname + '/public')); // 'express.static' to serve static files from public directory -app.use(bodyParser.json()); // 'body parser' for parsing application/json -app.use(bodyParser.urlencoded({ extended: true })); // 'body parser' for parsing application/x-www-form-urlencoded -app.use(function (req, res, next) { - // custom logging middleware to log all incoming http requests - logger.verbose('Request on ' + req.originalUrl + ' from ' + req.ip); - next(); -}); - -// configure passport -passport.serializeUser(serializeSpeechUser); -passport.deserializeUser(deserializeSpeechUser); -var localSignupStrategy = __webpack_require__(62); -var localLoginStrategy = __webpack_require__(74); -passport.use('local-signup', localSignupStrategy); -passport.use('local-login', localLoginStrategy); -// initialize passport -app.use(cookieSession({ - name: 'session', - keys: [sessionKey], - maxAge: 24 * 60 * 60 * 1000 // i.e. 24 hours -})); -app.use(passport.initialize()); -app.use(passport.session()); - -// configure handlebars & register it with express app -var hbs = expressHandlebars.create({ - defaultLayout: 'embed', - handlebars: Handlebars -}); -app.engine('handlebars', hbs.engine); -app.set('view engine', 'handlebars'); - -// set the routes on the app -__webpack_require__(75)(app); -__webpack_require__(76)(app); -__webpack_require__(82)(app); -__webpack_require__(147)(app); -__webpack_require__(158)(app); - -// create server -var server = http.Server(app); - -// sync sequelize -var db = __webpack_require__(6); -db.sequelize.sync() -// start the server -.then(function () { - server.listen(PORT, function () { - logger.info('Server is listening on PORT ' + PORT); - }); -}).catch(function (error) { - logger.error('Startup Error:', error); -}); - -/***/ }), -/* 49 */ -/***/ (function(module, exports) { - -module.exports = require("express"); - -/***/ }), -/* 50 */ -/***/ (function(module, exports) { - -module.exports = require("body-parser"); - -/***/ }), -/* 51 */ -/***/ (function(module, exports) { - -module.exports = require("express-handlebars"); - -/***/ }), -/* 52 */ -/***/ (function(module, exports) { - -module.exports = require("handlebars"); - -/***/ }), -/* 53 */ -/***/ (function(module, exports) { - -module.exports = require("helmet"); - -/***/ }), -/* 54 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var logger = __webpack_require__(2); - -module.exports = { - serializeSpeechUser: function serializeSpeechUser(user, done) { - // returns user data to be serialized into session - logger.debug('serializing user'); - done(null, user); - }, - deserializeSpeechUser: function deserializeSpeechUser(user, done) { - // deserializes session and populates additional info to req.user - logger.debug('deserializing user'); - done(null, user); - } -}; - -/***/ }), -/* 55 */ -/***/ (function(module, exports) { - -module.exports = require("cookie-session"); - -/***/ }), -/* 56 */ -/***/ (function(module, exports) { - -module.exports = require("http"); - -/***/ }), -/* 57 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _require = __webpack_require__(58), - logLevel = _require.logLevel; - -module.exports = function (winston) { - // configure - winston.configure({ - transports: [new winston.transports.Console({ - level: logLevel, - timestamp: false, - colorize: true, - prettyPrint: true, - handleExceptions: true, - humanReadableUnhandledException: true - })] - }); - // test all the log levels - winston.error('Level 0'); - winston.warn('Level 1'); - winston.info('Level 2'); - winston.verbose('Level 3'); - winston.debug('Level 4'); - winston.silly('Level 5'); -}; - -/***/ }), -/* 58 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var loggerConfig = { - logLevel: 'debug' // options: silly, debug, verbose, info -}; - -module.exports = loggerConfig; - -/***/ }), -/* 59 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var winstonSlackWebHook = __webpack_require__(60).SlackWebHook; -var slackConfig = __webpack_require__(61); - -module.exports = function (winston) { - var slackWebHook = slackConfig.slackWebHook, - slackErrorChannel = slackConfig.slackErrorChannel, - slackInfoChannel = slackConfig.slackInfoChannel; - - if (slackWebHook) { - // add a transport for errors to slack - if (slackErrorChannel) { - winston.add(winstonSlackWebHook, { - name: 'slack-errors-transport', - level: 'warn', - webhookUrl: slackWebHook, - channel: slackErrorChannel, - username: 'spee.ch', - iconEmoji: ':face_with_head_bandage:' - }); - }; - if (slackInfoChannel) { - winston.add(winstonSlackWebHook, { - name: 'slack-info-transport', - level: 'info', - webhookUrl: slackWebHook, - channel: slackInfoChannel, - username: 'spee.ch', - iconEmoji: ':nerd_face:' - }); - }; - // send test message - winston.error('Slack "error" logging is online.'); - winston.info('Slack "info" logging is online.'); - } else { - winston.warn('Slack logging is not enabled because no slackWebHook config var provided.'); - } -}; - -/***/ }), -/* 60 */ -/***/ (function(module, exports) { - -module.exports = require("winston-slack-webhook"); - -/***/ }), -/* 61 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function SlackConfig() { - this.slackWebHook = 'default'; - this.slackErrorChannel = 'default'; - this.slackInfoChannel = 'default'; -}; - -module.exports = new SlackConfig(); - -/***/ }), -/* 62 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var PassportLocalStrategy = __webpack_require__(23).Strategy; -var lbryApi = __webpack_require__(16); -var logger = __webpack_require__(2); -var db = __webpack_require__(6); - -module.exports = new PassportLocalStrategy({ - usernameField: 'username', - passwordField: 'password' -}, function (username, password, done) { - logger.verbose('new channel signup request. user: ' + username + ' pass: ' + password + ' .'); - var userInfo = {}; - // server-side validaton of inputs (username, password) - - // create the channel and retrieve the metadata - return lbryApi.createChannel('@' + username).then(function (tx) { - // create user record - var userData = { - userName: username, - password: password - }; - logger.verbose('userData >', userData); - // create user record - var channelData = { - channelName: '@' + username, - channelClaimId: tx.claim_id - }; - logger.verbose('channelData >', channelData); - // create certificate record - var certificateData = { - claimId: tx.claim_id, - name: '@' + username - // address, - }; - logger.verbose('certificateData >', certificateData); - // save user and certificate to db - return Promise.all([db.User.create(userData), db.Channel.create(channelData), db.Certificate.create(certificateData)]); - }).then(function (_ref) { - var _ref2 = _slicedToArray(_ref, 3), - newUser = _ref2[0], - newChannel = _ref2[1], - newCertificate = _ref2[2]; - - logger.verbose('user and certificate successfully created'); - // store the relevant newUser info to be passed back for req.User - userInfo['id'] = newUser.id; - userInfo['userName'] = newUser.userName; - userInfo['channelName'] = newChannel.channelName; - userInfo['channelClaimId'] = newChannel.channelClaimId; - // associate the instances - return Promise.all([newCertificate.setChannel(newChannel), newChannel.setUser(newUser)]); - }).then(function () { - logger.verbose('user and certificate successfully associated'); - return db.Certificate.getShortChannelIdFromLongChannelId(userInfo.channelClaimId, userInfo.channelName); - }).then(function (shortChannelId) { - userInfo['shortChannelId'] = shortChannelId; - return done(null, userInfo); - }).catch(function (error) { - logger.error('signup error', error); - return done(error); - }); -}); - -/***/ }), -/* 63 */ -/***/ (function(module, exports) { - -module.exports = require("axios"); - -/***/ }), -/* 64 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var lbryConfig = { - api: { - apiHost: 'localhost', - apiPort: '5279' - } -}; - -module.exports = lbryConfig; - -/***/ }), -/* 65 */ -/***/ (function(module, exports) { - -module.exports = require("universal-analytics"); - -/***/ }), -/* 66 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function MysqlConfig() { - this.database = 'default'; - this.username = 'default'; - this.password = 'default'; -}; - -module.exports = new MysqlConfig(); - -/***/ }), -/* 67 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var logger = __webpack_require__(2); - -var _require = __webpack_require__(25), - returnShortId = _require.returnShortId; - -module.exports = function (sequelize, _ref) { - var STRING = _ref.STRING, - BOOLEAN = _ref.BOOLEAN, - INTEGER = _ref.INTEGER, - TEXT = _ref.TEXT, - DECIMAL = _ref.DECIMAL; - - var Certificate = sequelize.define('Certificate', { - address: { - type: STRING, - default: null - }, - amount: { - type: DECIMAL(19, 8), - default: null - }, - claimId: { - type: STRING, - default: null - }, - claimSequence: { - type: INTEGER, - default: null - }, - decodedClaim: { - type: BOOLEAN, - default: null - }, - depth: { - type: INTEGER, - default: null - }, - effectiveAmount: { - type: DECIMAL(19, 8), - default: null - }, - hasSignature: { - type: BOOLEAN, - default: null - }, - height: { - type: INTEGER, - default: null - }, - hex: { - type: TEXT('long'), - default: null - }, - name: { - type: STRING, - default: null - }, - nout: { - type: INTEGER, - default: null - }, - txid: { - type: STRING, - default: null - }, - validAtHeight: { - type: INTEGER, - default: null - }, - outpoint: { - type: STRING, - default: null - }, - valueVersion: { - type: STRING, - default: null - }, - claimType: { - type: STRING, - default: null - }, - certificateVersion: { - type: STRING, - default: null - }, - keyType: { - type: STRING, - default: null - }, - publicKey: { - type: TEXT('long'), - default: null - } - }, { - freezeTableName: true - }); - - Certificate.associate = function (db) { - Certificate.belongsTo(db.Channel, { - foreignKey: { - allowNull: true - } - }); - }; - - Certificate.getShortChannelIdFromLongChannelId = function (longChannelId, channelName) { - var _this = this; - - logger.debug('getShortChannelIdFromLongChannelId ' + channelName + ':' + longChannelId); - return new Promise(function (resolve, reject) { - _this.findAll({ - where: { name: channelName }, - order: [['height', 'ASC']] - }).then(function (result) { - switch (result.length) { - case 0: - throw new Error('No channel(s) found with that channel name'); - default: - return resolve(returnShortId(result, longChannelId)); - } - }).catch(function (error) { - reject(error); - }); - }); - }; - - Certificate.getLongChannelIdFromShortChannelId = function (channelName, channelClaimId) { - var _this2 = this; - - logger.debug('getLongChannelIdFromShortChannelId(' + channelName + ', ' + channelClaimId + ')'); - return new Promise(function (resolve, reject) { - _this2.findAll({ - where: { - name: channelName, - claimId: { - $like: channelClaimId + '%' - } - }, - order: [['height', 'ASC']] - }).then(function (result) { - switch (result.length) { - case 0: - return resolve(null); - default: - // note results must be sorted - return resolve(result[0].claimId); - } - }).catch(function (error) { - reject(error); - }); - }); - }; - - Certificate.getLongChannelIdFromChannelName = function (channelName) { - var _this3 = this; - - logger.debug('getLongChannelIdFromChannelName(' + channelName + ')'); - return new Promise(function (resolve, reject) { - _this3.findAll({ - where: { name: channelName }, - order: [['effectiveAmount', 'DESC'], ['height', 'ASC']] - }).then(function (result) { - switch (result.length) { - case 0: - return resolve(null); - default: - return resolve(result[0].claimId); - } - }).catch(function (error) { - reject(error); - }); - }); - }; - - Certificate.validateLongChannelId = function (name, claimId) { - var _this4 = this; - - logger.debug('validateLongChannelId(' + name + ', ' + claimId + ')'); - return new Promise(function (resolve, reject) { - _this4.findOne({ - where: { name: name, claimId: claimId } - }).then(function (result) { - if (!result) { - return resolve(null); - }; - resolve(claimId); - }).catch(function (error) { - reject(error); - }); - }); - }; - - Certificate.getLongChannelId = function (channelName, channelClaimId) { - logger.debug('getLongChannelId(' + channelName + ', ' + channelClaimId + ')'); - if (channelClaimId && channelClaimId.length === 40) { - // if a full channel id is provided - return this.validateLongChannelId(channelName, channelClaimId); - } else if (channelClaimId && channelClaimId.length < 40) { - // if a short channel id is provided - return this.getLongChannelIdFromShortChannelId(channelName, channelClaimId); - } else { - return this.getLongChannelIdFromChannelName(channelName); // if no channel id provided - } - }; - - return Certificate; -}; - -/***/ }), -/* 68 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = function (sequelize, _ref) { - var STRING = _ref.STRING; - - var Channel = sequelize.define('Channel', { - channelName: { - type: STRING, - allowNull: false - }, - channelClaimId: { - type: STRING, - allowNull: false - } - }, { - freezeTableName: true - }); - - Channel.associate = function (db) { - Channel.belongsTo(db.User); - Channel.hasOne(db.Certificate); - }; - - return Channel; -}; - -/***/ }), -/* 69 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var logger = __webpack_require__(2); - -var _require = __webpack_require__(25), - returnShortId = _require.returnShortId; - -var _require2 = __webpack_require__(5), - defaultThumbnail = _require2.assetDefaults.thumbnail, - host = _require2.details.host; - -function determineFileExtensionFromContentType(contentType) { - switch (contentType) { - case 'image/jpeg': - case 'image/jpg': - return 'jpeg'; - case 'image/png': - return 'png'; - case 'image/gif': - return 'gif'; - case 'video/mp4': - return 'mp4'; - default: - logger.debug('setting unknown file type as file extension jpeg'); - return 'jpeg'; - } -}; - -function determineThumbnail(storedThumbnail, defaultThumbnail) { - if (storedThumbnail === '') { - return defaultThumbnail; - } - return storedThumbnail; -}; - -function prepareClaimData(claim) { - // logger.debug('preparing claim data based on resolved data:', claim); - claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail); - claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType); - claim['host'] = host; - return claim; -}; - -module.exports = function (sequelize, _ref) { - var STRING = _ref.STRING, - BOOLEAN = _ref.BOOLEAN, - INTEGER = _ref.INTEGER, - TEXT = _ref.TEXT, - DECIMAL = _ref.DECIMAL; - - var Claim = sequelize.define('Claim', { - address: { - type: STRING, - default: null - }, - amount: { - type: DECIMAL(19, 8), - default: null - }, - claimId: { - type: STRING, - default: null - }, - claimSequence: { - type: INTEGER, - default: null - }, - decodedClaim: { - type: BOOLEAN, - default: null - }, - depth: { - type: INTEGER, - default: null - }, - effectiveAmount: { - type: DECIMAL(19, 8), - default: null - }, - hasSignature: { - type: BOOLEAN, - default: null - }, - height: { - type: INTEGER, - default: null - }, - hex: { - type: TEXT('long'), - default: null - }, - name: { - type: STRING, - default: null - }, - nout: { - type: INTEGER, - default: null - }, - txid: { - type: STRING, - default: null - }, - validAtHeight: { - type: INTEGER, - default: null - }, - outpoint: { - type: STRING, - default: null - }, - claimType: { - type: STRING, - default: null - }, - certificateId: { - type: STRING, - default: null - }, - author: { - type: STRING, - default: null - }, - description: { - type: TEXT('long'), - default: null - }, - language: { - type: STRING, - default: null - }, - license: { - type: STRING, - default: null - }, - licenseUrl: { - type: STRING, - default: null - }, - nsfw: { - type: BOOLEAN, - default: null - }, - preview: { - type: STRING, - default: null - }, - thumbnail: { - type: STRING, - default: null - }, - title: { - type: STRING, - default: null - }, - metadataVersion: { - type: STRING, - default: null - }, - contentType: { - type: STRING, - default: null - }, - source: { - type: STRING, - default: null - }, - sourceType: { - type: STRING, - default: null - }, - sourceVersion: { - type: STRING, - default: null - }, - streamVersion: { - type: STRING, - default: null - }, - valueVersion: { - type: STRING, - default: null - }, - channelName: { - type: STRING, - allowNull: true, - default: null - } - }, { - freezeTableName: true - }); - - Claim.associate = function (db) { - Claim.belongsTo(db.File, { - foreignKey: { - allowNull: true - } - }); - }; - - Claim.getShortClaimIdFromLongClaimId = function (claimId, claimName) { - var _this = this; - - logger.debug('Claim.getShortClaimIdFromLongClaimId for ' + claimName + '#' + claimId); - return new Promise(function (resolve, reject) { - _this.findAll({ - where: { name: claimName }, - order: [['height', 'ASC']] - }).then(function (result) { - switch (result.length) { - case 0: - throw new Error('No claim(s) found with that claim name'); - default: - resolve(returnShortId(result, claimId)); - } - }).catch(function (error) { - reject(error); - }); - }); - }; - - Claim.getAllChannelClaims = function (channelClaimId) { - var _this2 = this; - - logger.debug('Claim.getAllChannelClaims for ' + channelClaimId); - return new Promise(function (resolve, reject) { - _this2.findAll({ - where: { certificateId: channelClaimId }, - order: [['height', 'ASC']], - raw: true // returns an array of only data, not an array of instances - }).then(function (channelClaimsArray) { - // logger.debug('channelclaimsarray length:', channelClaimsArray.length); - switch (channelClaimsArray.length) { - case 0: - return resolve(null); - default: - channelClaimsArray.forEach(function (claim) { - claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType); - claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail); - return claim; - }); - return resolve(channelClaimsArray); - } - }).catch(function (error) { - reject(error); - }); - }); - }; - - Claim.getClaimIdByLongChannelId = function (channelClaimId, claimName) { - var _this3 = this; - - logger.debug('finding claim id for claim ' + claimName + ' from channel ' + channelClaimId); - return new Promise(function (resolve, reject) { - _this3.findAll({ - where: { name: claimName, certificateId: channelClaimId }, - order: [['id', 'ASC']] - }).then(function (result) { - switch (result.length) { - case 0: - return resolve(null); - case 1: - return resolve(result[0].claimId); - default: - logger.error(result.length + ' records found for "' + claimName + '" in channel "' + channelClaimId + '"'); - return resolve(result[0].claimId); - } - }).catch(function (error) { - reject(error); - }); - }); - }; - - Claim.getLongClaimIdFromShortClaimId = function (name, shortId) { - var _this4 = this; - - return new Promise(function (resolve, reject) { - _this4.findAll({ - where: { - name: name, - claimId: { - $like: shortId + '%' - } }, - order: [['height', 'ASC']] - }).then(function (result) { - switch (result.length) { - case 0: - return resolve(null); - default: - // note results must be sorted - return resolve(result[0].claimId); - } - }).catch(function (error) { - reject(error); - }); - }); - }; - - Claim.getTopFreeClaimIdByClaimName = function (name) { - var _this5 = this; - - return new Promise(function (resolve, reject) { - _this5.findAll({ - where: { name: name }, - order: [['effectiveAmount', 'DESC'], ['height', 'ASC']] // note: maybe height and effective amount need to switch? - }).then(function (result) { - logger.debug('length of result', result.length); - switch (result.length) { - case 0: - return resolve(null); - default: - return resolve(result[0].dataValues.claimId); - } - }).catch(function (error) { - reject(error); - }); - }); - }; - - Claim.validateLongClaimId = function (name, claimId) { - var _this6 = this; - - return new Promise(function (resolve, reject) { - _this6.findOne({ - where: { name: name, claimId: claimId } - }).then(function (result) { - if (!result) { - return resolve(null); - }; - resolve(claimId); - }).catch(function (error) { - reject(error); - }); - }); - }; - - Claim.getLongClaimId = function (claimName, claimId) { - logger.debug('getLongClaimId(' + claimName + ', ' + claimId + ')'); - if (claimId && claimId.length === 40) { - // if a full claim id is provided - return this.validateLongClaimId(claimName, claimId); - } else if (claimId && claimId.length < 40) { - return this.getLongClaimIdFromShortClaimId(claimName, claimId); // if a short claim id is provided - } else { - return this.getTopFreeClaimIdByClaimName(claimName); // if no claim id is provided - } - }; - - Claim.resolveClaim = function (name, claimId) { - var _this7 = this; - - logger.debug('Claim.resolveClaim: ' + name + ' ' + claimId); - return new Promise(function (resolve, reject) { - _this7.findAll({ - where: { name: name, claimId: claimId } - }).then(function (claimArray) { - switch (claimArray.length) { - case 0: - return resolve(null); - case 1: - return resolve(prepareClaimData(claimArray[0].dataValues)); - default: - logger.error('more than one record matches ' + name + '#' + claimId + ' in db.Claim'); - return resolve(prepareClaimData(claimArray[0].dataValues)); - } - }).catch(function (error) { - reject(error); - }); - }); - }; - - return Claim; -}; - -/***/ }), -/* 70 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = function (sequelize, _ref) { - var STRING = _ref.STRING, - BOOLEAN = _ref.BOOLEAN, - INTEGER = _ref.INTEGER; - - var File = sequelize.define('File', { - name: { - type: STRING, - allowNull: false - }, - claimId: { - type: STRING, - allowNull: false - }, - address: { - type: STRING, - allowNull: false - }, - outpoint: { - type: STRING, - allowNull: false - }, - height: { - type: INTEGER, - allowNull: false, - default: 0 - }, - fileName: { - type: STRING, - allowNull: false - }, - filePath: { - type: STRING, - allowNull: false - }, - fileType: { - type: STRING - }, - nsfw: { - type: BOOLEAN, - allowNull: false, - defaultValue: false - }, - trendingEligible: { - type: BOOLEAN, - allowNull: false, - defaultValue: true - } - }, { - freezeTableName: true - }); - - File.associate = function (db) { - File.hasMany(db.Request); - File.hasOne(db.Claim); - }; - - File.getRecentClaims = function () { - return this.findAll({ - where: { nsfw: false, trendingEligible: true }, - order: [['createdAt', 'DESC']], - limit: 25 - }); - }; - - return File; -}; - -/***/ }), -/* 71 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = function (sequelize, _ref) { - var STRING = _ref.STRING, - BOOLEAN = _ref.BOOLEAN, - TEXT = _ref.TEXT; - - var Request = sequelize.define('Request', { - action: { - type: STRING, - allowNull: false - }, - url: { - type: STRING, - allowNull: false - }, - ipAddress: { - type: STRING, - allowNull: true - }, - result: { - type: TEXT('long'), - allowNull: true, - default: null - } - }, { - freezeTableName: true - }); - - Request.associate = function (db) { - Request.belongsTo(db.File, { - foreignKey: { - allowNull: true - } - }); - }; - - return Request; -}; - -/***/ }), -/* 72 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var bcrypt = __webpack_require__(73); -var logger = __webpack_require__(2); - -module.exports = function (sequelize, _ref) { - var STRING = _ref.STRING; - - var User = sequelize.define('User', { - userName: { - type: STRING, - allowNull: false - }, - password: { - type: STRING, - allowNull: false - } - }, { - freezeTableName: true - }); - - User.associate = function (db) { - User.hasOne(db.Channel); - }; - - User.prototype.comparePassword = function (password) { - return bcrypt.compare(password, this.password); - }; - - User.prototype.changePassword = function (newPassword) { - var _this = this; - - return new Promise(function (resolve, reject) { - // generate a salt string to use for hashing - bcrypt.genSalt(function (saltError, salt) { - if (saltError) { - logger.error('salt error', saltError); - reject(saltError); - return; - } - // generate a hashed version of the user's password - bcrypt.hash(newPassword, salt, function (hashError, hash) { - // if there is an error with the hash generation return the error - if (hashError) { - logger.error('hash error', hashError); - reject(hashError); - return; - } - // replace the current password with the new hash - _this.update({ password: hash }).then(function () { - resolve(); - }).catch(function (error) { - reject(error); - }); - }); - }); - }); - }; - - // pre-save hook method to hash the user's password before the user's info is saved to the db. - User.hook('beforeCreate', function (user, options) { - logger.debug('User.beforeCreate hook...'); - return new Promise(function (resolve, reject) { - // generate a salt string to use for hashing - bcrypt.genSalt(function (saltError, salt) { - if (saltError) { - logger.error('salt error', saltError); - reject(saltError); - return; - } - // generate a hashed version of the user's password - bcrypt.hash(user.password, salt, function (hashError, hash) { - // if there is an error with the hash generation return the error - if (hashError) { - logger.error('hash error', hashError); - reject(hashError); - return; - } - // replace the password string with the hash password value - user.password = hash; - resolve(); - }); - }); - }); - }); - - return User; -}; - -/***/ }), -/* 73 */ -/***/ (function(module, exports) { - -module.exports = require("bcrypt"); - -/***/ }), -/* 74 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var PassportLocalStrategy = __webpack_require__(23).Strategy; -var logger = __webpack_require__(2); -var db = __webpack_require__(6); - -var returnUserAndChannelInfo = function returnUserAndChannelInfo(userInstance) { - return new Promise(function (resolve, reject) { - var userInfo = {}; - userInfo['id'] = userInstance.id; - userInfo['userName'] = userInstance.userName; - userInstance.getChannel().then(function (_ref) { - var channelName = _ref.channelName, - channelClaimId = _ref.channelClaimId; - - userInfo['channelName'] = channelName; - userInfo['channelClaimId'] = channelClaimId; - return db.Certificate.getShortChannelIdFromLongChannelId(channelClaimId, channelName); - }).then(function (shortChannelId) { - userInfo['shortChannelId'] = shortChannelId; - resolve(userInfo); - }).catch(function (error) { - reject(error); - }); - }); -}; - -module.exports = new PassportLocalStrategy({ - usernameField: 'username', - passwordField: 'password' -}, function (username, password, done) { - return db.User.findOne({ - where: { userName: username } - }).then(function (user) { - if (!user) { - logger.debug('no user found'); - return done(null, false, { message: 'Incorrect username or password' }); - } - return user.comparePassword(password).then(function (isMatch) { - if (!isMatch) { - logger.debug('incorrect password'); - return done(null, false, { message: 'Incorrect username or password' }); - } - logger.debug('Password was a match, returning User'); - return returnUserAndChannelInfo(user).then(function (userInfo) { - return done(null, userInfo); - }).catch(function (error) { - return error; - }); - }).catch(function (error) { - return error; - }); - }).catch(function (error) { - return done(error); - }); -}); - -/***/ }), -/* 75 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var logger = __webpack_require__(2); -var passport = __webpack_require__(22); - -module.exports = function (app) { - // route for sign up - app.post('/signup', passport.authenticate('local-signup'), function (req, res) { - logger.verbose('successful signup for ' + req.user.channelName); - res.status(200).json({ - success: true, - channelName: req.user.channelName, - channelClaimId: req.user.channelClaimId, - shortChannelId: req.user.shortChannelId - }); - }); - // route for log in - app.post('/login', function (req, res, next) { - passport.authenticate('local-login', function (err, user, info) { - if (err) { - return next(err); - } - if (!user) { - return res.status(400).json({ - success: false, - message: info.message - }); - } - logger.debug('successful login'); - req.logIn(user, function (err) { - if (err) { - return next(err); - } - return res.status(200).json({ - success: true, - channelName: req.user.channelName, - channelClaimId: req.user.channelClaimId, - shortChannelId: req.user.shortChannelId - }); - }); - })(req, res, next); - }); - // route to log out - app.get('/logout', function (req, res) { - req.logout(); - res.status(200).json({ success: true, message: 'you successfully logged out' }); - }); - // see if user is authenticated, and return credentials if so - app.get('/user', function (req, res) { - if (req.user) { - res.status(200).json({ success: true, data: req.user }); - } else { - res.status(401).json({ success: false, message: 'user is not logged in' }); - } - }); -}; - -/***/ }), -/* 76 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var logger = __webpack_require__(2); -var multipart = __webpack_require__(77); - -var _require = __webpack_require__(5), - uploadDirectory = _require.publishing.uploadDirectory, - host = _require.details.host; - -var multipartMiddleware = multipart({ uploadDir: uploadDirectory }); -var db = __webpack_require__(6); - -var _require2 = __webpack_require__(78), - claimNameIsAvailable = _require2.claimNameIsAvailable, - checkChannelAvailability = _require2.checkChannelAvailability, - publish = _require2.publish; - -var _require3 = __webpack_require__(16), - getClaimList = _require3.getClaimList, - resolveUri = _require3.resolveUri, - getClaim = _require3.getClaim; - -var _require4 = __webpack_require__(26), - addGetResultsToFileData = _require4.addGetResultsToFileData, - createBasicPublishParams = _require4.createBasicPublishParams, - createThumbnailPublishParams = _require4.createThumbnailPublishParams, - parsePublishApiRequestBody = _require4.parsePublishApiRequestBody, - parsePublishApiRequestFiles = _require4.parsePublishApiRequestFiles, - createFileData = _require4.createFileData; - -var errorHandlers = __webpack_require__(27); - -var _require5 = __webpack_require__(17), - sendGATimingEvent = _require5.sendGATimingEvent; - -var _require6 = __webpack_require__(80), - authenticateUser = _require6.authenticateUser; - -var _require7 = __webpack_require__(28), - getChannelData = _require7.getChannelData, - getChannelClaims = _require7.getChannelClaims, - getClaimId = _require7.getClaimId; - -var NO_CHANNEL = 'NO_CHANNEL'; -var NO_CLAIM = 'NO_CLAIM'; - -module.exports = function (app) { - // route to check whether site has published to a channel - app.get('/api/channel/availability/:name', function (_ref, res) { - var ip = _ref.ip, - originalUrl = _ref.originalUrl, - name = _ref.params.name; - - var gaStartTime = Date.now(); - checkChannelAvailability(name).then(function (availableName) { - res.status(200).json(availableName); - sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now()); - }).catch(function (error) { - errorHandlers.handleErrorResponse(originalUrl, ip, error, res); - }); - }); - // route to get a short channel id from long channel Id - app.get('/api/channel/short-id/:longId/:name', function (_ref2, res) { - var ip = _ref2.ip, - originalUrl = _ref2.originalUrl, - params = _ref2.params; - - db.Certificate.getShortChannelIdFromLongChannelId(params.longId, params.name).then(function (shortId) { - res.status(200).json(shortId); - }).catch(function (error) { - errorHandlers.handleErrorResponse(originalUrl, ip, error, res); - }); - }); - app.get('/api/channel/data/:channelName/:channelClaimId', function (_ref3, res) { - var ip = _ref3.ip, - originalUrl = _ref3.originalUrl, - body = _ref3.body, - params = _ref3.params; - - var channelName = params.channelName; - var channelClaimId = params.channelClaimId; - if (channelClaimId === 'none') channelClaimId = null; - getChannelData(channelName, channelClaimId, 0).then(function (data) { - if (data === NO_CHANNEL) { - return res.status(404).json({ success: false, message: 'No matching channel was found' }); - } - res.status(200).json({ success: true, data: data }); - }).catch(function (error) { - errorHandlers.handleErrorResponse(originalUrl, ip, error, res); - }); - }); - app.get('/api/channel/claims/:channelName/:channelClaimId/:page', function (_ref4, res) { - var ip = _ref4.ip, - originalUrl = _ref4.originalUrl, - body = _ref4.body, - params = _ref4.params; - - var channelName = params.channelName; - var channelClaimId = params.channelClaimId; - if (channelClaimId === 'none') channelClaimId = null; - var page = params.page; - getChannelClaims(channelName, channelClaimId, page).then(function (data) { - if (data === NO_CHANNEL) { - return res.status(404).json({ success: false, message: 'No matching channel was found' }); - } - res.status(200).json({ success: true, data: data }); - }).catch(function (error) { - errorHandlers.handleErrorResponse(originalUrl, ip, error, res); - }); - }); - // route to run a claim_list request on the daemon - app.get('/api/claim/list/:name', function (_ref5, res) { - var ip = _ref5.ip, - originalUrl = _ref5.originalUrl, - params = _ref5.params; - - getClaimList(params.name).then(function (claimsList) { - res.status(200).json(claimsList); - }).catch(function (error) { - errorHandlers.handleErrorResponse(originalUrl, ip, error, res); - }); - }); - // route to get an asset - app.get('/api/claim/get/:name/:claimId', function (_ref6, res) { - var ip = _ref6.ip, - originalUrl = _ref6.originalUrl, - params = _ref6.params; - - var name = params.name; - var claimId = params.claimId; - // resolve the claim - db.Claim.resolveClaim(name, claimId).then(function (resolveResult) { - // make sure a claim actually exists at that uri - if (!resolveResult) { - throw new Error('No matching uri found in Claim table'); - } - var fileData = createFileData(resolveResult); - // get the claim - return Promise.all([fileData, getClaim(name + '#' + claimId)]); - }).then(function (_ref7) { - var _ref8 = _slicedToArray(_ref7, 2), - fileData = _ref8[0], - getResult = _ref8[1]; - - fileData = addGetResultsToFileData(fileData, getResult); - return Promise.all([db.upsert(db.File, fileData, { name: name, claimId: claimId }, 'File'), getResult]); - }).then(function (_ref9) { - var _ref10 = _slicedToArray(_ref9, 2), - fileRecord = _ref10[0], - _ref10$ = _ref10[1], - message = _ref10$.message, - completed = _ref10$.completed; - - res.status(200).json({ success: true, message: message, completed: completed }); - }).catch(function (error) { - errorHandlers.handleErrorResponse(originalUrl, ip, error, res); - }); - }); - // route to check whether this site published to a claim - app.get('/api/claim/availability/:name', function (_ref11, res) { - var ip = _ref11.ip, - originalUrl = _ref11.originalUrl, - name = _ref11.params.name; - - var gaStartTime = Date.now(); - claimNameIsAvailable(name).then(function (result) { - res.status(200).json(result); - sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now()); - }).catch(function (error) { - errorHandlers.handleErrorResponse(originalUrl, ip, error, res); - }); - }); - // route to run a resolve request on the daemon - app.get('/api/claim/resolve/:name/:claimId', function (_ref12, res) { - var headers = _ref12.headers, - ip = _ref12.ip, - originalUrl = _ref12.originalUrl, - params = _ref12.params; - - resolveUri(params.name + '#' + params.claimId).then(function (resolvedUri) { - res.status(200).json(resolvedUri); - }).catch(function (error) { - errorHandlers.handleErrorResponse(originalUrl, ip, error, res); - }); - }); - // route to run a publish request on the daemon - app.post('/api/claim/publish', multipartMiddleware, function (_ref13, res) { - var body = _ref13.body, - files = _ref13.files, - headers = _ref13.headers, - ip = _ref13.ip, - originalUrl = _ref13.originalUrl, - user = _ref13.user; - - // define variables - var channelName = void 0, - channelId = void 0, - channelPassword = void 0, - description = void 0, - fileName = void 0, - filePath = void 0, - fileType = void 0, - gaStartTime = void 0, - license = void 0, - name = void 0, - nsfw = void 0, - thumbnail = void 0, - thumbnailFileName = void 0, - thumbnailFilePath = void 0, - thumbnailFileType = void 0, - title = void 0; - // record the start time of the request - gaStartTime = Date.now(); - // validate the body and files of the request - try { - var _parsePublishApiReque = parsePublishApiRequestBody(body); - // validateApiPublishRequest(body, files); - - - name = _parsePublishApiReque.name; - nsfw = _parsePublishApiReque.nsfw; - license = _parsePublishApiReque.license; - title = _parsePublishApiReque.title; - description = _parsePublishApiReque.description; - thumbnail = _parsePublishApiReque.thumbnail; - - var _parsePublishApiReque2 = parsePublishApiRequestFiles(files); - - fileName = _parsePublishApiReque2.fileName; - filePath = _parsePublishApiReque2.filePath; - fileType = _parsePublishApiReque2.fileType; - thumbnailFileName = _parsePublishApiReque2.thumbnailFileName; - thumbnailFilePath = _parsePublishApiReque2.thumbnailFilePath; - thumbnailFileType = _parsePublishApiReque2.thumbnailFileType; - channelName = body.channelName; - channelId = body.channelId; - channelPassword = body.channelPassword; - } catch (error) { - return res.status(400).json({ success: false, message: error.message }); - } - // check channel authorization - Promise.all([authenticateUser(channelName, channelId, channelPassword, user), claimNameIsAvailable(name), createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail), createThumbnailPublishParams(thumbnailFilePath, name, license, nsfw)]).then(function (_ref14) { - var _ref15 = _slicedToArray(_ref14, 4), - _ref15$ = _ref15[0], - channelName = _ref15$.channelName, - channelClaimId = _ref15$.channelClaimId, - validatedClaimName = _ref15[1], - publishParams = _ref15[2], - thumbnailPublishParams = _ref15[3]; - - // add channel details to the publish params - if (channelName && channelClaimId) { - publishParams['channel_name'] = channelName; - publishParams['channel_id'] = channelClaimId; - } - // publish the thumbnail - if (thumbnailPublishParams) { - publish(thumbnailPublishParams, thumbnailFileName, thumbnailFileType); - } - // publish the asset - return publish(publishParams, fileName, fileType); - }).then(function (result) { - res.status(200).json({ - success: true, - message: 'publish completed successfully', - data: { - name: name, - claimId: result.claim_id, - url: host + '/' + result.claim_id + '/' + name, - lbryTx: result - } - }); - // record the publish end time and send to google analytics - sendGATimingEvent('end-to-end', 'publish', fileType, gaStartTime, Date.now()); - }).catch(function (error) { - errorHandlers.handleErrorResponse(originalUrl, ip, error, res); - }); - }); - // route to get a short claim id from long claim Id - app.get('/api/claim/short-id/:longId/:name', function (_ref16, res) { - var ip = _ref16.ip, - originalUrl = _ref16.originalUrl, - body = _ref16.body, - params = _ref16.params; - - db.Claim.getShortClaimIdFromLongClaimId(params.longId, params.name).then(function (shortId) { - res.status(200).json({ success: true, data: shortId }); - }).catch(function (error) { - errorHandlers.handleErrorResponse(originalUrl, ip, error, res); - }); - }); - app.post('/api/claim/long-id', function (_ref17, res) { - var ip = _ref17.ip, - originalUrl = _ref17.originalUrl, - body = _ref17.body, - params = _ref17.params; - - logger.debug('body:', body); - var channelName = body.channelName; - var channelClaimId = body.channelClaimId; - var claimName = body.claimName; - var claimId = body.claimId; - getClaimId(channelName, channelClaimId, claimName, claimId).then(function (result) { - if (result === NO_CHANNEL) { - return res.status(404).json({ success: false, message: 'No matching channel could be found' }); - } - if (result === NO_CLAIM) { - return res.status(404).json({ success: false, message: 'No matching claim id could be found' }); - } - res.status(200).json({ success: true, data: result }); - }).catch(function (error) { - errorHandlers.handleErrorResponse(originalUrl, ip, error, res); - }); - }); - app.get('/api/claim/data/:claimName/:claimId', function (_ref18, res) { - var ip = _ref18.ip, - originalUrl = _ref18.originalUrl, - body = _ref18.body, - params = _ref18.params; - - var claimName = params.claimName; - var claimId = params.claimId; - if (claimId === 'none') claimId = null; - db.Claim.resolveClaim(claimName, claimId).then(function (claimInfo) { - if (!claimInfo) { - return res.status(404).json({ success: false, message: 'No claim could be found' }); - } - res.status(200).json({ success: true, data: claimInfo }); - }).catch(function (error) { - errorHandlers.handleErrorResponse(originalUrl, ip, error, res); - }); - }); - // route to see if asset is available locally - app.get('/api/file/availability/:name/:claimId', function (_ref19, res) { - var ip = _ref19.ip, - originalUrl = _ref19.originalUrl, - params = _ref19.params; - - var name = params.name; - var claimId = params.claimId; - db.File.findOne({ where: { name: name, claimId: claimId } }).then(function (result) { - if (result) { - return res.status(200).json({ success: true, data: true }); - } - res.status(200).json({ success: true, data: false }); - }).catch(function (error) { - errorHandlers.handleErrorResponse(originalUrl, ip, error, res); - }); - }); -}; - -/***/ }), -/* 77 */ -/***/ (function(module, exports) { - -module.exports = require("connect-multiparty"); - -/***/ }), -/* 78 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -var logger = __webpack_require__(2); -var db = __webpack_require__(6); -var lbryApi = __webpack_require__(16); -var publishHelpers = __webpack_require__(26); - -var _require = __webpack_require__(5), - _require$publishing = _require.publishing, - primaryClaimAddress = _require$publishing.primaryClaimAddress, - additionalClaimAddresses = _require$publishing.additionalClaimAddresses; - -var Sequelize = __webpack_require__(24); -var Op = Sequelize.Op; - -module.exports = { - publish: function publish(publishParams, fileName, fileType) { - return new Promise(function (resolve, reject) { - var publishResults = void 0, - certificateId = void 0, - channelName = void 0; - // publish the file - return lbryApi.publishClaim(publishParams).then(function (tx) { - logger.info('Successfully published ' + publishParams.name + ' ' + fileName, tx); - publishResults = tx; - // get the channel information - if (publishParams.channel_name) { - logger.debug('this claim was published in channel: ' + publishParams.channel_name); - return db.Channel.findOne({ where: { channelName: publishParams.channel_name } }); - } else { - logger.debug('this claim was not published in a channel'); - return null; - } - }).then(function (channel) { - // set channel information - certificateId = null; - channelName = null; - if (channel) { - certificateId = channel.channelClaimId; - channelName = channel.channelName; - } - logger.debug('certificateId: ' + certificateId); - }).then(function () { - // create the File record - var fileRecord = { - name: publishParams.name, - claimId: publishResults.claim_id, - title: publishParams.metadata.title, - description: publishParams.metadata.description, - address: publishParams.claim_address, - outpoint: publishResults.txid + ':' + publishResults.nout, - height: 0, - fileName: fileName, - filePath: publishParams.file_path, - fileType: fileType, - nsfw: publishParams.metadata.nsfw - }; - // create the Claim record - var claimRecord = { - name: publishParams.name, - claimId: publishResults.claim_id, - title: publishParams.metadata.title, - description: publishParams.metadata.description, - address: publishParams.claim_address, - thumbnail: publishParams.metadata.thumbnail, - outpoint: publishResults.txid + ':' + publishResults.nout, - height: 0, - contentType: fileType, - nsfw: publishParams.metadata.nsfw, - amount: publishParams.bid, - certificateId: certificateId, - channelName: channelName - }; - // upsert criteria - var upsertCriteria = { - name: publishParams.name, - claimId: publishResults.claim_id - }; - // upsert the records - return Promise.all([db.upsert(db.File, fileRecord, upsertCriteria, 'File'), db.upsert(db.Claim, claimRecord, upsertCriteria, 'Claim')]); - }).then(function (_ref) { - var _ref2 = _slicedToArray(_ref, 2), - file = _ref2[0], - claim = _ref2[1]; - - logger.debug('File and Claim records successfully created'); - return Promise.all([file.setClaim(claim), claim.setFile(file)]); - }).then(function () { - logger.debug('File and Claim records successfully associated'); - resolve(publishResults); // resolve the promise with the result from lbryApi.publishClaim; - }).catch(function (error) { - logger.error('PUBLISH ERROR', error); - publishHelpers.deleteTemporaryFile(publishParams.file_path); // delete the local file - reject(error); - }); - }); - }, - claimNameIsAvailable: function claimNameIsAvailable(name) { - var claimAddresses = additionalClaimAddresses || []; - claimAddresses.push(primaryClaimAddress); - // find any records where the name is used - return db.Claim.findAll({ - attributes: ['address'], - where: { - name: name, - address: _defineProperty({}, Op.or, claimAddresses) - } - }).then(function (result) { - if (result.length >= 1) { - throw new Error('That claim is already in use'); - }; - return name; - }).catch(function (error) { - throw error; - }); - }, - checkChannelAvailability: function checkChannelAvailability(name) { - return db.Channel.findAll({ - where: { channelName: name } - }).then(function (result) { - if (result.length >= 1) { - throw new Error('That channel has already been claimed'); - } - return name; - }).catch(function (error) { - throw error; - }); - } -}; - -/***/ }), -/* 79 */ -/***/ (function(module, exports) { - -module.exports = require("fs"); - -/***/ }), -/* 80 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var db = __webpack_require__(6); -var logger = __webpack_require__(2); - -module.exports = { - authenticateUser: function authenticateUser(channelName, channelId, channelPassword, user) { - // case: no channelName or channel Id are provided (anonymous), regardless of whether user token is provided - if (!channelName && !channelId) { - return { - channelName: null, - channelClaimId: null - }; - } - // case: channelName or channel Id are provided with user token - if (user) { - if (channelName && channelName !== user.channelName) { - throw new Error('the provided channel name does not match user credentials'); - } - if (channelId && channelId !== user.channelClaimId) { - throw new Error('the provided channel id does not match user credentials'); - } - return { - channelName: user.channelName, - channelClaimId: user.channelClaimId - }; - } - // case: channelName or channel Id are provided with password instead of user token - if (!channelPassword) throw new Error('no channel password provided'); - return module.exports.authenticateChannelCredentials(channelName, channelId, channelPassword); - }, - authenticateChannelCredentials: function authenticateChannelCredentials(channelName, channelId, userPassword) { - return new Promise(function (resolve, reject) { - // hoisted variables - var channelData = void 0; - // build the params for finding the channel - var channelFindParams = {}; - if (channelName) channelFindParams['channelName'] = channelName; - if (channelId) channelFindParams['channelClaimId'] = channelId; - // find the channel - db.Channel.findOne({ - where: channelFindParams - }).then(function (channel) { - if (!channel) { - logger.debug('no channel found'); - throw new Error('Authentication failed, you do not have access to that channel'); - } - channelData = channel.get(); - logger.debug('channel data:', channelData); - return db.User.findOne({ - where: { userName: channelData.channelName.substring(1) } - }); - }).then(function (user) { - if (!user) { - logger.debug('no user found'); - throw new Error('Authentication failed, you do not have access to that channel'); - } - return user.comparePassword(userPassword); - }).then(function (isMatch) { - if (!isMatch) { - logger.debug('incorrect password'); - throw new Error('Authentication failed, you do not have access to that channel'); - } - logger.debug('...password was a match...'); - resolve(channelData); - }).catch(function (error) { - reject(error); - }); - }); - } -}; - -/***/ }), -/* 81 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var CLAIMS_PER_PAGE = 12; - -module.exports = { - returnPaginatedChannelClaims: function returnPaginatedChannelClaims(channelName, longChannelClaimId, claims, page) { - var totalPages = module.exports.determineTotalPages(claims); - var paginationPage = module.exports.getPageFromQuery(page); - var viewData = { - channelName: channelName, - longChannelClaimId: longChannelClaimId, - claims: module.exports.extractPageFromClaims(claims, paginationPage), - previousPage: module.exports.determinePreviousPage(paginationPage), - currentPage: paginationPage, - nextPage: module.exports.determineNextPage(totalPages, paginationPage), - totalPages: totalPages, - totalResults: module.exports.determineTotalClaims(claims) - }; - return viewData; - }, - getPageFromQuery: function getPageFromQuery(page) { - if (page) { - return parseInt(page); - } - return 1; - }, - extractPageFromClaims: function extractPageFromClaims(claims, pageNumber) { - if (!claims) { - return []; // if no claims, return this default - } - // logger.debug('claims is array?', Array.isArray(claims)); - // logger.debug(`pageNumber ${pageNumber} is number?`, Number.isInteger(pageNumber)); - var claimStartIndex = (pageNumber - 1) * CLAIMS_PER_PAGE; - var claimEndIndex = claimStartIndex + CLAIMS_PER_PAGE; - var pageOfClaims = claims.slice(claimStartIndex, claimEndIndex); - return pageOfClaims; - }, - determineTotalPages: function determineTotalPages(claims) { - if (!claims) { - return 0; - } else { - var totalClaims = claims.length; - if (totalClaims < CLAIMS_PER_PAGE) { - return 1; - } - var fullPages = Math.floor(totalClaims / CLAIMS_PER_PAGE); - var remainder = totalClaims % CLAIMS_PER_PAGE; - if (remainder === 0) { - return fullPages; - } - return fullPages + 1; - } - }, - determinePreviousPage: function determinePreviousPage(currentPage) { - if (currentPage === 1) { - return null; - } - return currentPage - 1; - }, - determineNextPage: function determineNextPage(totalPages, currentPage) { - if (currentPage === totalPages) { - return null; - } - return currentPage + 1; - }, - determineTotalClaims: function determineTotalClaims(claims) { - if (!claims) { - return 0; - } - return claims.length; - } -}; - -/***/ }), -/* 82 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _require = __webpack_require__(5), - host = _require.details; - -var handlePageRender = __webpack_require__(29); - -module.exports = function (app) { - // route for the home page - app.get('/', function (req, res) { - handlePageRender(req, res); - }); - // route to display login page - app.get('/login', function (req, res) { - handlePageRender(req, res); - }); - // route to show 'about' page - app.get('/about', function (req, res) { - handlePageRender(req, res); - }); - // route to display a list of the trending images - app.get('/trending', function (req, res) { - res.status(301).redirect('/popular'); - }); - app.get('/popular', function (req, res) { - handlePageRender(req, res); - }); - // route to display a list of the trending images - app.get('/new', function (req, res) { - handlePageRender(req, res); - }); - // route to send embedable video player (for twitter) - app.get('/embed/:claimId/:name', function (_ref, res) { - var params = _ref.params; - - var claimId = params.claimId; - var name = params.name; - // get and render the content - res.status(200).render('embed', { layout: 'embed', host: host, claimId: claimId, name: name }); - }); -}; - -/***/ }), -/* 83 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -exports.default = function () { - var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; - var action = arguments[1]; - - switch (action.type) { - case actions.FILE_SELECTED: - return Object.assign({}, initialState, { // note: clears to initial state - file: action.data - }); - case actions.FILE_CLEAR: - return initialState; - case actions.METADATA_UPDATE: - return Object.assign({}, state, { - metadata: Object.assign({}, state.metadata, _defineProperty({}, action.data.name, action.data.value)) - }); - case actions.CLAIM_UPDATE: - return Object.assign({}, state, { - claim: action.data - }); - case actions.SET_PUBLISH_IN_CHANNEL: - return Object.assign({}, state, { - publishInChannel: action.channel - }); - case actions.PUBLISH_STATUS_UPDATE: - return Object.assign({}, state, { - status: action.data - }); - case actions.ERROR_UPDATE: - return Object.assign({}, state, { - error: Object.assign({}, state.error, _defineProperty({}, action.data.name, action.data.value)) - }); - case actions.SELECTED_CHANNEL_UPDATE: - return Object.assign({}, state, { - selectedChannel: action.data - }); - case actions.TOGGLE_METADATA_INPUTS: - return Object.assign({}, state, { - showMetadataInputs: action.data - }); - case actions.THUMBNAIL_NEW: - return Object.assign({}, state, { - thumbnail: action.data - }); - default: - return state; - } -}; - -var _publish_action_types = __webpack_require__(32); - -var actions = _interopRequireWildcard(_publish_action_types); - -var _publish_channel_select_states = __webpack_require__(33); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -var _require = __webpack_require__(5), - publishing = _require.publishing; - -var initialState = { - disabled: publishing.disabled, - disabledMessage: publishing.disabledMessage, - publishInChannel: false, - selectedChannel: _publish_channel_select_states.LOGIN, - showMetadataInputs: false, - status: { - status: null, - message: null - }, - error: { - file: null, - url: null, - channel: null, - publishSubmit: null - }, - file: null, - claim: '', - metadata: { - title: '', - description: '', - license: '', - nsfw: false - }, - thumbnail: null -}; - -/***/ }), -/* 84 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -exports.default = function () { - var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; - var action = arguments[1]; - - switch (action.type) { - case actions.CHANNEL_UPDATE: - return Object.assign({}, state, { - loggedInChannel: action.data - }); - default: - return state; - } -}; - -var _channel_action_types = __webpack_require__(34); - -var actions = _interopRequireWildcard(_channel_action_types); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -var initialState = { - loggedInChannel: { - name: null, - shortId: null, - longId: null - } -}; - -/***/ }), -/* 85 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -exports.default = function () { - var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; - var action = arguments[1]; - - switch (action.type) { - // handle request - case actions.REQUEST_ERROR: - return Object.assign({}, state, { - request: Object.assign({}, state.request, { - error: action.data - }) - }); - case actions.REQUEST_UPDATE: - return Object.assign({}, state, { - request: Object.assign({}, state.request, { - type: action.data.requestType, - id: action.data.requestId - }) - }); - // store requests - case actions.REQUEST_LIST_ADD: - return Object.assign({}, state, { - requestList: Object.assign({}, state.requestList, _defineProperty({}, action.data.id, { - error: action.data.error, - key: action.data.key - })) - }); - // asset data - case actions.ASSET_ADD: - return Object.assign({}, state, { - assetList: Object.assign({}, state.assetList, _defineProperty({}, action.data.id, { - error: action.data.error, - name: action.data.name, - claimId: action.data.claimId, - shortId: action.data.shortId, - claimData: action.data.claimData - })) - }); - // channel data - case actions.CHANNEL_ADD: - return Object.assign({}, state, { - channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.id, { - name: action.data.name, - longId: action.data.longId, - shortId: action.data.shortId, - claimsData: action.data.claimsData - })) - }); - case actions.CHANNEL_CLAIMS_UPDATE_SUCCESS: - return Object.assign({}, state, { - channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.channelListId, Object.assign({}, state.channelList[action.data.channelListId], { - claimsData: action.data.claimsData - }))) - }); - // display an asset - case actions.FILE_AVAILABILITY_UPDATE: - return Object.assign({}, state, { - displayAsset: Object.assign({}, state.displayAsset, { - status: action.data - }) - }); - case actions.DISPLAY_ASSET_ERROR: - return Object.assign({}, state, { - displayAsset: Object.assign({}, state.displayAsset, { - error: action.data, - status: _asset_display_states.ERROR - }) - }); - default: - return state; - } -}; - -var _show_action_types = __webpack_require__(12); - -var actions = _interopRequireWildcard(_show_action_types); - -var _asset_display_states = __webpack_require__(35); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -var initialState = { - request: { - error: null, - type: null, - id: null - }, - requestList: {}, - channelList: {}, - assetList: {}, - displayAsset: { - error: null, - status: _asset_display_states.LOCAL_CHECK - } -}; - -/***/ }), -/* 86 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -exports.default = function () { - var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; - var action = arguments[1]; - - switch (action.type) { - default: - return state; - } -}; - -var siteConfig = __webpack_require__(5); - -var googleAnalyticsId = siteConfig.analytics.googleId, - _siteConfig$assetDefa = siteConfig.assetDefaults, - defaultThumbnail = _siteConfig$assetDefa.thumbnail, - defaultDescription = _siteConfig$assetDefa.description, - _siteConfig$details = siteConfig.details, - description = _siteConfig$details.description, - host = _siteConfig$details.host, - title = _siteConfig$details.title, - twitter = _siteConfig$details.twitter; - - -var initialState = { - description: description, - googleAnalyticsId: googleAnalyticsId, - host: host, - title: title, - twitter: twitter, - defaultDescription: defaultDescription, - defaultThumbnail: defaultThumbnail -}; - -/***/ }), -/* 87 */ -/***/ (function(module, exports) { - -module.exports = require("react-ga"); - -/***/ }), -/* 88 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _SEO = __webpack_require__(9); - -var _SEO2 = _interopRequireDefault(_SEO); - -var _NavBar = __webpack_require__(7); - -var _NavBar2 = _interopRequireDefault(_NavBar); - -var _PublishTool = __webpack_require__(97); - -var _PublishTool2 = _interopRequireDefault(_PublishTool); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var HomePage = function (_React$Component) { - _inherits(HomePage, _React$Component); - - function HomePage() { - _classCallCheck(this, HomePage); - - return _possibleConstructorReturn(this, (HomePage.__proto__ || Object.getPrototypeOf(HomePage)).apply(this, arguments)); - } - - _createClass(HomePage, [{ - key: 'render', - value: function render() { - return _react2.default.createElement( - 'div', - { className: 'row row--tall flex-container--column' }, - _react2.default.createElement(_SEO2.default, null), - _react2.default.createElement(_NavBar2.default, null), - _react2.default.createElement( - 'div', - { className: 'row row--tall row--padded flex-container--column' }, - _react2.default.createElement(_PublishTool2.default, null) - ) - ); - } - }]); - - return HomePage; -}(_react2.default.Component); - -; - -exports.default = HomePage; - -/***/ }), -/* 89 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _reactHelmet = __webpack_require__(14); - -var _reactHelmet2 = _interopRequireDefault(_reactHelmet); - -var _propTypes = __webpack_require__(10); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -var _pageTitle = __webpack_require__(90); - -var _metaTags = __webpack_require__(91); - -var _canonicalLink = __webpack_require__(92); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var SEO = function (_React$Component) { - _inherits(SEO, _React$Component); - - function SEO() { - _classCallCheck(this, SEO); - - return _possibleConstructorReturn(this, (SEO.__proto__ || Object.getPrototypeOf(SEO)).apply(this, arguments)); - } - - _createClass(SEO, [{ - key: 'render', - value: function render() { - // props from state - var _props = this.props, - defaultDescription = _props.defaultDescription, - defaultThumbnail = _props.defaultThumbnail, - siteDescription = _props.siteDescription, - siteHost = _props.siteHost, - siteTitle = _props.siteTitle, - siteTwitter = _props.siteTwitter; - // props from parent - - var _props2 = this.props, - asset = _props2.asset, - channel = _props2.channel, - pageUri = _props2.pageUri; - var pageTitle = this.props.pageTitle; - // create page title, tags, and canonical link - - pageTitle = (0, _pageTitle.createPageTitle)(siteTitle, pageTitle); - var metaTags = (0, _metaTags.createMetaTags)(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail); - var canonicalLink = (0, _canonicalLink.createCanonicalLink)(asset, channel, pageUri, siteHost); - // render results - return _react2.default.createElement(_reactHelmet2.default, { - title: pageTitle, - meta: metaTags, - link: [{ rel: 'canonical', href: canonicalLink }] - }); - } - }]); - - return SEO; -}(_react2.default.Component); - -; - -SEO.propTypes = { - pageTitle: _propTypes2.default.string, - pageUri: _propTypes2.default.string, - channel: _propTypes2.default.object, - asset: _propTypes2.default.object -}; - -exports.default = SEO; - -/***/ }), -/* 90 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var createPageTitle = exports.createPageTitle = function createPageTitle(siteTitle, pageTitle) { - if (!pageTitle) { - return "" + siteTitle; - } - return siteTitle + " - " + pageTitle; -}; - -/***/ }), -/* 91 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var determineOgThumbnailContentType = function determineOgThumbnailContentType(thumbnail) { - if (thumbnail) { - var fileExt = thumbnail.substring(thumbnail.lastIndexOf('.')); - switch (fileExt) { - case 'jpeg': - case 'jpg': - return 'image/jpeg'; - case 'png': - return 'image/png'; - case 'gif': - return 'image/gif'; - case 'mp4': - return 'video/mp4'; - default: - return 'image/jpeg'; - } - } - return ''; -}; - -var createBasicMetaTags = function createBasicMetaTags(siteHost, siteDescription, siteTitle, siteTwitter) { - return [{ property: 'og:title', content: siteTitle }, { property: 'og:url', content: siteHost }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: siteDescription }, { property: 'twitter:site', content: siteTwitter }, { property: 'twitter:card', content: 'summary' }]; -}; - -var createChannelMetaTags = function createChannelMetaTags(siteTitle, siteHost, siteTwitter, channel) { - var name = channel.name, - longId = channel.longId; - - return [{ property: 'og:title', content: name + ' on ' + siteTitle }, { property: 'og:url', content: siteHost + '/' + name + ':' + longId }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: name + ', a channel on ' + siteTitle }, { property: 'twitter:site', content: siteTwitter }, { property: 'twitter:card', content: 'summary' }]; -}; - -var createAssetMetaTags = function createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail) { - var claimData = asset.claimData; - var contentType = claimData.contentType; - - var embedUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name; - var showUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name; - var source = siteHost + '/' + claimData.claimId + '/' + claimData.name + '.' + claimData.fileExt; - var ogTitle = claimData.title || claimData.name; - var ogDescription = claimData.description || defaultDescription; - var ogThumbnailContentType = determineOgThumbnailContentType(claimData.thumbnail); - var ogThumbnail = claimData.thumbnail || defaultThumbnail; - var metaTags = [{ property: 'og:title', content: ogTitle }, { property: 'og:url', content: showUrl }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: ogDescription }, { property: 'og:image:width', content: 600 }, { property: 'og:image:height', content: 315 }, { property: 'twitter:site', content: siteTwitter }]; - if (contentType === 'video/mp4' || contentType === 'video/webm') { - metaTags.push({ property: 'og:video', content: source }); - metaTags.push({ property: 'og:video:secure_url', content: source }); - metaTags.push({ property: 'og:video:type', content: contentType }); - metaTags.push({ property: 'og:image', content: ogThumbnail }); - metaTags.push({ property: 'og:image:type', content: ogThumbnailContentType }); - metaTags.push({ property: 'og:type', content: 'video' }); - metaTags.push({ property: 'twitter:card', content: 'player' }); - metaTags.push({ property: 'twitter:player', content: embedUrl }); - metaTags.push({ property: 'twitter:player:width', content: 600 }); - metaTags.push({ property: 'twitter:text:player_width', content: 600 }); - metaTags.push({ property: 'twitter:player:height', content: 337 }); - metaTags.push({ property: 'twitter:player:stream', content: source }); - metaTags.push({ property: 'twitter:player:stream:content_type', content: contentType }); - } else { - metaTags.push({ property: 'og:image', content: source }); - metaTags.push({ property: 'og:image:type', content: contentType }); - metaTags.push({ property: 'og:type', content: 'article' }); - metaTags.push({ property: 'twitter:card', content: 'summary_large_image' }); - } - return metaTags; -}; - -var createMetaTags = exports.createMetaTags = function createMetaTags(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail) { - if (asset) { - return createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail); - }; - if (channel) { - return createChannelMetaTags(siteHost, siteTitle, siteTwitter, channel); - }; - return createBasicMetaTags(siteDescription, siteHost, siteTitle, siteTwitter); -}; - -/***/ }), -/* 92 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var createBasicCanonicalLink = function createBasicCanonicalLink(page, siteHost) { - return siteHost + "/" + page; -}; - -var createAssetCanonicalLink = function createAssetCanonicalLink(asset, siteHost) { - var channelName = void 0, - certificateId = void 0, - name = void 0, - claimId = void 0; - if (asset.claimData) { - var _asset$claimData = asset.claimData; - channelName = _asset$claimData.channelName; - certificateId = _asset$claimData.certificateId; - name = _asset$claimData.name; - claimId = _asset$claimData.claimId; - }; - if (channelName) { - return siteHost + "/" + channelName + ":" + certificateId + "/" + name; - }; - return siteHost + "/" + claimId + "/" + name; -}; - -var createChannelCanonicalLink = function createChannelCanonicalLink(channel, siteHost) { - var name = channel.name, - longId = channel.longId; - - return siteHost + "/" + name + ":" + longId; -}; - -var createCanonicalLink = exports.createCanonicalLink = function createCanonicalLink(asset, channel, page, siteHost) { - if (asset) { - return createAssetCanonicalLink(asset, siteHost); - } - if (channel) { - return createChannelCanonicalLink(channel, siteHost); - } - return createBasicCanonicalLink(page, siteHost); -}; - -/***/ }), -/* 93 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _reactRouterDom = __webpack_require__(3); - -var _Logo = __webpack_require__(94); - -var _Logo2 = _interopRequireDefault(_Logo); - -var _NavBarChannelOptionsDropdown = __webpack_require__(95); - -var _NavBarChannelOptionsDropdown2 = _interopRequireDefault(_NavBarChannelOptionsDropdown); - -var _request = __webpack_require__(11); - -var _request2 = _interopRequireDefault(_request); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var VIEW = 'VIEW'; -var LOGOUT = 'LOGOUT'; - -var NavBar = function (_React$Component) { - _inherits(NavBar, _React$Component); - - function NavBar(props) { - _classCallCheck(this, NavBar); - - var _this = _possibleConstructorReturn(this, (NavBar.__proto__ || Object.getPrototypeOf(NavBar)).call(this, props)); - - _this.checkForLoggedInUser = _this.checkForLoggedInUser.bind(_this); - _this.logoutUser = _this.logoutUser.bind(_this); - _this.handleSelection = _this.handleSelection.bind(_this); - return _this; - } - - _createClass(NavBar, [{ - key: 'componentDidMount', - value: function componentDidMount() { - // check to see if the user is already logged in - this.checkForLoggedInUser(); - } - }, { - key: 'checkForLoggedInUser', - value: function checkForLoggedInUser() { - var _this2 = this; - - var params = { credentials: 'include' }; - (0, _request2.default)('/user', params).then(function (_ref) { - var data = _ref.data; - - _this2.props.onChannelLogin(data.channelName, data.shortChannelId, data.channelClaimId); - }).catch(function (error) { - console.log('/user error:', error.message); - }); - } - }, { - key: 'logoutUser', - value: function logoutUser() { - var _this3 = this; - - var params = { credentials: 'include' }; - (0, _request2.default)('/logout', params).then(function () { - _this3.props.onChannelLogout(); - }).catch(function (error) { - console.log('/logout error', error.message); - }); - } - }, { - key: 'handleSelection', - value: function handleSelection(event) { - var value = event.target.selectedOptions[0].value; - switch (value) { - case LOGOUT: - this.logoutUser(); - break; - case VIEW: - // redirect to channel page - this.props.history.push('/' + this.props.channelName + ':' + this.props.channelLongId); - break; - default: - break; - } - } - }, { - key: 'render', - value: function render() { - var siteDescription = this.props.siteDescription; - - return _react2.default.createElement( - 'div', - { className: 'row row--wide nav-bar' }, - _react2.default.createElement( - 'div', - { className: 'row row--padded row--short flex-container--row flex-container--space-between-center' }, - _react2.default.createElement(_Logo2.default, null), - _react2.default.createElement( - 'div', - { className: 'nav-bar--center' }, - _react2.default.createElement( - 'span', - { className: 'nav-bar-tagline' }, - siteDescription - ) - ), - _react2.default.createElement( - 'div', - { className: 'nav-bar--right' }, - _react2.default.createElement( - _reactRouterDom.NavLink, - { className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/', exact: true }, - 'Publish' - ), - _react2.default.createElement( - _reactRouterDom.NavLink, - { className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/about' }, - 'About' - ), - this.props.channelName ? _react2.default.createElement(_NavBarChannelOptionsDropdown2.default, { - channelName: this.props.channelName, - handleSelection: this.handleSelection, - defaultSelection: this.props.channelName, - VIEW: VIEW, - LOGOUT: LOGOUT - }) : _react2.default.createElement( - _reactRouterDom.NavLink, - { id: 'nav-bar-login-link', className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/login' }, - 'Channel' - ) - ) - ) - ); - } - }]); - - return NavBar; -}(_react2.default.Component); - -exports.default = (0, _reactRouterDom.withRouter)(NavBar); - -/***/ }), -/* 94 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _reactRouterDom = __webpack_require__(3); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function Logo() { - return _react2.default.createElement( - 'svg', - { version: '1.1', id: 'Layer_1', x: '0px', y: '0px', height: '24px', viewBox: '0 0 80 31', enableBackground: 'new 0 0 80 31', className: 'nav-bar-logo' }, - _react2.default.createElement( - _reactRouterDom.Link, - { to: '/' }, - _react2.default.createElement( - 'title', - null, - 'Logo' - ), - _react2.default.createElement( - 'desc', - null, - 'Spee.ch logo' - ), - _react2.default.createElement( - 'g', - { id: 'About' }, - _react2.default.createElement( - 'g', - { id: 'Publish-Form-V2-_x28_filled_x29_', transform: 'translate(-42.000000, -23.000000)' }, - _react2.default.createElement( - 'g', - { id: 'Group-17', transform: 'translate(42.000000, 22.000000)' }, - _react2.default.createElement( - 'text', - { transform: 'matrix(1 0 0 1 0 20)', fontSize: '25', fontFamily: 'Roboto' }, - 'Spee 10000000) { - throw new Error('Sorry, images are limited to 10 megabytes.'); - } - break; - case 'image/gif': - if (file.size > 50000000) { - throw new Error('Sorry, GIFs are limited to 50 megabytes.'); - } - break; - case 'video/mp4': - if (file.size > 50000000) { - throw new Error('Sorry, videos are limited to 50 megabytes.'); - } - break; - default: - throw new Error(file.type + ' is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.'); - } - } -}; - -/***/ }), -/* 101 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(10); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var PublishPreview = function (_React$Component) { - _inherits(PublishPreview, _React$Component); - - function PublishPreview(props) { - _classCallCheck(this, PublishPreview); - - var _this = _possibleConstructorReturn(this, (PublishPreview.__proto__ || Object.getPrototypeOf(PublishPreview)).call(this, props)); - - _this.state = { - imgSource: '', - defaultThumbnail: '/assets/img/video_thumb_default.png' - }; - return _this; - } - - _createClass(PublishPreview, [{ - key: 'componentDidMount', - value: function componentDidMount() { - this.setPreviewImageSource(this.props.file); - } - }, { - key: 'componentWillReceiveProps', - value: function componentWillReceiveProps(newProps) { - if (newProps.file !== this.props.file) { - this.setPreviewImageSource(newProps.file); - } - if (newProps.thumbnail !== this.props.thumbnail) { - if (newProps.thumbnail) { - this.setPreviewImageSourceFromFile(newProps.thumbnail); - } else { - this.setState({ imgSource: this.state.defaultThumbnail }); - } - } - } - }, { - key: 'setPreviewImageSourceFromFile', - value: function setPreviewImageSourceFromFile(file) { - var _this2 = this; - - var previewReader = new FileReader(); - previewReader.readAsDataURL(file); - previewReader.onloadend = function () { - _this2.setState({ imgSource: previewReader.result }); - }; - } - }, { - key: 'setPreviewImageSource', - value: function setPreviewImageSource(file) { - if (file.type !== 'video/mp4') { - this.setPreviewImageSourceFromFile(file); - } else { - if (this.props.thumbnail) { - this.setPreviewImageSourceFromFile(this.props.thumbnail); - } - this.setState({ imgSource: this.state.defaultThumbnail }); - } - } - }, { - key: 'render', - value: function render() { - return _react2.default.createElement('img', { - id: 'dropzone-preview', - src: this.state.imgSource, - className: this.props.dimPreview ? 'dim' : '', - alt: 'publish preview' - }); - } - }]); - - return PublishPreview; -}(_react2.default.Component); - -; - -PublishPreview.propTypes = { - dimPreview: _propTypes2.default.bool.isRequired, - file: _propTypes2.default.object.isRequired, - thumbnail: _propTypes2.default.object -}; - -exports.default = PublishPreview; - -/***/ }), -/* 102 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _publish = __webpack_require__(4); - -var _view = __webpack_require__(103); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var channel = _ref.channel, - publish = _ref.publish; - - return { - file: publish.file - }; -}; - -var mapDispatchToProps = { - clearFile: _publish.clearFile, - startPublish: _publish.startPublish -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); - -/***/ }), -/* 103 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _reactRouterDom = __webpack_require__(3); - -var _Dropzone = __webpack_require__(38); - -var _Dropzone2 = _interopRequireDefault(_Dropzone); - -var _PublishTitleInput = __webpack_require__(104); - -var _PublishTitleInput2 = _interopRequireDefault(_PublishTitleInput); - -var _PublishUrlInput = __webpack_require__(106); - -var _PublishUrlInput2 = _interopRequireDefault(_PublishUrlInput); - -var _PublishThumbnailInput = __webpack_require__(109); - -var _PublishThumbnailInput2 = _interopRequireDefault(_PublishThumbnailInput); - -var _PublishMetadataInputs = __webpack_require__(111); - -var _PublishMetadataInputs2 = _interopRequireDefault(_PublishMetadataInputs); - -var _ChannelSelect = __webpack_require__(114); - -var _ChannelSelect2 = _interopRequireDefault(_ChannelSelect); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var PublishDetails = function (_React$Component) { - _inherits(PublishDetails, _React$Component); - - function PublishDetails(props) { - _classCallCheck(this, PublishDetails); - - var _this = _possibleConstructorReturn(this, (PublishDetails.__proto__ || Object.getPrototypeOf(PublishDetails)).call(this, props)); - - _this.onPublishSubmit = _this.onPublishSubmit.bind(_this); - return _this; - } - - _createClass(PublishDetails, [{ - key: 'onPublishSubmit', - value: function onPublishSubmit() { - this.props.startPublish(this.props.history); - } - }, { - key: 'render', - value: function render() { - return _react2.default.createElement( - 'div', - { className: 'row row--no-bottom' }, - _react2.default.createElement( - 'div', - { className: 'column column--10' }, - _react2.default.createElement(_PublishTitleInput2.default, null) - ), - _react2.default.createElement( - 'div', - { className: 'column column--5 column--sml-10' }, - _react2.default.createElement( - 'div', - { className: 'row row--padded' }, - _react2.default.createElement(_Dropzone2.default, null) - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--5 column--sml-10 align-content-top' }, - _react2.default.createElement( - 'div', - { id: 'publish-active-area', className: 'row row--padded' }, - _react2.default.createElement( - 'div', - { className: 'row row--padded row--no-top row--wide' }, - _react2.default.createElement(_PublishUrlInput2.default, null) - ), - _react2.default.createElement( - 'div', - { className: 'row row--padded row--no-top row--wide' }, - _react2.default.createElement(_ChannelSelect2.default, null) - ), - this.props.file.type === 'video/mp4' && _react2.default.createElement( - 'div', - { className: 'row row--padded row--no-top row--wide ' }, - _react2.default.createElement(_PublishThumbnailInput2.default, null) - ), - _react2.default.createElement( - 'div', - { className: 'row row--padded row--no-top row--no-bottom row--wide' }, - _react2.default.createElement(_PublishMetadataInputs2.default, null) - ), - _react2.default.createElement( - 'div', - { className: 'row row--wide align-content-center' }, - _react2.default.createElement( - 'button', - { id: 'publish-submit', className: 'button--primary button--large', onClick: this.onPublishSubmit }, - 'Publish' - ) - ), - _react2.default.createElement( - 'div', - { className: 'row row--padded row--no-bottom align-content-center' }, - _react2.default.createElement( - 'button', - { className: 'button--cancel', onClick: this.props.clearFile }, - 'Cancel' - ) - ), - _react2.default.createElement( - 'div', - { className: 'row row--short align-content-center' }, - _react2.default.createElement( - 'p', - { className: 'fine-print' }, - 'By clicking \'Publish\', you affirm that you have the rights to publish this content to the LBRY network, and that you understand the properties of publishing it to a decentralized, user-controlled network. ', - _react2.default.createElement( - 'a', - { className: 'link--primary', target: '_blank', href: 'https://lbry.io/learn' }, - 'Read more.' - ) - ) - ) - ) - ) - ); - } - }]); - - return PublishDetails; -}(_react2.default.Component); - -; - -exports.default = (0, _reactRouterDom.withRouter)(PublishDetails); - -/***/ }), -/* 104 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _publish = __webpack_require__(4); - -var _view = __webpack_require__(105); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var publish = _ref.publish; - - return { - title: publish.metadata.title - }; -}; - -var mapDispatchToProps = function mapDispatchToProps(dispatch) { - return { - onMetadataChange: function onMetadataChange(name, value) { - dispatch((0, _publish.updateMetadata)(name, value)); - } - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); - -/***/ }), -/* 105 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var PublishTitleInput = function (_React$Component) { - _inherits(PublishTitleInput, _React$Component); - - function PublishTitleInput(props) { - _classCallCheck(this, PublishTitleInput); - - var _this = _possibleConstructorReturn(this, (PublishTitleInput.__proto__ || Object.getPrototypeOf(PublishTitleInput)).call(this, props)); - - _this.handleInput = _this.handleInput.bind(_this); - return _this; - } - - _createClass(PublishTitleInput, [{ - key: 'handleInput', - value: function handleInput(e) { - var name = e.target.name; - var value = e.target.value; - this.props.onMetadataChange(name, value); - } - }, { - key: 'render', - value: function render() { - return _react2.default.createElement('input', { type: 'text', id: 'publish-title', className: 'input-text text--large input-text--full-width', name: 'title', placeholder: 'Give your post a title...', onChange: this.handleInput, value: this.props.title }); - } - }]); - - return PublishTitleInput; -}(_react2.default.Component); - -exports.default = PublishTitleInput; - -/***/ }), -/* 106 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _publish = __webpack_require__(4); - -var _reactRedux = __webpack_require__(1); - -var _view = __webpack_require__(107); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var channel = _ref.channel, - publish = _ref.publish; - - return { - loggedInChannelName: channel.loggedInChannel.name, - loggedInChannelShortId: channel.loggedInChannel.shortId, - fileName: publish.file.name, - publishInChannel: publish.publishInChannel, - selectedChannel: publish.selectedChannel, - claim: publish.claim, - urlError: publish.error.url - }; -}; - -var mapDispatchToProps = function mapDispatchToProps(dispatch) { - return { - onClaimChange: function onClaimChange(value) { - dispatch((0, _publish.updateClaim)(value)); - dispatch((0, _publish.updateError)('publishSubmit', null)); - }, - onUrlError: function onUrlError(value) { - dispatch((0, _publish.updateError)('url', value)); - } - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); - -/***/ }), -/* 107 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _request = __webpack_require__(11); - -var _request2 = _interopRequireDefault(_request); - -var _PublishUrlMiddleDisplay = __webpack_require__(108); - -var _PublishUrlMiddleDisplay2 = _interopRequireDefault(_PublishUrlMiddleDisplay); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var PublishUrlInput = function (_React$Component) { - _inherits(PublishUrlInput, _React$Component); - - function PublishUrlInput(props) { - _classCallCheck(this, PublishUrlInput); - - var _this = _possibleConstructorReturn(this, (PublishUrlInput.__proto__ || Object.getPrototypeOf(PublishUrlInput)).call(this, props)); - - _this.handleInput = _this.handleInput.bind(_this); - return _this; - } - - _createClass(PublishUrlInput, [{ - key: 'componentDidMount', - value: function componentDidMount() { - var _props = this.props, - claim = _props.claim, - fileName = _props.fileName; - - if (!claim) { - this.setClaimName(fileName); - } - } - }, { - key: 'componentWillReceiveProps', - value: function componentWillReceiveProps(_ref) { - var claim = _ref.claim, - fileName = _ref.fileName; - - // if a new file was chosen, update the claim name - if (fileName !== this.props.fileName) { - return this.setClaimName(fileName); - } - // if the claim has updated, check its availability - if (claim !== this.props.claim) { - this.validateClaim(claim); - } - } - }, { - key: 'handleInput', - value: function handleInput(event) { - var value = event.target.value; - value = this.cleanseInput(value); - // update the state - this.props.onClaimChange(value); - } - }, { - key: 'cleanseInput', - value: function cleanseInput(input) { - input = input.replace(/\s+/g, '-'); // replace spaces with dashes - input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-' - return input; - } - }, { - key: 'setClaimName', - value: function setClaimName(fileName) { - var fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.')); - var cleanClaimName = this.cleanseInput(fileNameWithoutEnding); - this.props.onClaimChange(cleanClaimName); - } - }, { - key: 'validateClaim', - value: function validateClaim(claim) { - var _this2 = this; - - if (!claim) { - return this.props.onUrlError('Enter a url above'); - } - (0, _request2.default)('/api/claim/availability/' + claim).then(function () { - _this2.props.onUrlError(null); - }).catch(function (error) { - _this2.props.onUrlError(error.message); - }); - } - }, { - key: 'render', - value: function render() { - var _props2 = this.props, - claim = _props2.claim, - loggedInChannelName = _props2.loggedInChannelName, - loggedInChannelShortId = _props2.loggedInChannelShortId, - publishInChannel = _props2.publishInChannel, - selectedChannel = _props2.selectedChannel, - urlError = _props2.urlError; - - return _react2.default.createElement( - 'div', - { className: 'column column--10 column--sml-10' }, - _react2.default.createElement( - 'div', - { className: 'input-text--primary span--relative' }, - _react2.default.createElement( - 'span', - { className: 'url-text--secondary' }, - 'spee.ch / ' - ), - _react2.default.createElement(_PublishUrlMiddleDisplay2.default, { - publishInChannel: publishInChannel, - selectedChannel: selectedChannel, - loggedInChannelName: loggedInChannelName, - loggedInChannelShortId: loggedInChannelShortId - }), - _react2.default.createElement('input', { type: 'text', id: 'claim-name-input', className: 'input-text', name: 'claim', placeholder: 'your-url-here', onChange: this.handleInput, value: claim }), - claim && !urlError && _react2.default.createElement( - 'span', - { id: 'input-success-claim-name', className: 'info-message--success span--absolute' }, - '\u2713' - ), - urlError && _react2.default.createElement( - 'span', - { id: 'input-success-channel-name', className: 'info-message--failure span--absolute' }, - '\u2716' - ) - ), - _react2.default.createElement( - 'div', - null, - urlError ? _react2.default.createElement( - 'p', - { id: 'input-error-claim-name', className: 'info-message--failure' }, - urlError - ) : _react2.default.createElement( - 'p', - { className: 'info-message' }, - 'Choose a custom url' - ) - ) - ); - } - }]); - - return PublishUrlInput; -}(_react2.default.Component); - -exports.default = PublishUrlInput; - -/***/ }), -/* 108 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(10); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function UrlMiddle(_ref) { - var publishInChannel = _ref.publishInChannel, - selectedChannel = _ref.selectedChannel, - loggedInChannelName = _ref.loggedInChannelName, - loggedInChannelShortId = _ref.loggedInChannelShortId; - - if (publishInChannel) { - if (selectedChannel === loggedInChannelName) { - return _react2.default.createElement( - 'span', - { id: 'url-channel', className: 'url-text--secondary' }, - loggedInChannelName, - ':', - loggedInChannelShortId, - ' /' - ); - } - return _react2.default.createElement( - 'span', - { id: 'url-channel-placeholder', className: 'url-text--secondary tooltip' }, - '@channel', - _react2.default.createElement( - 'span', - { - className: 'tooltip-text' }, - 'Select a channel below' - ), - ' /' - ); - } - return _react2.default.createElement( - 'span', - { id: 'url-no-channel-placeholder', className: 'url-text--secondary tooltip' }, - 'xyz', - _react2.default.createElement( - 'span', - { className: 'tooltip-text' }, - 'This will be a random id' - ), - ' /' - ); -} - -UrlMiddle.propTypes = { - publishInChannel: _propTypes2.default.bool.isRequired, - loggedInChannelName: _propTypes2.default.string, - loggedInChannelShortId: _propTypes2.default.string -}; - -exports.default = UrlMiddle; - -/***/ }), -/* 109 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _publish = __webpack_require__(4); - -var _view = __webpack_require__(110); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var file = _ref.publish.file; - - return { - file: file - }; -}; - -var mapDispatchToProps = { - onNewThumbnail: _publish.onNewThumbnail -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); - -/***/ }), -/* 110 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -function dataURItoBlob(dataURI) { - // convert base64/URLEncoded data component to raw binary data held in a string - var byteString = atob(dataURI.split(',')[1]); - // separate out the mime component - var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; - // write the bytes of the string to a typed array - var ia = new Uint8Array(byteString.length); - for (var i = 0; i < byteString.length; i++) { - ia[i] = byteString.charCodeAt(i); - } - return new Blob([ia], { type: mimeString }); -} - -var PublishThumbnailInput = function (_React$Component) { - _inherits(PublishThumbnailInput, _React$Component); - - function PublishThumbnailInput(props) { - _classCallCheck(this, PublishThumbnailInput); - - var _this = _possibleConstructorReturn(this, (PublishThumbnailInput.__proto__ || Object.getPrototypeOf(PublishThumbnailInput)).call(this, props)); - - _this.state = { - videoSource: null, - error: null, - sliderMinRange: 1, - sliderMaxRange: null, - sliderValue: null - }; - _this.handleVideoLoadedData = _this.handleVideoLoadedData.bind(_this); - _this.handleSliderChange = _this.handleSliderChange.bind(_this); - _this.createThumbnail = _this.createThumbnail.bind(_this); - return _this; - } - - _createClass(PublishThumbnailInput, [{ - key: 'componentDidMount', - value: function componentDidMount() { - var file = this.props.file; - - this.setVideoSource(file); - } - }, { - key: 'componentWillReceiveProps', - value: function componentWillReceiveProps(nextProps) { - // if file changes - if (nextProps.file && nextProps.file !== this.props.file) { - var file = nextProps.file; - - this.setVideoSource(file); - }; - } - }, { - key: 'setVideoSource', - value: function setVideoSource(file) { - var _this2 = this; - - var previewReader = new FileReader(); - previewReader.readAsDataURL(file); - previewReader.onloadend = function () { - var dataUri = previewReader.result; - var blob = dataURItoBlob(dataUri); - var videoSource = URL.createObjectURL(blob); - _this2.setState({ videoSource: videoSource }); - }; - } - }, { - key: 'handleVideoLoadedData', - value: function handleVideoLoadedData(event) { - var duration = event.target.duration; - var totalMinutes = Math.floor(duration / 60); - var totalSeconds = Math.floor(duration % 60); - // set the slider - this.setState({ - sliderMaxRange: duration * 100, - sliderValue: duration * 100 / 2, - totalMinutes: totalMinutes, - totalSeconds: totalSeconds - }); - // update the current time of the video - var video = document.getElementById('video-thumb-player'); - video.currentTime = duration / 2; - } - }, { - key: 'handleSliderChange', - value: function handleSliderChange(event) { - var value = parseInt(event.target.value); - // update the slider value - this.setState({ - sliderValue: value - }); - // update the current time of the video - var video = document.getElementById('video-thumb-player'); - video.currentTime = value / 100; - } - }, { - key: 'createThumbnail', - value: function createThumbnail() { - // take a snapshot - var video = document.getElementById('video-thumb-player'); - var canvas = document.createElement('canvas'); - canvas.width = video.videoWidth; - canvas.height = video.videoHeight; - canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height); - var dataUrl = canvas.toDataURL(); - var blob = dataURItoBlob(dataUrl); - var snapshot = new File([blob], 'thumbnail.png', { - type: 'image/png' - }); - // set the thumbnail in redux store - if (snapshot) { - this.props.onNewThumbnail(snapshot); - } - } - }, { - key: 'render', - value: function render() { - var _state = this.state, - error = _state.error, - videoSource = _state.videoSource, - sliderMinRange = _state.sliderMinRange, - sliderMaxRange = _state.sliderMaxRange, - sliderValue = _state.sliderValue, - totalMinutes = _state.totalMinutes, - totalSeconds = _state.totalSeconds; - - return _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - 'label', - { className: 'label' }, - 'Thumbnail:' - ), - _react2.default.createElement('video', { - id: 'video-thumb-player', - preload: 'metadata', - muted: true, - style: { display: 'none' }, - playsInline: true, - onLoadedData: this.handleVideoLoadedData, - src: videoSource, - onSeeked: this.createThumbnail - }), - sliderValue ? _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - 'div', - { className: 'flex-container--row flex-container--space-between-center', style: { width: '100%' } }, - _react2.default.createElement( - 'span', - { className: 'info-message' }, - '0\'00"' - ), - _react2.default.createElement( - 'span', - { className: 'info-message' }, - totalMinutes, - '\'', - totalSeconds, - '"' - ) - ), - _react2.default.createElement( - 'div', - null, - _react2.default.createElement('input', { - type: 'range', - min: sliderMinRange, - max: sliderMaxRange, - value: sliderValue, - className: 'slider', - onChange: this.handleSliderChange - }) - ) - ) : _react2.default.createElement( - 'p', - { className: 'info-message' }, - 'loading... ' - ), - error ? _react2.default.createElement( - 'p', - { className: 'info-message--failure' }, - error - ) : _react2.default.createElement( - 'p', - { className: 'info-message' }, - 'Use slider to set thumbnail' - ) - ); - } - }]); - - return PublishThumbnailInput; -}(_react2.default.Component); - -exports.default = PublishThumbnailInput; - -/***/ }), -/* 111 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _publish = __webpack_require__(4); - -var _view = __webpack_require__(112); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var publish = _ref.publish; - - return { - showMetadataInputs: publish.showMetadataInputs, - description: publish.metadata.description, - license: publish.metadata.license, - nsfw: publish.metadata.nsfw - }; -}; - -var mapDispatchToProps = function mapDispatchToProps(dispatch) { - return { - onMetadataChange: function onMetadataChange(name, value) { - dispatch((0, _publish.updateMetadata)(name, value)); - }, - onToggleMetadataInputs: function onToggleMetadataInputs(value) { - dispatch((0, _publish.toggleMetadataInputs)(value)); - } - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); - -/***/ }), -/* 112 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _ExpandingTextArea = __webpack_require__(113); - -var _ExpandingTextArea2 = _interopRequireDefault(_ExpandingTextArea); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var PublishMetadataInputs = function (_React$Component) { - _inherits(PublishMetadataInputs, _React$Component); - - function PublishMetadataInputs(props) { - _classCallCheck(this, PublishMetadataInputs); - - var _this = _possibleConstructorReturn(this, (PublishMetadataInputs.__proto__ || Object.getPrototypeOf(PublishMetadataInputs)).call(this, props)); - - _this.toggleShowInputs = _this.toggleShowInputs.bind(_this); - _this.handleInput = _this.handleInput.bind(_this); - _this.handleSelect = _this.handleSelect.bind(_this); - return _this; - } - - _createClass(PublishMetadataInputs, [{ - key: 'toggleShowInputs', - value: function toggleShowInputs() { - this.props.onToggleMetadataInputs(!this.props.showMetadataInputs); - } - }, { - key: 'handleInput', - value: function handleInput(event) { - var target = event.target; - var value = target.type === 'checkbox' ? target.checked : target.value; - var name = target.name; - this.props.onMetadataChange(name, value); - } - }, { - key: 'handleSelect', - value: function handleSelect(event) { - var name = event.target.name; - var selectedOption = event.target.selectedOptions[0].value; - this.props.onMetadataChange(name, selectedOption); - } - }, { - key: 'render', - value: function render() { - return _react2.default.createElement( - 'div', - { id: 'publish-details', className: 'row row--padded row--no-top row--wide' }, - this.props.showMetadataInputs && _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - 'div', - { className: 'row row--no-top' }, - _react2.default.createElement( - 'div', - { className: 'column column--3 column--med-10 align-content-top' }, - _react2.default.createElement( - 'label', - { htmlFor: 'publish-license', className: 'label' }, - 'Description:' - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--7 column--sml-10' }, - _react2.default.createElement(_ExpandingTextArea2.default, { - id: 'publish-description', - className: 'textarea textarea--primary textarea--full-width', - rows: 1, - maxLength: 2000, - style: { maxHeight: 200 }, - name: 'description', - placeholder: 'Optional description', - value: this.props.description, - onChange: this.handleInput }) - ) - ), - _react2.default.createElement( - 'div', - { className: 'row row--no-top' }, - _react2.default.createElement( - 'div', - { className: 'column column--3 column--med-10' }, - _react2.default.createElement( - 'label', - { htmlFor: 'publish-license', className: 'label' }, - 'License:' - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--7 column--sml-10' }, - _react2.default.createElement( - 'select', - { type: 'text', name: 'license', id: 'publish-license', className: 'select select--primary', onChange: this.handleSelect }, - _react2.default.createElement( - 'option', - { value: ' ' }, - 'Unspecified' - ), - _react2.default.createElement( - 'option', - { value: 'Public Domain' }, - 'Public Domain' - ), - _react2.default.createElement( - 'option', - { value: 'Creative Commons' }, - 'Creative Commons' - ) - ) - ) - ), - _react2.default.createElement( - 'div', - { className: 'row row--no-top' }, - _react2.default.createElement( - 'div', - { className: 'column column--3' }, - _react2.default.createElement( - 'label', - { htmlFor: 'publish-nsfw', className: 'label' }, - 'Mature:' - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--7' }, - _react2.default.createElement('input', { className: 'input-checkbox', type: 'checkbox', id: 'publish-nsfw', name: 'nsfw', value: this.props.nsfw, onChange: this.handleInput }) - ) - ) - ), - _react2.default.createElement( - 'button', - { className: 'button--secondary', onClick: this.toggleShowInputs }, - this.props.showMetadataInputs ? 'less' : 'more' - ) - ); - } - }]); - - return PublishMetadataInputs; -}(_react2.default.Component); - -exports.default = PublishMetadataInputs; - -/***/ }), -/* 113 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _propTypes = __webpack_require__(10); - -var _propTypes2 = _interopRequireDefault(_propTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var ExpandingTextarea = function (_Component) { - _inherits(ExpandingTextarea, _Component); - - function ExpandingTextarea(props) { - _classCallCheck(this, ExpandingTextarea); - - var _this = _possibleConstructorReturn(this, (ExpandingTextarea.__proto__ || Object.getPrototypeOf(ExpandingTextarea)).call(this, props)); - - _this._handleChange = _this._handleChange.bind(_this); - return _this; - } - - _createClass(ExpandingTextarea, [{ - key: 'componentDidMount', - value: function componentDidMount() { - this.adjustTextarea({}); - } - }, { - key: '_handleChange', - value: function _handleChange(event) { - var onChange = this.props.onChange; - - if (onChange) onChange(event); - this.adjustTextarea(event); - } - }, { - key: 'adjustTextarea', - value: function adjustTextarea(_ref) { - var _ref$target = _ref.target, - target = _ref$target === undefined ? this.el : _ref$target; - - target.style.height = 0; - target.style.height = target.scrollHeight + 'px'; - } - }, { - key: 'render', - value: function render() { - var _this2 = this; - - var rest = _objectWithoutProperties(this.props, []); - - return _react2.default.createElement('textarea', _extends({}, rest, { - ref: function ref(x) { - return _this2.el = x; - }, - onChange: this._handleChange - })); - } - }]); - - return ExpandingTextarea; -}(_react.Component); - -ExpandingTextarea.propTypes = { - onChange: _propTypes2.default.func -}; - -exports.default = ExpandingTextarea; - -/***/ }), -/* 114 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _publish = __webpack_require__(4); - -var _view = __webpack_require__(115); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var channel = _ref.channel, - publish = _ref.publish; - - return { - loggedInChannelName: channel.loggedInChannel.name, - publishInChannel: publish.publishInChannel, - selectedChannel: publish.selectedChannel, - channelError: publish.error.channel - }; -}; - -var mapDispatchToProps = function mapDispatchToProps(dispatch) { - return { - onPublishInChannelChange: function onPublishInChannelChange(value) { - dispatch((0, _publish.updateError)('channel', null)); - dispatch((0, _publish.setPublishInChannel)(value)); - }, - onChannelSelect: function onChannelSelect(value) { - dispatch((0, _publish.updateError)('channel', null)); - dispatch((0, _publish.updateSelectedChannel)(value)); - } - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); - -/***/ }), -/* 115 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _ChannelLoginForm = __webpack_require__(39); - -var _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm); - -var _ChannelCreateForm = __webpack_require__(40); - -var _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm); - -var _publish_channel_select_states = __webpack_require__(33); - -var states = _interopRequireWildcard(_publish_channel_select_states); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var ChannelSelect = function (_React$Component) { - _inherits(ChannelSelect, _React$Component); - - function ChannelSelect(props) { - _classCallCheck(this, ChannelSelect); - - var _this = _possibleConstructorReturn(this, (ChannelSelect.__proto__ || Object.getPrototypeOf(ChannelSelect)).call(this, props)); - - _this.toggleAnonymousPublish = _this.toggleAnonymousPublish.bind(_this); - _this.handleSelection = _this.handleSelection.bind(_this); - return _this; - } - - _createClass(ChannelSelect, [{ - key: 'toggleAnonymousPublish', - value: function toggleAnonymousPublish(event) { - var value = event.target.value; - if (value === 'anonymous') { - this.props.onPublishInChannelChange(false); - } else { - this.props.onPublishInChannelChange(true); - } - } - }, { - key: 'handleSelection', - value: function handleSelection(event) { - var selectedOption = event.target.selectedOptions[0].value; - this.props.onChannelSelect(selectedOption); - } - }, { - key: 'render', - value: function render() { - return _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - 'form', - null, - _react2.default.createElement( - 'div', - { className: 'column column--3 column--med-10' }, - _react2.default.createElement('input', { type: 'radio', name: 'anonymous-or-channel', id: 'anonymous-radio', className: 'input-radio', value: 'anonymous', checked: !this.props.publishInChannel, onChange: this.toggleAnonymousPublish }), - _react2.default.createElement( - 'label', - { className: 'label label--pointer', htmlFor: 'anonymous-radio' }, - 'Anonymous' - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--7 column--med-10' }, - _react2.default.createElement('input', { type: 'radio', name: 'anonymous-or-channel', id: 'channel-radio', className: 'input-radio', value: 'in a channel', checked: this.props.publishInChannel, onChange: this.toggleAnonymousPublish }), - _react2.default.createElement( - 'label', - { className: 'label label--pointer', htmlFor: 'channel-radio' }, - 'In a channel' - ) - ), - this.props.channelError ? _react2.default.createElement( - 'p', - { className: 'info-message--failure' }, - this.props.channelError - ) : _react2.default.createElement( - 'p', - { className: 'info-message' }, - 'Publish anonymously or in a channel' - ) - ), - this.props.publishInChannel && _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - 'div', - { className: 'column column--3' }, - _react2.default.createElement( - 'label', - { className: 'label', htmlFor: 'channel-name-select' }, - 'Channel:' - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--7' }, - _react2.default.createElement( - 'select', - { type: 'text', id: 'channel-name-select', className: 'select select--arrow', value: this.props.selectedChannel, onChange: this.handleSelection }, - this.props.loggedInChannelName && _react2.default.createElement( - 'option', - { value: this.props.loggedInChannelName, id: 'publish-channel-select-channel-option' }, - this.props.loggedInChannelName - ), - _react2.default.createElement( - 'option', - { value: states.LOGIN }, - 'Existing' - ), - _react2.default.createElement( - 'option', - { value: states.CREATE }, - 'New' - ) - ) - ), - this.props.selectedChannel === states.LOGIN && _react2.default.createElement(_ChannelLoginForm2.default, null), - this.props.selectedChannel === states.CREATE && _react2.default.createElement(_ChannelCreateForm2.default, null) - ) - ); - } - }]); - - return ChannelSelect; -}(_react2.default.Component); - -exports.default = ChannelSelect; - -/***/ }), -/* 116 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _request = __webpack_require__(11); - -var _request2 = _interopRequireDefault(_request); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var ChannelLoginForm = function (_React$Component) { - _inherits(ChannelLoginForm, _React$Component); - - function ChannelLoginForm(props) { - _classCallCheck(this, ChannelLoginForm); - - var _this = _possibleConstructorReturn(this, (ChannelLoginForm.__proto__ || Object.getPrototypeOf(ChannelLoginForm)).call(this, props)); - - _this.state = { - error: null, - name: '', - password: '' - }; - _this.handleInput = _this.handleInput.bind(_this); - _this.loginToChannel = _this.loginToChannel.bind(_this); - return _this; - } - - _createClass(ChannelLoginForm, [{ - key: 'handleInput', - value: function handleInput(event) { - var name = event.target.name; - var value = event.target.value; - this.setState(_defineProperty({}, name, value)); - } - }, { - key: 'loginToChannel', - value: function loginToChannel(event) { - var _this2 = this; - - event.preventDefault(); - var params = { - method: 'POST', - body: JSON.stringify({ username: this.state.name, password: this.state.password }), - headers: new Headers({ - 'Content-Type': 'application/json' - }), - credentials: 'include' - }; - (0, _request2.default)('login', params).then(function (_ref) { - var success = _ref.success, - channelName = _ref.channelName, - shortChannelId = _ref.shortChannelId, - channelClaimId = _ref.channelClaimId, - message = _ref.message; - - if (success) { - _this2.props.onChannelLogin(channelName, shortChannelId, channelClaimId); - } else { - _this2.setState({ 'error': message }); - }; - }).catch(function (error) { - if (error.message) { - _this2.setState({ 'error': error.message }); - } else { - _this2.setState({ 'error': error }); - } - }); - } - }, { - key: 'render', - value: function render() { - return _react2.default.createElement( - 'form', - { id: 'channel-login-form' }, - _react2.default.createElement( - 'div', - { className: 'row row--wide row--short' }, - _react2.default.createElement( - 'div', - { className: 'column column--3 column--sml-10' }, - _react2.default.createElement( - 'label', - { className: 'label', htmlFor: 'channel-login-name-input' }, - 'Name:' - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--6 column--sml-10' }, - _react2.default.createElement( - 'div', - { className: 'input-text--primary flex-container--row flex-container--left-bottom' }, - _react2.default.createElement( - 'span', - null, - '@' - ), - _react2.default.createElement('input', { type: 'text', id: 'channel-login-name-input', className: 'input-text', name: 'name', placeholder: 'Your Channel Name', value: this.state.channelName, onChange: this.handleInput }) - ) - ) - ), - _react2.default.createElement( - 'div', - { className: 'row row--wide row--short' }, - _react2.default.createElement( - 'div', - { className: 'column column--3 column--sml-10' }, - _react2.default.createElement( - 'label', - { className: 'label', htmlFor: 'channel-login-password-input' }, - 'Password:' - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--6 column--sml-10' }, - _react2.default.createElement( - 'div', - { className: 'input-text--primary' }, - _react2.default.createElement('input', { type: 'password', id: 'channel-login-password-input', name: 'password', className: 'input-text', placeholder: '', value: this.state.channelPassword, onChange: this.handleInput }) - ) - ) - ), - this.state.error ? _react2.default.createElement( - 'p', - { className: 'info-message--failure' }, - this.state.error - ) : _react2.default.createElement( - 'p', - { className: 'info-message' }, - 'Enter the name and password for your channel' - ), - _react2.default.createElement( - 'div', - { className: 'row row--wide' }, - _react2.default.createElement( - 'button', - { className: 'button--primary', onClick: this.loginToChannel }, - 'Authenticate' - ) - ) - ); - } - }]); - - return ChannelLoginForm; -}(_react2.default.Component); - -exports.default = ChannelLoginForm; - -/***/ }), -/* 117 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _ProgressBar = __webpack_require__(20); - -var _ProgressBar2 = _interopRequireDefault(_ProgressBar); - -var _request = __webpack_require__(11); - -var _request2 = _interopRequireDefault(_request); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var ChannelCreateForm = function (_React$Component) { - _inherits(ChannelCreateForm, _React$Component); - - function ChannelCreateForm(props) { - _classCallCheck(this, ChannelCreateForm); - - var _this = _possibleConstructorReturn(this, (ChannelCreateForm.__proto__ || Object.getPrototypeOf(ChannelCreateForm)).call(this, props)); - - _this.state = { - error: null, - channel: '', - password: '', - status: null - }; - _this.handleChannelInput = _this.handleChannelInput.bind(_this); - _this.handleInput = _this.handleInput.bind(_this); - _this.createChannel = _this.createChannel.bind(_this); - return _this; - } - - _createClass(ChannelCreateForm, [{ - key: 'cleanseChannelInput', - value: function cleanseChannelInput(input) { - input = input.replace(/\s+/g, '-'); // replace spaces with dashes - input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-' - return input; - } - }, { - key: 'handleChannelInput', - value: function handleChannelInput(event) { - var value = event.target.value; - value = this.cleanseChannelInput(value); - this.setState({ channel: value }); - if (value) { - this.updateIsChannelAvailable(value); - } else { - this.setState({ error: 'Please enter a channel name' }); - } - } - }, { - key: 'handleInput', - value: function handleInput(event) { - var name = event.target.name; - var value = event.target.value; - this.setState(_defineProperty({}, name, value)); - } - }, { - key: 'updateIsChannelAvailable', - value: function updateIsChannelAvailable(channel) { - var _this2 = this; - - var channelWithAtSymbol = '@' + channel; - (0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol).then(function () { - _this2.setState({ 'error': null }); - }).catch(function (error) { - _this2.setState({ 'error': error.message }); - }); - } - }, { - key: 'checkIsChannelAvailable', - value: function checkIsChannelAvailable(channel) { - var channelWithAtSymbol = '@' + channel; - return (0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol); - } - }, { - key: 'checkIsPasswordProvided', - value: function checkIsPasswordProvided(password) { - return new Promise(function (resolve, reject) { - if (!password || password.length < 1) { - return reject(new Error('Please provide a password')); - } - resolve(); - }); - } - }, { - key: 'makePublishChannelRequest', - value: function makePublishChannelRequest(username, password) { - var params = { - method: 'POST', - body: JSON.stringify({ username: username, password: password }), - headers: new Headers({ - 'Content-Type': 'application/json' - }), - credentials: 'include' - }; - return new Promise(function (resolve, reject) { - (0, _request2.default)('/signup', params).then(function (result) { - return resolve(result); - }).catch(function (error) { - reject(new Error('Unfortunately, we encountered an error while creating your channel. Please let us know in Discord! ' + error.message)); - }); - }); - } - }, { - key: 'createChannel', - value: function createChannel(event) { - var _this3 = this; - - event.preventDefault(); - this.checkIsPasswordProvided(this.state.password).then(function () { - return _this3.checkIsChannelAvailable(_this3.state.channel); - }).then(function () { - _this3.setState({ status: 'We are publishing your new channel. Sit tight...' }); - return _this3.makePublishChannelRequest(_this3.state.channel, _this3.state.password); - }).then(function (result) { - _this3.setState({ status: null }); - _this3.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId); - }).catch(function (error) { - if (error.message) { - _this3.setState({ 'error': error.message, status: null }); - } else { - _this3.setState({ 'error': error, status: null }); - }; - }); - } - }, { - key: 'render', - value: function render() { - return _react2.default.createElement( - 'div', - null, - !this.state.status ? _react2.default.createElement( - 'form', - { id: 'publish-channel-form' }, - _react2.default.createElement( - 'div', - { className: 'row row--wide row--short' }, - _react2.default.createElement( - 'div', - { className: 'column column--3 column--sml-10' }, - _react2.default.createElement( - 'label', - { className: 'label', htmlFor: 'new-channel-name' }, - 'Name:' - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--6 column--sml-10' }, - _react2.default.createElement( - 'div', - { className: 'input-text--primary flex-container--row flex-container--left-bottom span--relative' }, - _react2.default.createElement( - 'span', - null, - '@' - ), - _react2.default.createElement('input', { type: 'text', name: 'channel', id: 'new-channel-name', className: 'input-text', placeholder: 'exampleChannelName', value: this.state.channel, onChange: this.handleChannelInput }), - this.state.channel && !this.state.error && _react2.default.createElement( - 'span', - { id: 'input-success-channel-name', className: 'info-message--success span--absolute' }, - '\u2713' - ), - this.state.error && _react2.default.createElement( - 'span', - { id: 'input-success-channel-name', className: 'info-message--failure span--absolute' }, - '\u2716' - ) - ) - ) - ), - _react2.default.createElement( - 'div', - { className: 'row row--wide row--short' }, - _react2.default.createElement( - 'div', - { className: 'column column--3 column--sml-10' }, - _react2.default.createElement( - 'label', - { className: 'label', htmlFor: 'new-channel-password' }, - 'Password:' - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--6 column--sml-10' }, - _react2.default.createElement( - 'div', - { className: 'input-text--primary' }, - _react2.default.createElement('input', { type: 'password', name: 'password', id: 'new-channel-password', className: 'input-text', placeholder: '', value: this.state.password, onChange: this.handleInput }) - ) - ) - ), - this.state.error ? _react2.default.createElement( - 'p', - { className: 'info-message--failure' }, - this.state.error - ) : _react2.default.createElement( - 'p', - { className: 'info-message' }, - 'Choose a name and password for your channel' - ), - _react2.default.createElement( - 'div', - { className: 'row row--wide' }, - _react2.default.createElement( - 'button', - { className: 'button--primary', onClick: this.createChannel }, - 'Create Channel' - ) - ) - ) : _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - 'p', - { className: 'fine-print' }, - this.state.status - ), - _react2.default.createElement(_ProgressBar2.default, { size: 12 }) - ) - ); - } - }]); - - return ChannelCreateForm; -}(_react2.default.Component); - -exports.default = ChannelCreateForm; - -/***/ }), -/* 118 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var ActiveStatusBar = function ActiveStatusBar() { - return _react2.default.createElement( - 'span', - { className: 'progress-bar progress-bar--active' }, - '| ' - ); -}; - -exports.default = ActiveStatusBar; - -/***/ }), -/* 119 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var InactiveStatusBar = function InactiveStatusBar() { - return _react2.default.createElement( - 'span', - { className: 'progress-bar progress-bar--inactive' }, - '| ' - ); -}; - -exports.default = InactiveStatusBar; - -/***/ }), -/* 120 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _publish = __webpack_require__(4); - -var _view = __webpack_require__(121); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var publish = _ref.publish; - - return { - status: publish.status.status, - message: publish.status.message - }; -}; - -var mapDispatchToProps = { - clearFile: _publish.clearFile -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); - -/***/ }), -/* 121 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _ProgressBar = __webpack_require__(20); - -var _ProgressBar2 = _interopRequireDefault(_ProgressBar); - -var _publish_claim_states = __webpack_require__(122); - -var publishStates = _interopRequireWildcard(_publish_claim_states); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var PublishStatus = function (_React$Component) { - _inherits(PublishStatus, _React$Component); - - function PublishStatus() { - _classCallCheck(this, PublishStatus); - - return _possibleConstructorReturn(this, (PublishStatus.__proto__ || Object.getPrototypeOf(PublishStatus)).apply(this, arguments)); - } - - _createClass(PublishStatus, [{ - key: 'render', - value: function render() { - var _props = this.props, - status = _props.status, - message = _props.message, - clearFile = _props.clearFile; - - return _react2.default.createElement( - 'div', - { className: 'row row--tall flex-container--column flex-container--center-center' }, - status === publishStates.LOAD_START && _react2.default.createElement( - 'div', - { className: 'row align-content-center' }, - _react2.default.createElement( - 'p', - null, - 'File is loading to server' - ), - _react2.default.createElement( - 'p', - { className: 'blue' }, - '0%' - ) - ), - status === publishStates.LOADING && _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - 'div', - { className: 'row align-content-center' }, - _react2.default.createElement( - 'p', - null, - 'File is loading to server' - ), - _react2.default.createElement( - 'p', - { className: 'blue' }, - message - ) - ) - ), - status === publishStates.PUBLISHING && _react2.default.createElement( - 'div', - { className: 'row align-content-center' }, - _react2.default.createElement( - 'p', - null, - 'Upload complete. Your file is now being published on the blockchain...' - ), - _react2.default.createElement(_ProgressBar2.default, { size: 12 }), - _react2.default.createElement( - 'p', - null, - 'Curious what magic is happening here? ', - _react2.default.createElement( - 'a', - { className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' }, - 'Learn more.' - ) - ) - ), - status === publishStates.SUCCESS && _react2.default.createElement( - 'div', - { className: 'row align-content-center' }, - _react2.default.createElement( - 'p', - null, - 'Your publish is complete! You are being redirected to it now.' - ), - _react2.default.createElement( - 'p', - null, - 'If you are not automatically redirected, ', - _react2.default.createElement( - 'a', - { className: 'link--primary', target: '_blank', href: message }, - 'click here.' - ) - ) - ), - status === publishStates.FAILED && _react2.default.createElement( - 'div', - { className: 'row align-content-center' }, - _react2.default.createElement( - 'p', - null, - 'Something went wrong...' - ), - _react2.default.createElement( - 'p', - null, - _react2.default.createElement( - 'strong', - null, - message - ) - ), - _react2.default.createElement( - 'p', - null, - 'For help, post the above error text in the #speech channel on the ', - _react2.default.createElement( - 'a', - { className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' }, - 'lbry discord' - ) - ), - _react2.default.createElement( - 'button', - { className: 'button--secondary', onClick: clearFile }, - 'Reset' - ) - ) - ); - } - }]); - - return PublishStatus; -}(_react2.default.Component); - -; - -exports.default = PublishStatus; - -/***/ }), -/* 122 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var LOAD_START = exports.LOAD_START = 'LOAD_START'; -var LOADING = exports.LOADING = 'LOADING'; -var PUBLISHING = exports.PUBLISHING = 'PUBLISHING'; -var SUCCESS = exports.SUCCESS = 'SUCCESS'; -var FAILED = exports.FAILED = 'FAILED'; - -/***/ }), -/* 123 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _view = __webpack_require__(124); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var publish = _ref.publish; - - return { - message: publish.disabledMessage - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); - -/***/ }), -/* 124 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var PublishDisabledMessage = function (_React$Component) { - _inherits(PublishDisabledMessage, _React$Component); - - function PublishDisabledMessage() { - _classCallCheck(this, PublishDisabledMessage); - - return _possibleConstructorReturn(this, (PublishDisabledMessage.__proto__ || Object.getPrototypeOf(PublishDisabledMessage)).apply(this, arguments)); - } - - _createClass(PublishDisabledMessage, [{ - key: 'render', - value: function render() { - var message = this.props.message; - console.log('this.props.message:', message); - return _react2.default.createElement( - 'div', - { className: 'row dropzone--disabled row--tall flex-container--column flex-container--center-center' }, - _react2.default.createElement( - 'p', - { className: 'text--disabled' }, - 'Publishing is currently disabled.' - ), - _react2.default.createElement( - 'p', - { className: 'text--disabled' }, - message - ) - ); - } - }]); - - return PublishDisabledMessage; -}(_react2.default.Component); - -exports.default = PublishDisabledMessage; - -/***/ }), -/* 125 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _NavBar = __webpack_require__(7); - -var _NavBar2 = _interopRequireDefault(_NavBar); - -var _SEO = __webpack_require__(9); - -var _SEO2 = _interopRequireDefault(_SEO); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var AboutPage = function (_React$Component) { - _inherits(AboutPage, _React$Component); - - function AboutPage() { - _classCallCheck(this, AboutPage); - - return _possibleConstructorReturn(this, (AboutPage.__proto__ || Object.getPrototypeOf(AboutPage)).apply(this, arguments)); - } - - _createClass(AboutPage, [{ - key: 'render', - value: function render() { - return _react2.default.createElement( - 'div', - null, - _react2.default.createElement(_SEO2.default, { pageTitle: 'About', pageUri: 'about' }), - _react2.default.createElement(_NavBar2.default, null), - _react2.default.createElement( - 'div', - { className: 'row row--padded' }, - _react2.default.createElement( - 'div', - { className: 'column column--5 column--med-10 align-content-top' }, - _react2.default.createElement( - 'div', - { className: 'column column--8 column--med-10' }, - _react2.default.createElement( - 'p', - { className: 'pull-quote' }, - 'Spee.ch is an open-source project. Please contribute to the existing site, or fork it and make your own.' - ), - _react2.default.createElement( - 'p', - null, - _react2.default.createElement( - 'a', - { className: 'link--primary', target: '_blank', href: 'https://twitter.com/spee_ch' }, - 'TWITTER' - ) - ), - _react2.default.createElement( - 'p', - null, - _react2.default.createElement( - 'a', - { className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch' }, - 'GITHUB' - ) - ), - _react2.default.createElement( - 'p', - null, - _react2.default.createElement( - 'a', - { className: 'link--primary', target: '_blank', href: 'https://discord.gg/YjYbwhS' }, - 'DISCORD CHANNEL' - ) - ), - _react2.default.createElement( - 'p', - null, - _react2.default.createElement( - 'a', - { className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch/blob/master/README.md' }, - 'DOCUMENTATION' - ) - ) - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--5 column--med-10 align-content-top' }, - _react2.default.createElement( - 'div', - { className: 'column column--8 column--med-10' }, - _react2.default.createElement( - 'p', - null, - 'Spee.ch is a media-hosting site that reads from and publishes content to the ', - _react2.default.createElement( - 'a', - { className: 'link--primary', href: 'https://lbry.io' }, - 'LBRY' - ), - ' blockchain.' - ), - _react2.default.createElement( - 'p', - null, - 'Spee.ch is a hosting service, but with the added benefit that it stores your content on a decentralized network of computers -- the ', - _react2.default.createElement( - 'a', - { className: 'link--primary', href: 'https://lbry.io/get' }, - 'LBRY' - ), - ' network. This means that your images are stored in multiple locations without a single point of failure.' - ), - _react2.default.createElement( - 'h3', - null, - 'Contribute' - ), - _react2.default.createElement( - 'p', - null, - 'If you have an idea for your own spee.ch-like site on top of LBRY, fork our ', - _react2.default.createElement( - 'a', - { className: 'link--primary', href: 'https://github.com/lbryio/spee.ch' }, - 'github repo' - ), - ' and go to town!' - ), - _react2.default.createElement( - 'p', - null, - 'If you want to improve spee.ch, join our ', - _react2.default.createElement( - 'a', - { className: 'link--primary', href: 'https://discord.gg/YjYbwhS' }, - 'discord channel' - ), - ' or solve one of our ', - _react2.default.createElement( - 'a', - { className: 'link--primary', href: 'https://github.com/lbryio/spee.ch/issues' }, - 'github issues' - ), - '.' - ) - ) - ) - ) - ); - } - }]); - - return AboutPage; -}(_react2.default.Component); - -; - -exports.default = AboutPage; - -/***/ }), -/* 126 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _view = __webpack_require__(127); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var channel = _ref.channel; - - return { - loggedInChannelName: channel.loggedInChannel.name - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); - -/***/ }), -/* 127 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _reactRouterDom = __webpack_require__(3); - -var _SEO = __webpack_require__(9); - -var _SEO2 = _interopRequireDefault(_SEO); - -var _NavBar = __webpack_require__(7); - -var _NavBar2 = _interopRequireDefault(_NavBar); - -var _ChannelLoginForm = __webpack_require__(39); - -var _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm); - -var _ChannelCreateForm = __webpack_require__(40); - -var _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var LoginPage = function (_React$Component) { - _inherits(LoginPage, _React$Component); - - function LoginPage() { - _classCallCheck(this, LoginPage); - - return _possibleConstructorReturn(this, (LoginPage.__proto__ || Object.getPrototypeOf(LoginPage)).apply(this, arguments)); - } - - _createClass(LoginPage, [{ - key: 'componentWillReceiveProps', - value: function componentWillReceiveProps(newProps) { - // re-route the user to the homepage if the user is logged in - if (newProps.loggedInChannelName !== this.props.loggedInChannelName) { - this.props.history.push('/'); - } - } - }, { - key: 'render', - value: function render() { - return _react2.default.createElement( - 'div', - null, - _react2.default.createElement(_SEO2.default, { pageTitle: 'Login', pageUri: 'login' }), - _react2.default.createElement(_NavBar2.default, null), - _react2.default.createElement( - 'div', - { className: 'row row--padded' }, - _react2.default.createElement( - 'div', - { className: 'column column--5 column--med-10 align-content-top' }, - _react2.default.createElement( - 'div', - { className: 'column column--8 column--med-10' }, - _react2.default.createElement( - 'p', - null, - 'Channels allow you to publish and group content under an identity. You can create a channel for yourself, or share one with like-minded friends. You can create 1 channel, or 100, so whether you\'re ', - _react2.default.createElement( - 'a', - { className: 'link--primary', target: '_blank', href: '/@catalonia2017:43dcf47163caa21d8404d9fe9b30f78ef3e146a8' }, - 'documenting important events' - ), - ', or making a public repository for ', - _react2.default.createElement( - 'a', - { className: 'link--primary', target: '_blank', href: '/@catGifs' }, - 'cat gifs' - ), - ' (password: \'1234\'), try creating a channel for it!' - ) - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--5 column--med-10 align-content-top' }, - _react2.default.createElement( - 'div', - { className: 'column column--8 column--med-10' }, - _react2.default.createElement( - 'h3', - { className: 'h3--no-bottom' }, - 'Log in to an existing channel:' - ), - _react2.default.createElement(_ChannelLoginForm2.default, null), - _react2.default.createElement( - 'h3', - { className: 'h3--no-bottom' }, - 'Create a brand new channel:' - ), - _react2.default.createElement(_ChannelCreateForm2.default, null) - ) - ) - ) - ); - } - }]); - - return LoginPage; -}(_react2.default.Component); - -; - -exports.default = (0, _reactRouterDom.withRouter)(LoginPage); - -/***/ }), -/* 128 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _show = __webpack_require__(8); - -var _view = __webpack_require__(129); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var show = _ref.show; - - return { - error: show.request.error, - requestType: show.request.type - }; -}; - -var mapDispatchToProps = { - onHandleShowPageUri: _show.onHandleShowPageUri -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); - -/***/ }), -/* 129 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _ErrorPage = __webpack_require__(21); - -var _ErrorPage2 = _interopRequireDefault(_ErrorPage); - -var _ShowAssetLite = __webpack_require__(130); - -var _ShowAssetLite2 = _interopRequireDefault(_ShowAssetLite); - -var _ShowAssetDetails = __webpack_require__(133); - -var _ShowAssetDetails2 = _interopRequireDefault(_ShowAssetDetails); - -var _ShowChannel = __webpack_require__(139); - -var _ShowChannel2 = _interopRequireDefault(_ShowChannel); - -var _show_request_types = __webpack_require__(41); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var ShowPage = function (_React$Component) { - _inherits(ShowPage, _React$Component); - - function ShowPage() { - _classCallCheck(this, ShowPage); - - return _possibleConstructorReturn(this, (ShowPage.__proto__ || Object.getPrototypeOf(ShowPage)).apply(this, arguments)); - } - - _createClass(ShowPage, [{ - key: 'componentDidMount', - value: function componentDidMount() { - this.props.onHandleShowPageUri(this.props.match.params); - } - }, { - key: 'componentWillReceiveProps', - value: function componentWillReceiveProps(nextProps) { - if (nextProps.match.params !== this.props.match.params) { - this.props.onHandleShowPageUri(nextProps.match.params); - } - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - error = _props.error, - requestType = _props.requestType; - - if (error) { - return _react2.default.createElement(_ErrorPage2.default, { error: error }); - } - switch (requestType) { - case _show_request_types.CHANNEL: - return _react2.default.createElement(_ShowChannel2.default, null); - case _show_request_types.ASSET_LITE: - return _react2.default.createElement(_ShowAssetLite2.default, null); - case _show_request_types.ASSET_DETAILS: - return _react2.default.createElement(_ShowAssetDetails2.default, null); - default: - return _react2.default.createElement( - 'p', - null, - 'loading...' - ); - } - } - }]); - - return ShowPage; -}(_react2.default.Component); - -; - -exports.default = ShowPage; - -/***/ }), -/* 130 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _view = __webpack_require__(131); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var show = _ref.show; - - // select request info - var requestId = show.request.id; - // select asset info - var asset = void 0; - var request = show.requestList[requestId] || null; - var assetList = show.assetList; - if (request && assetList) { - var assetKey = request.key; // note: just store this in the request - asset = assetList[assetKey] || null; - }; - // return props - return { - asset: asset - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); - -/***/ }), -/* 131 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _SEO = __webpack_require__(9); - -var _SEO2 = _interopRequireDefault(_SEO); - -var _reactRouterDom = __webpack_require__(3); - -var _AssetDisplay = __webpack_require__(42); - -var _AssetDisplay2 = _interopRequireDefault(_AssetDisplay); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var ShowLite = function (_React$Component) { - _inherits(ShowLite, _React$Component); - - function ShowLite() { - _classCallCheck(this, ShowLite); - - return _possibleConstructorReturn(this, (ShowLite.__proto__ || Object.getPrototypeOf(ShowLite)).apply(this, arguments)); - } - - _createClass(ShowLite, [{ - key: 'render', - value: function render() { - var asset = this.props.asset; - - if (asset) { - var _asset$claimData = asset.claimData, - name = _asset$claimData.name, - claimId = _asset$claimData.claimId; - - return _react2.default.createElement( - 'div', - { className: 'row row--tall flex-container--column flex-container--center-center show-lite-container' }, - _react2.default.createElement(_SEO2.default, { pageTitle: name, asset: asset }), - _react2.default.createElement(_AssetDisplay2.default, null), - _react2.default.createElement( - _reactRouterDom.Link, - { id: 'asset-boilerpate', className: 'link--primary fine-print', to: '/' + claimId + '/' + name }, - 'hosted via Spee.ch' - ) - ); - } - return _react2.default.createElement( - 'div', - { className: 'row row--tall row--padded flex-container--column flex-container--center-center' }, - _react2.default.createElement( - 'p', - null, - 'loading asset data...' - ) - ); - } - }]); - - return ShowLite; -}(_react2.default.Component); - -; - -exports.default = ShowLite; - -/***/ }), -/* 132 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _ProgressBar = __webpack_require__(20); - -var _ProgressBar2 = _interopRequireDefault(_ProgressBar); - -var _asset_display_states = __webpack_require__(35); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var AssetDisplay = function (_React$Component) { - _inherits(AssetDisplay, _React$Component); - - function AssetDisplay() { - _classCallCheck(this, AssetDisplay); - - return _possibleConstructorReturn(this, (AssetDisplay.__proto__ || Object.getPrototypeOf(AssetDisplay)).apply(this, arguments)); - } - - _createClass(AssetDisplay, [{ - key: 'componentDidMount', - value: function componentDidMount() { - var _props$asset$claimDat = this.props.asset.claimData, - name = _props$asset$claimDat.name, - claimId = _props$asset$claimDat.claimId; - - this.props.onFileRequest(name, claimId); - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - status = _props.status, - error = _props.error, - _props$asset$claimDat2 = _props.asset.claimData, - name = _props$asset$claimDat2.name, - claimId = _props$asset$claimDat2.claimId, - contentType = _props$asset$claimDat2.contentType, - fileExt = _props$asset$claimDat2.fileExt, - thumbnail = _props$asset$claimDat2.thumbnail; - - return _react2.default.createElement( - 'div', - { id: 'asset-display-component' }, - status === _asset_display_states.LOCAL_CHECK && _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - 'p', - null, - 'Checking to see if Spee.ch has your asset locally...' - ) - ), - status === _asset_display_states.UNAVAILABLE && _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - 'p', - null, - 'Sit tight, we\'re searching the LBRY blockchain for your asset!' - ), - _react2.default.createElement(_ProgressBar2.default, { size: 12 }), - _react2.default.createElement( - 'p', - null, - 'Curious what magic is happening here? ', - _react2.default.createElement( - 'a', - { className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' }, - 'Learn more.' - ) - ) - ), - status === _asset_display_states.ERROR && _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - 'p', - null, - 'Unfortunately, we couldn\'t download your asset from LBRY. You can help us out by sharing the below error message in the ', - _react2.default.createElement( - 'a', - { className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' }, - 'LBRY discord' - ), - '.' - ), - _react2.default.createElement( - 'i', - null, - _react2.default.createElement( - 'p', - { id: 'error-message' }, - error - ) - ) - ), - status === _asset_display_states.AVAILABLE && function () { - switch (contentType) { - case 'image/jpeg': - case 'image/jpg': - case 'image/png': - return _react2.default.createElement('img', { - className: 'asset', - src: '/' + claimId + '/' + name + '.' + fileExt, - alt: name }); - case 'image/gif': - return _react2.default.createElement('img', { - className: 'asset', - src: '/' + claimId + '/' + name + '.' + fileExt, - alt: name - }); - case 'video/mp4': - return _react2.default.createElement( - 'video', - { className: 'asset video', controls: true, poster: thumbnail }, - _react2.default.createElement('source', { - src: '/' + claimId + '/' + name + '.' + fileExt - }), - _react2.default.createElement( - 'p', - null, - 'Your browser does not support the ', - _react2.default.createElement( - 'code', - null, - 'video' - ), - ' element.' - ) - ); - default: - return _react2.default.createElement( - 'p', - null, - 'Unsupported file type' - ); - } - }() - ); - } - }]); - - return AssetDisplay; -}(_react2.default.Component); - -; - -exports.default = AssetDisplay; - -/***/ }), -/* 133 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _view = __webpack_require__(134); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var show = _ref.show; - - // select request info - var requestId = show.request.id; - // select asset info - var asset = void 0; - var request = show.requestList[requestId] || null; - var assetList = show.assetList; - if (request && assetList) { - var assetKey = request.key; // note: just store this in the request - asset = assetList[assetKey] || null; - }; - // return props - return { - asset: asset - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); - -/***/ }), -/* 134 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _SEO = __webpack_require__(9); - -var _SEO2 = _interopRequireDefault(_SEO); - -var _NavBar = __webpack_require__(7); - -var _NavBar2 = _interopRequireDefault(_NavBar); - -var _ErrorPage = __webpack_require__(21); - -var _ErrorPage2 = _interopRequireDefault(_ErrorPage); - -var _AssetTitle = __webpack_require__(135); - -var _AssetTitle2 = _interopRequireDefault(_AssetTitle); - -var _AssetDisplay = __webpack_require__(42); - -var _AssetDisplay2 = _interopRequireDefault(_AssetDisplay); - -var _AssetInfo = __webpack_require__(137); - -var _AssetInfo2 = _interopRequireDefault(_AssetInfo); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var ShowAssetDetails = function (_React$Component) { - _inherits(ShowAssetDetails, _React$Component); - - function ShowAssetDetails() { - _classCallCheck(this, ShowAssetDetails); - - return _possibleConstructorReturn(this, (ShowAssetDetails.__proto__ || Object.getPrototypeOf(ShowAssetDetails)).apply(this, arguments)); - } - - _createClass(ShowAssetDetails, [{ - key: 'render', - value: function render() { - var asset = this.props.asset; - - if (asset) { - var name = asset.claimData.name; - - return _react2.default.createElement( - 'div', - null, - _react2.default.createElement(_SEO2.default, { pageTitle: name + ' - details', asset: asset }), - _react2.default.createElement(_NavBar2.default, null), - _react2.default.createElement( - 'div', - { className: 'row row--tall row--padded' }, - _react2.default.createElement( - 'div', - { className: 'column column--10' }, - _react2.default.createElement(_AssetTitle2.default, null) - ), - _react2.default.createElement( - 'div', - { className: 'column column--5 column--sml-10 align-content-top' }, - _react2.default.createElement( - 'div', - { className: 'row row--padded show-details-container' }, - _react2.default.createElement(_AssetDisplay2.default, null) - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--5 column--sml-10 align-content-top' }, - _react2.default.createElement( - 'div', - { className: 'row row--padded' }, - _react2.default.createElement(_AssetInfo2.default, null) - ) - ) - ) - ); - }; - return _react2.default.createElement(_ErrorPage2.default, { error: 'loading asset data...' }); - } - }]); - - return ShowAssetDetails; -}(_react2.default.Component); - -; - -exports.default = ShowAssetDetails; - -/***/ }), -/* 135 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _view = __webpack_require__(136); - -var _view2 = _interopRequireDefault(_view); - -var _show = __webpack_require__(13); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var show = _ref.show; - - var _selectAsset = (0, _show.selectAsset)(show), - title = _selectAsset.claimData.title; - - return { - title: title - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); - -/***/ }), -/* 136 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var AssetTitle = function AssetTitle(_ref) { - var title = _ref.title; - - return _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - 'span', - { className: 'text--large' }, - title - ) - ); -}; - -exports.default = AssetTitle; - -/***/ }), -/* 137 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _view = __webpack_require__(138); - -var _view2 = _interopRequireDefault(_view); - -var _show = __webpack_require__(13); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var show = _ref.show; - - // select asset - var asset = (0, _show.selectAsset)(show); - // return props - return { - asset: asset - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); - -/***/ }), -/* 138 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _reactRouterDom = __webpack_require__(3); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var AssetInfo = function (_React$Component) { - _inherits(AssetInfo, _React$Component); - - function AssetInfo(props) { - _classCallCheck(this, AssetInfo); - - var _this = _possibleConstructorReturn(this, (AssetInfo.__proto__ || Object.getPrototypeOf(AssetInfo)).call(this, props)); - - _this.copyToClipboard = _this.copyToClipboard.bind(_this); - return _this; - } - - _createClass(AssetInfo, [{ - key: 'copyToClipboard', - value: function copyToClipboard(event) { - var elementToCopy = event.target.dataset.elementtocopy; - var element = document.getElementById(elementToCopy); - element.select(); - try { - document.execCommand('copy'); - } catch (err) { - this.setState({ error: 'Oops, unable to copy' }); - } - } - }, { - key: 'render', - value: function render() { - var _props$asset = this.props.asset, - shortId = _props$asset.shortId, - _props$asset$claimDat = _props$asset.claimData, - channelName = _props$asset$claimDat.channelName, - certificateId = _props$asset$claimDat.certificateId, - description = _props$asset$claimDat.description, - name = _props$asset$claimDat.name, - claimId = _props$asset$claimDat.claimId, - fileExt = _props$asset$claimDat.fileExt, - contentType = _props$asset$claimDat.contentType, - thumbnail = _props$asset$claimDat.thumbnail, - host = _props$asset$claimDat.host; - - return _react2.default.createElement( - 'div', - null, - channelName && _react2.default.createElement( - 'div', - { className: 'row row--padded row--wide row--no-top' }, - _react2.default.createElement( - 'div', - { className: 'column column--2 column--med-10' }, - _react2.default.createElement( - 'span', - { className: 'text' }, - 'Channel:' - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--8 column--med-10' }, - _react2.default.createElement( - 'span', - { className: 'text' }, - _react2.default.createElement( - _reactRouterDom.Link, - { to: '/' + channelName + ':' + certificateId }, - channelName - ) - ) - ) - ), - description && _react2.default.createElement( - 'div', - { className: 'row row--padded row--wide row--no-top' }, - _react2.default.createElement( - 'span', - { className: 'text' }, - description - ) - ), - _react2.default.createElement( - 'div', - { id: 'show-share-buttons' }, - _react2.default.createElement( - 'div', - { className: 'row row--padded row--wide row--no-top' }, - _react2.default.createElement( - 'div', - { className: 'column column--2 column--med-10' }, - _react2.default.createElement( - 'span', - { className: 'text' }, - 'Share:' - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--8 column--med-10' }, - _react2.default.createElement( - 'div', - { - className: 'row row--short row--wide flex-container--row flex-container--space-between-bottom flex-container--wrap' }, - _react2.default.createElement( - 'a', - { className: 'link--primary', target: '_blank', href: 'https://twitter.com/intent/tweet?text=' + host + '/' + shortId + '/' + name }, - 'twitter' - ), - _react2.default.createElement( - 'a', - { className: 'link--primary', target: '_blank', href: 'https://www.facebook.com/sharer/sharer.php?u=' + host + '/' + shortId + '/' + name }, - 'facebook' - ), - _react2.default.createElement( - 'a', - { className: 'link--primary', target: '_blank', href: 'http://tumblr.com/widgets/share/tool?canonicalUrl=' + host + '/' + shortId + '/' + name }, - 'tumblr' - ), - _react2.default.createElement( - 'a', - { className: 'link--primary', target: '_blank', href: 'https://www.reddit.com/submit?url=' + host + '/' + shortId + '/' + name + '&title=' + name }, - 'reddit' - ) - ) - ) - ) - ), - _react2.default.createElement( - 'div', - { className: 'row row--padded row--wide row--no-top' }, - _react2.default.createElement( - 'div', - { id: 'show-short-link' }, - _react2.default.createElement( - 'div', - { className: 'column column--2 column--med-10' }, - _react2.default.createElement( - 'span', - { className: 'text' }, - 'Link:' - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--8 column--med-10' }, - _react2.default.createElement( - 'div', - { className: 'row row--short row--wide' }, - _react2.default.createElement( - 'div', - { className: 'column column--7' }, - _react2.default.createElement( - 'div', - { className: 'input-error', id: 'input-error-copy-short-link', hidden: 'true' }, - 'error here' - ), - _react2.default.createElement('input', { type: 'text', id: 'short-link', className: 'input-disabled input-text--full-width', readOnly: true, - spellCheck: 'false', - value: host + '/' + shortId + '/' + name + '.' + fileExt, - onClick: this.select }) - ), - _react2.default.createElement('div', { className: 'column column--1' }), - _react2.default.createElement( - 'div', - { className: 'column column--2' }, - _react2.default.createElement( - 'button', - { className: 'button--primary button--wide', 'data-elementtocopy': 'short-link', - onClick: this.copyToClipboard }, - 'copy' - ) - ) - ) - ) - ), - _react2.default.createElement( - 'div', - { id: 'show-embed-code' }, - _react2.default.createElement( - 'div', - { className: 'column column--2 column--med-10' }, - _react2.default.createElement( - 'span', - { className: 'text' }, - 'Embed:' - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--8 column--med-10' }, - _react2.default.createElement( - 'div', - { className: 'row row--short row--wide' }, - _react2.default.createElement( - 'div', - { className: 'column column--7' }, - _react2.default.createElement( - 'div', - { className: 'input-error', id: 'input-error-copy-embed-text', hidden: 'true' }, - 'error here' - ), - contentType === 'video/mp4' ? _react2.default.createElement('input', { type: 'text', id: 'embed-text', className: 'input-disabled input-text--full-width', readOnly: true, - onClick: this.select, spellCheck: 'false', - value: '' }) : _react2.default.createElement('input', { type: 'text', id: 'embed-text', className: 'input-disabled input-text--full-width', readOnly: true, - onClick: this.select, spellCheck: 'false', - value: '' - }) - ), - _react2.default.createElement('div', { className: 'column column--1' }), - _react2.default.createElement( - 'div', - { className: 'column column--2' }, - _react2.default.createElement( - 'button', - { className: 'button--primary button--wide', 'data-elementtocopy': 'embed-text', - onClick: this.copyToClipboard }, - 'copy' - ) - ) - ) - ) - ) - ), - _react2.default.createElement( - 'div', - { className: 'flex-container--row flex-container--space-between-bottom' }, - _react2.default.createElement( - _reactRouterDom.Link, - { className: 'link--primary', to: '/' + shortId + '/' + name + '.' + fileExt }, - _react2.default.createElement( - 'span', - { - className: 'text' }, - 'Direct Link' - ) - ), - _react2.default.createElement( - 'a', - { className: 'link--primary', href: host + '/' + claimId + '/' + name + '.' + fileExt, download: name }, - 'Download' - ), - _react2.default.createElement( - 'a', - { className: 'link--primary', target: '_blank', href: 'https://lbry.io/dmca' }, - 'Report' - ) - ) - ); - } - }]); - - return AssetInfo; -}(_react2.default.Component); - -; - -exports.default = AssetInfo; - -/***/ }), -/* 139 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _view = __webpack_require__(140); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var show = _ref.show; - - // select request info - var requestId = show.request.id; - // select request - var previousRequest = show.requestList[requestId] || null; - // select channel - var channel = void 0; - if (previousRequest) { - var channelKey = previousRequest.key; - channel = show.channelList[channelKey] || null; - } - return { - channel: channel - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); - -/***/ }), -/* 140 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _SEO = __webpack_require__(9); - -var _SEO2 = _interopRequireDefault(_SEO); - -var _ErrorPage = __webpack_require__(21); - -var _ErrorPage2 = _interopRequireDefault(_ErrorPage); - -var _NavBar = __webpack_require__(7); - -var _NavBar2 = _interopRequireDefault(_NavBar); - -var _ChannelClaimsDisplay = __webpack_require__(141); - -var _ChannelClaimsDisplay2 = _interopRequireDefault(_ChannelClaimsDisplay); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var ShowChannel = function (_React$Component) { - _inherits(ShowChannel, _React$Component); - - function ShowChannel() { - _classCallCheck(this, ShowChannel); - - return _possibleConstructorReturn(this, (ShowChannel.__proto__ || Object.getPrototypeOf(ShowChannel)).apply(this, arguments)); - } - - _createClass(ShowChannel, [{ - key: 'render', - value: function render() { - var channel = this.props.channel; - - if (channel) { - var name = channel.name, - longId = channel.longId, - shortId = channel.shortId; - - return _react2.default.createElement( - 'div', - null, - _react2.default.createElement(_SEO2.default, { pageTitle: name, channel: channel }), - _react2.default.createElement(_NavBar2.default, null), - _react2.default.createElement( - 'div', - { className: 'row row--tall row--padded' }, - _react2.default.createElement( - 'div', - { className: 'column column--10' }, - _react2.default.createElement( - 'h2', - null, - 'channel name: ', - name - ), - _react2.default.createElement( - 'p', - { className: 'fine-print' }, - 'full channel id: ', - longId - ), - _react2.default.createElement( - 'p', - { className: 'fine-print' }, - 'short channel id: ', - shortId - ) - ), - _react2.default.createElement( - 'div', - { className: 'column column--10' }, - _react2.default.createElement(_ChannelClaimsDisplay2.default, null) - ) - ) - ); - }; - return _react2.default.createElement(_ErrorPage2.default, { error: 'loading channel data...' }); - } - }]); - - return ShowChannel; -}(_react2.default.Component); - -; - -exports.default = ShowChannel; - -/***/ }), -/* 141 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _show = __webpack_require__(8); - -var _view = __webpack_require__(142); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var show = _ref.show; - - // select channel key - var request = show.requestList[show.request.id]; - var channelKey = request.key; - // select channel claims - var channel = show.channelList[channelKey] || null; - // return props - return { - channelKey: channelKey, - channel: channel - }; -}; - -var mapDispatchToProps = { - onUpdateChannelClaims: _show.onUpdateChannelClaims -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default); - -/***/ }), -/* 142 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _AssetPreview = __webpack_require__(143); - -var _AssetPreview2 = _interopRequireDefault(_AssetPreview); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var ChannelClaimsDisplay = function (_React$Component) { - _inherits(ChannelClaimsDisplay, _React$Component); - - function ChannelClaimsDisplay(props) { - _classCallCheck(this, ChannelClaimsDisplay); - - var _this = _possibleConstructorReturn(this, (ChannelClaimsDisplay.__proto__ || Object.getPrototypeOf(ChannelClaimsDisplay)).call(this, props)); - - _this.showNextResultsPage = _this.showNextResultsPage.bind(_this); - _this.showPreviousResultsPage = _this.showPreviousResultsPage.bind(_this); - return _this; - } - - _createClass(ChannelClaimsDisplay, [{ - key: 'showPreviousResultsPage', - value: function showPreviousResultsPage() { - var currentPage = this.props.channel.claimsData.currentPage; - - var previousPage = parseInt(currentPage) - 1; - this.showNewPage(previousPage); - } - }, { - key: 'showNextResultsPage', - value: function showNextResultsPage() { - var currentPage = this.props.channel.claimsData.currentPage; - - var nextPage = parseInt(currentPage) + 1; - this.showNewPage(nextPage); - } - }, { - key: 'showNewPage', - value: function showNewPage(page) { - var _props = this.props, - channelKey = _props.channelKey, - _props$channel = _props.channel, - name = _props$channel.name, - longId = _props$channel.longId; - - this.props.onUpdateChannelClaims(channelKey, name, longId, page); - } - }, { - key: 'render', - value: function render() { - var _props$channel$claims = this.props.channel.claimsData, - claims = _props$channel$claims.claims, - currentPage = _props$channel$claims.currentPage, - totalPages = _props$channel$claims.totalPages; - - return _react2.default.createElement( - 'div', - { className: 'row row--tall' }, - claims.length > 0 ? _react2.default.createElement( - 'div', - null, - claims.map(function (claim, index) { - return _react2.default.createElement(_AssetPreview2.default, { - claimData: claim, - key: claim.name + '-' + index - }); - }), - _react2.default.createElement( - 'div', - null, - currentPage > 1 && _react2.default.createElement( - 'button', - { className: 'button--secondary', onClick: this.showPreviousResultsPage }, - 'Previous Page' - ), - currentPage < totalPages && _react2.default.createElement( - 'button', - { className: 'button--secondary', onClick: this.showNextResultsPage }, - 'Next Page' - ) - ) - ) : _react2.default.createElement( - 'p', - null, - 'There are no claims in this channel' - ) - ); - } - }]); - - return ChannelClaimsDisplay; -}(_react2.default.Component); - -; - -exports.default = ChannelClaimsDisplay; - -/***/ }), -/* 143 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _view = __webpack_require__(144); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var defaultThumbnail = _ref.site.defaults.defaultThumbnail; - - return { - defaultThumbnail: defaultThumbnail - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); - -/***/ }), -/* 144 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _reactRouterDom = __webpack_require__(3); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var AssetPreview = function AssetPreview(_ref) { - var defaultThumbnail = _ref.defaultThumbnail, - _ref$claimData = _ref.claimData, - name = _ref$claimData.name, - claimId = _ref$claimData.claimId, - fileExt = _ref$claimData.fileExt, - contentType = _ref$claimData.contentType, - thumbnail = _ref$claimData.thumbnail; - - var directSourceLink = claimId + '/' + name + '.' + fileExt; - var showUrlLink = '/' + claimId + '/' + name; - return _react2.default.createElement( - 'div', - { className: 'asset-holder' }, - _react2.default.createElement( - _reactRouterDom.Link, - { to: showUrlLink }, - function () { - switch (contentType) { - case 'image/jpeg': - case 'image/jpg': - case 'image/png': - case 'image/gif': - return _react2.default.createElement('img', { - className: 'asset-preview', - src: directSourceLink, - alt: name - }); - case 'video/mp4': - return _react2.default.createElement('img', { - className: 'asset-preview video', - src: thumbnail || defaultThumbnail, - alt: name - }); - default: - return _react2.default.createElement( - 'p', - null, - 'unsupported file type' - ); - } - }() - ) - ); -}; - -exports.default = AssetPreview; - -/***/ }), -/* 145 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _reactRedux = __webpack_require__(1); - -var _view = __webpack_require__(146); - -var _view2 = _interopRequireDefault(_view); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var mapStateToProps = function mapStateToProps(_ref) { - var _ref$site = _ref.site, - host = _ref$site.host, - title = _ref$site.title; - - return { - host: host, - title: title - }; -}; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default); - -/***/ }), -/* 146 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _NavBar = __webpack_require__(7); - -var _NavBar2 = _interopRequireDefault(_NavBar); - -var _reactHelmet = __webpack_require__(14); - -var _reactHelmet2 = _interopRequireDefault(_reactHelmet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var FourOhForPage = function (_React$Component) { - _inherits(FourOhForPage, _React$Component); - - function FourOhForPage() { - _classCallCheck(this, FourOhForPage); - - return _possibleConstructorReturn(this, (FourOhForPage.__proto__ || Object.getPrototypeOf(FourOhForPage)).apply(this, arguments)); - } - - _createClass(FourOhForPage, [{ - key: 'render', - value: function render() { - var _props = this.props, - title = _props.title, - host = _props.host; - - return _react2.default.createElement( - 'div', - null, - _react2.default.createElement( - _reactHelmet2.default, - null, - _react2.default.createElement( - 'title', - null, - title, - ' - 404' - ), - _react2.default.createElement('link', { rel: 'canonical', href: host + '/404' }) - ), - _react2.default.createElement(_NavBar2.default, null), - _react2.default.createElement( - 'div', - { className: 'row row--padded' }, - _react2.default.createElement( - 'h2', - null, - '404' - ), - _react2.default.createElement( - 'p', - null, - 'That page does not exist' - ) - ) - ); - } - }]); - - return FourOhForPage; -}(_react2.default.Component); - -; - -exports.default = FourOhForPage; - -/***/ }), -/* 147 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var _require = __webpack_require__(17), - sendGAServeEvent = _require.sendGAServeEvent; - -var _require2 = __webpack_require__(148), - determineResponseType = _require2.determineResponseType, - flipClaimNameAndIdForBackwardsCompatibility = _require2.flipClaimNameAndIdForBackwardsCompatibility, - logRequestData = _require2.logRequestData, - getClaimIdAndServeAsset = _require2.getClaimIdAndServeAsset; - -var lbryUri = __webpack_require__(149); -var handleShowRender = __webpack_require__(150); -var SERVE = 'SERVE'; - -module.exports = function (app) { - // route to serve a specific asset using the channel or claim id - app.get('/:identifier/:claim', function (req, res) { - var headers = req.headers, - ip = req.ip, - originalUrl = req.originalUrl, - params = req.params; - // decide if this is a show request - - var hasFileExtension = void 0; - try { - var _lbryUri$parseModifie = lbryUri.parseModifier(params.claim); - - hasFileExtension = _lbryUri$parseModifie.hasFileExtension; - } catch (error) { - return res.status(400).json({ success: false, message: error.message }); - } - var responseType = determineResponseType(hasFileExtension, headers); - if (responseType !== SERVE) { - return handleShowRender(req, res); - } - // handle serve request - // send google analytics - sendGAServeEvent(headers, ip, originalUrl); - // parse the claim - var claimName = void 0; - try { - var _lbryUri$parseClaim = lbryUri.parseClaim(params.claim); - - claimName = _lbryUri$parseClaim.claimName; - } catch (error) { - return res.status(400).json({ success: false, message: error.message }); - } - // parse the identifier - var isChannel = void 0, - channelName = void 0, - channelClaimId = void 0, - claimId = void 0; - try { - var _lbryUri$parseIdentif = lbryUri.parseIdentifier(params.identifier); - - isChannel = _lbryUri$parseIdentif.isChannel; - channelName = _lbryUri$parseIdentif.channelName; - channelClaimId = _lbryUri$parseIdentif.channelClaimId; - claimId = _lbryUri$parseIdentif.claimId; - } catch (error) { - return res.status(400).json({ success: false, message: error.message }); - } - if (!isChannel) { - var _flipClaimNameAndIdFo = flipClaimNameAndIdForBackwardsCompatibility(claimId, claimName); - - var _flipClaimNameAndIdFo2 = _slicedToArray(_flipClaimNameAndIdFo, 2); - - claimId = _flipClaimNameAndIdFo2[0]; - claimName = _flipClaimNameAndIdFo2[1]; - } - // log the request data for debugging - logRequestData(responseType, claimName, channelName, claimId); - // get the claim Id and then serve the asset - getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res); - }); - // route to serve the winning asset at a claim or a channel page - app.get('/:claim', function (req, res) { - var headers = req.headers, - ip = req.ip, - originalUrl = req.originalUrl, - params = req.params; - // decide if this is a show request - - var hasFileExtension = void 0; - try { - var _lbryUri$parseModifie2 = lbryUri.parseModifier(params.claim); - - hasFileExtension = _lbryUri$parseModifie2.hasFileExtension; - } catch (error) { - return res.status(400).json({ success: false, message: error.message }); - } - var responseType = determineResponseType(hasFileExtension, headers); - if (responseType !== SERVE) { - return handleShowRender(req, res); - } - // handle serve request - // send google analytics - sendGAServeEvent(headers, ip, originalUrl); - // parse the claim - var claimName = void 0; - try { - var _lbryUri$parseClaim2 = lbryUri.parseClaim(params.claim); - - claimName = _lbryUri$parseClaim2.claimName; - } catch (error) { - return res.status(400).json({ success: false, message: error.message }); - } - // log the request data for debugging - logRequestData(responseType, claimName, null, null); - // get the claim Id and then serve the asset - getClaimIdAndServeAsset(null, null, claimName, null, originalUrl, ip, res); - }); -}; - -/***/ }), -/* 148 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var logger = __webpack_require__(2); - -var _require = __webpack_require__(28), - getClaimId = _require.getClaimId, - getLocalFileRecord = _require.getLocalFileRecord; - -var _require2 = __webpack_require__(27), - handleErrorResponse = _require2.handleErrorResponse; - -var SERVE = 'SERVE'; -var SHOW = 'SHOW'; -var NO_FILE = 'NO_FILE'; -var NO_CHANNEL = 'NO_CHANNEL'; -var NO_CLAIM = 'NO_CLAIM'; - -function clientAcceptsHtml(_ref) { - var accept = _ref.accept; - - return accept && accept.match(/text\/html/); -}; - -function requestIsFromBrowser(headers) { - return headers['user-agent'] && headers['user-agent'].match(/Mozilla/); -}; - -function clientWantsAsset(_ref2) { - var accept = _ref2.accept, - range = _ref2.range; - - var imageIsWanted = accept && accept.match(/image\/.*/) && !accept.match(/text\/html/) && !accept.match(/text\/\*/); - var videoIsWanted = accept && range; - return imageIsWanted || videoIsWanted; -}; - -function isValidClaimId(claimId) { - return claimId.length === 40 && !/[^A-Za-z0-9]/g.test(claimId); -}; - -function isValidShortId(claimId) { - return claimId.length === 1; // it should really evaluate the short url itself -}; - -function isValidShortIdOrClaimId(input) { - return isValidClaimId(input) || isValidShortId(input); -}; - -function serveAssetToClient(claimId, name, res) { - return getLocalFileRecord(claimId, name).then(function (fileRecord) { - // check that a local record was found - if (fileRecord === NO_FILE) { - return res.status(307).redirect('/api/claim/get/' + name + '/' + claimId); - } - // serve the file - var filePath = fileRecord.filePath, - fileType = fileRecord.fileType; - - logger.verbose('serving file: ' + filePath); - var sendFileOptions = { - headers: { - 'X-Content-Type-Options': 'nosniff', - 'Content-Type': fileType || 'image/jpeg' - } - }; - res.status(200).sendFile(filePath, sendFileOptions); - }).catch(function (error) { - throw error; - }); -}; - -module.exports = { - getClaimIdAndServeAsset: function getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res) { - // get the claim Id and then serve the asset - getClaimId(channelName, channelClaimId, claimName, claimId).then(function (fullClaimId) { - if (fullClaimId === NO_CLAIM) { - return res.status(404).json({ success: false, message: 'no claim id could be found' }); - } else if (fullClaimId === NO_CHANNEL) { - return res.status(404).json({ success: false, message: 'no channel id could be found' }); - } - serveAssetToClient(fullClaimId, claimName, res); - // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'success'); - }).catch(function (error) { - handleErrorResponse(originalUrl, ip, error, res); - // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'fail'); - }); - }, - determineResponseType: function determineResponseType(hasFileExtension, headers) { - var responseType = void 0; - if (hasFileExtension) { - responseType = SERVE; // assume a serve request if file extension is present - if (clientAcceptsHtml(headers)) { - // if the request comes from a browser, change it to a show request - responseType = SHOW; - } - } else { - responseType = SHOW; - if (clientWantsAsset(headers) && requestIsFromBrowser(headers)) { - // this is in case someone embeds a show url - logger.debug('Show request came from browser but wants an image/video. Changing response to serve...'); - responseType = SERVE; - } - } - return responseType; - }, - flipClaimNameAndIdForBackwardsCompatibility: function flipClaimNameAndIdForBackwardsCompatibility(identifier, name) { - // this is a patch for backwards compatability with '/name/claim_id' url format - if (isValidShortIdOrClaimId(name) && !isValidShortIdOrClaimId(identifier)) { - var tempName = name; - name = identifier; - identifier = tempName; - } - return [identifier, name]; - }, - logRequestData: function logRequestData(responseType, claimName, channelName, claimId) { - logger.debug('responseType ===', responseType); - logger.debug('claim name === ', claimName); - logger.debug('channel name ===', channelName); - logger.debug('claim id ===', claimId); - } -}; - -/***/ }), -/* 149 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var logger = __webpack_require__(2); - -module.exports = { - REGEXP_INVALID_CLAIM: /[^A-Za-z0-9-]/g, - REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g, - REGEXP_ADDRESS: /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/, - CHANNEL_CHAR: '@', - parseIdentifier: function parseIdentifier(identifier) { - logger.debug('parsing identifier:', identifier); - var componentsRegex = new RegExp('([^:$#/]*)' + // value (stops at the first separator or end) - '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end) - ); - - var _componentsRegex$exec = componentsRegex.exec(identifier).map(function (match) { - return match || null; - }), - _componentsRegex$exec2 = _slicedToArray(_componentsRegex$exec, 4), - proto = _componentsRegex$exec2[0], - value = _componentsRegex$exec2[1], - modifierSeperator = _componentsRegex$exec2[2], - modifier = _componentsRegex$exec2[3]; - - logger.debug(proto + ', ' + value + ', ' + modifierSeperator + ', ' + modifier); - - // Validate and process name - if (!value) { - throw new Error('Check your url. No channel name provided before "' + modifierSeperator + '"'); - } - var isChannel = value.startsWith(module.exports.CHANNEL_CHAR); - var channelName = isChannel ? value : null; - var claimId = void 0; - if (isChannel) { - if (!channelName) { - throw new Error('No channel name after @.'); - } - var nameBadChars = channelName.match(module.exports.REGEXP_INVALID_CHANNEL); - if (nameBadChars) { - throw new Error('Invalid characters in channel name: ' + nameBadChars.join(', ') + '.'); - } - } else { - claimId = value; - } - - // Validate and process modifier - var channelClaimId = void 0; - if (modifierSeperator) { - if (!modifier) { - throw new Error('No modifier provided after separator "' + modifierSeperator + '"'); - } - - if (modifierSeperator === ':') { - channelClaimId = modifier; - } else { - throw new Error('The "' + modifierSeperator + '" modifier is not currently supported'); - } - } - return { - isChannel: isChannel, - channelName: channelName, - channelClaimId: channelClaimId, - claimId: claimId - }; - }, - parseClaim: function parseClaim(claim) { - logger.debug('parsing name:', claim); - var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first modifier) - '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end) - ); - - var _componentsRegex$exec3 = componentsRegex.exec(claim).map(function (match) { - return match || null; - }), - _componentsRegex$exec4 = _slicedToArray(_componentsRegex$exec3, 4), - proto = _componentsRegex$exec4[0], - claimName = _componentsRegex$exec4[1], - modifierSeperator = _componentsRegex$exec4[2], - modifier = _componentsRegex$exec4[3]; - - logger.debug(proto + ', ' + claimName + ', ' + modifierSeperator + ', ' + modifier); - - // Validate and process name - if (!claimName) { - throw new Error('No claim name provided before .'); - } - var nameBadChars = claimName.match(module.exports.REGEXP_INVALID_CLAIM); - if (nameBadChars) { - throw new Error('Invalid characters in claim name: ' + nameBadChars.join(', ') + '.'); - } - // Validate and process modifier - if (modifierSeperator) { - if (!modifier) { - throw new Error('No file extension provided after separator ' + modifierSeperator + '.'); - } - if (modifierSeperator !== '.') { - throw new Error('The ' + modifierSeperator + ' modifier is not supported in the claim name'); - } - } - // return results - return { - claimName: claimName - }; - }, - parseModifier: function parseModifier(claim) { - logger.debug('parsing modifier:', claim); - var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first modifier) - '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end) - ); - - var _componentsRegex$exec5 = componentsRegex.exec(claim).map(function (match) { - return match || null; - }), - _componentsRegex$exec6 = _slicedToArray(_componentsRegex$exec5, 4), - proto = _componentsRegex$exec6[0], - claimName = _componentsRegex$exec6[1], - modifierSeperator = _componentsRegex$exec6[2], - modifier = _componentsRegex$exec6[3]; - - logger.debug(proto + ', ' + claimName + ', ' + modifierSeperator + ', ' + modifier); - // Validate and process modifier - var hasFileExtension = false; - if (modifierSeperator) { - hasFileExtension = true; - } - return { - hasFileExtension: hasFileExtension - }; - } -}; - -/***/ }), -/* 150 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _react = __webpack_require__(0); - -var _react2 = _interopRequireDefault(_react); - -var _server = __webpack_require__(30); - -var _redux = __webpack_require__(18); - -var _index = __webpack_require__(31); - -var _index2 = _interopRequireDefault(_index); - -var _reactRedux = __webpack_require__(1); - -var _reactRouterDom = __webpack_require__(3); - -var _index3 = __webpack_require__(36); - -var _index4 = _interopRequireDefault(_index3); - -var _app = __webpack_require__(37); - -var _app2 = _interopRequireDefault(_app); - -var _renderFullPage = __webpack_require__(43); - -var _renderFullPage2 = _interopRequireDefault(_renderFullPage); - -var _reduxSaga = __webpack_require__(151); - -var _reduxSaga2 = _interopRequireDefault(_reduxSaga); - -var _effects = __webpack_require__(15); - -var _show_uri = __webpack_require__(152); - -var _show = __webpack_require__(8); - -var _reactHelmet = __webpack_require__(14); - -var _reactHelmet2 = _interopRequireDefault(_reactHelmet); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var returnSagaWithParams = function returnSagaWithParams(saga, params) { - return (/*#__PURE__*/regeneratorRuntime.mark(function _callee() { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return (0, _effects.call)(saga, params); - - case 2: - case 'end': - return _context.stop(); - } - } - }, _callee, this); - }) - ); -}; - -module.exports = function (req, res) { - var context = {}; - - // create and apply middleware - var sagaMiddleware = (0, _reduxSaga2.default)(); - var middleware = (0, _redux.applyMiddleware)(sagaMiddleware); - - // create a new Redux store instance - var store = (0, _redux.createStore)(_index2.default, middleware); - - // create saga - var action = (0, _show.onHandleShowPageUri)(req.params); - var saga = returnSagaWithParams(_show_uri.handleShowPageUri, action); - - // run the saga middleware - sagaMiddleware.run(saga).done.then(function () { - // render component to a string - var html = (0, _server.renderToString)(_react2.default.createElement( - _reactRedux.Provider, - { store: store }, - _react2.default.createElement( - _reactRouterDom.StaticRouter, - { location: req.url, context: context }, - _react2.default.createElement( - _index4.default, - null, - _react2.default.createElement(_app2.default, null) - ) - ) - )); - - // get head tags from helmet - var helmet = _reactHelmet2.default.renderStatic(); - - // check for a redirect - if (context.url) { - return res.redirect(301, context.url); - } - - // get the initial state from our Redux store - var preloadedState = store.getState(); - - // send the rendered page back to the client - res.send((0, _renderFullPage2.default)(helmet, html, preloadedState)); - }); -}; - -/***/ }), -/* 151 */ -/***/ (function(module, exports) { - -module.exports = require("redux-saga"); - -/***/ }), -/* 152 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.handleShowPageUri = handleShowPageUri; -exports.watchHandleShowPageUri = watchHandleShowPageUri; - -var _effects = __webpack_require__(15); - -var _show_action_types = __webpack_require__(12); - -var actions = _interopRequireWildcard(_show_action_types); - -var _show = __webpack_require__(8); - -var _show_asset = __webpack_require__(153); - -var _show_channel = __webpack_require__(155); - -var _lbryUri = __webpack_require__(157); - -var _lbryUri2 = _interopRequireDefault(_lbryUri); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -var _marked = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateIdentifierAndClaim), - _marked2 = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateClaimOnly), - _marked3 = /*#__PURE__*/regeneratorRuntime.mark(handleShowPageUri), - _marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchHandleShowPageUri); - -function parseAndUpdateIdentifierAndClaim(modifier, claim) { - var isChannel, channelName, channelClaimId, claimId, claimName, extension, _lbryUri$parseIdentif, _lbryUri$parseClaim; - - return regeneratorRuntime.wrap(function parseAndUpdateIdentifierAndClaim$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - // this is a request for an asset - // claim will be an asset claim - // the identifier could be a channel or a claim id - isChannel = void 0, channelName = void 0, channelClaimId = void 0, claimId = void 0, claimName = void 0, extension = void 0; - _context.prev = 1; - _lbryUri$parseIdentif = _lbryUri2.default.parseIdentifier(modifier); - isChannel = _lbryUri$parseIdentif.isChannel; - channelName = _lbryUri$parseIdentif.channelName; - channelClaimId = _lbryUri$parseIdentif.channelClaimId; - claimId = _lbryUri$parseIdentif.claimId; - _lbryUri$parseClaim = _lbryUri2.default.parseClaim(claim); - claimName = _lbryUri$parseClaim.claimName; - extension = _lbryUri$parseClaim.extension; - _context.next = 17; - break; - - case 12: - _context.prev = 12; - _context.t0 = _context['catch'](1); - _context.next = 16; - return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message)); - - case 16: - return _context.abrupt('return', _context.sent); - - case 17: - if (!isChannel) { - _context.next = 21; - break; - } - - _context.next = 20; - return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, channelName, channelClaimId, extension)); - - case 20: - return _context.abrupt('return', _context.sent); - - case 21: - ; - _context.next = 24; - return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, claimId, null, null, extension)); - - case 24: - case 'end': - return _context.stop(); - } - } - }, _marked, this, [[1, 12]]); -} -function parseAndUpdateClaimOnly(claim) { - var isChannel, channelName, channelClaimId, _lbryUri$parseIdentif2, claimName, extension, _lbryUri$parseClaim2; - - return regeneratorRuntime.wrap(function parseAndUpdateClaimOnly$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - // this could be a request for an asset or a channel page - // claim could be an asset claim or a channel claim - isChannel = void 0, channelName = void 0, channelClaimId = void 0; - _context2.prev = 1; - _lbryUri$parseIdentif2 = _lbryUri2.default.parseIdentifier(claim); - isChannel = _lbryUri$parseIdentif2.isChannel; - channelName = _lbryUri$parseIdentif2.channelName; - channelClaimId = _lbryUri$parseIdentif2.channelClaimId; - _context2.next = 13; - break; - - case 8: - _context2.prev = 8; - _context2.t0 = _context2['catch'](1); - _context2.next = 12; - return (0, _effects.put)((0, _show.onRequestError)(_context2.t0.message)); - - case 12: - return _context2.abrupt('return', _context2.sent); - - case 13: - if (!isChannel) { - _context2.next = 17; - break; - } - - _context2.next = 16; - return (0, _effects.call)(_show_channel.newChannelRequest, (0, _show.onNewChannelRequest)(channelName, channelClaimId)); - - case 16: - return _context2.abrupt('return', _context2.sent); - - case 17: - // if not for a channel, parse the claim request - claimName = void 0, extension = void 0; - _context2.prev = 18; - _lbryUri$parseClaim2 = _lbryUri2.default.parseClaim(claim); - claimName = _lbryUri$parseClaim2.claimName; - extension = _lbryUri$parseClaim2.extension; - _context2.next = 29; - break; - - case 24: - _context2.prev = 24; - _context2.t1 = _context2['catch'](18); - _context2.next = 28; - return (0, _effects.put)((0, _show.onRequestError)(_context2.t1.message)); - - case 28: - return _context2.abrupt('return', _context2.sent); - - case 29: - _context2.next = 31; - return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, null, null, extension)); - - case 31: - case 'end': - return _context2.stop(); - } - } - }, _marked2, this, [[1, 8], [18, 24]]); -} - -function handleShowPageUri(action) { - var _action$data, identifier, claim; - - return regeneratorRuntime.wrap(function handleShowPageUri$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - _action$data = action.data, identifier = _action$data.identifier, claim = _action$data.claim; - - if (!identifier) { - _context3.next = 5; - break; - } - - _context3.next = 4; - return (0, _effects.call)(parseAndUpdateIdentifierAndClaim, identifier, claim); - - case 4: - return _context3.abrupt('return', _context3.sent); - - case 5: - _context3.next = 7; - return (0, _effects.call)(parseAndUpdateClaimOnly, claim); - - case 7: - case 'end': - return _context3.stop(); - } - } - }, _marked3, this); -}; - -function watchHandleShowPageUri() { - return regeneratorRuntime.wrap(function watchHandleShowPageUri$(_context4) { - while (1) { - switch (_context4.prev = _context4.next) { - case 0: - _context4.next = 2; - return (0, _effects.takeLatest)(actions.HANDLE_SHOW_URI, handleShowPageUri); - - case 2: - case 'end': - return _context4.stop(); - } - } - }, _marked4, this); -}; - -/***/ }), -/* 153 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.newAssetRequest = newAssetRequest; -exports.watchNewAssetRequest = watchNewAssetRequest; - -var _effects = __webpack_require__(15); - -var _show_action_types = __webpack_require__(12); - -var actions = _interopRequireWildcard(_show_action_types); - -var _show = __webpack_require__(8); - -var _assetApi = __webpack_require__(154); - -var _show2 = __webpack_require__(13); - -var _site = __webpack_require__(44); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -var _marked = /*#__PURE__*/regeneratorRuntime.mark(newAssetRequest), - _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewAssetRequest); - -function newAssetRequest(action) { - var _action$data, requestType, requestId, name, modifier, state, host, longId, _ref, assetKey, shortId, _ref2, claimData, _ref3; - - return regeneratorRuntime.wrap(function newAssetRequest$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, name = _action$data.name, modifier = _action$data.modifier; - // put an action to update the request in redux - - _context.next = 3; - return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId)); - - case 3: - _context.next = 5; - return (0, _effects.select)(_show2.selectShowState); - - case 5: - state = _context.sent; - _context.next = 8; - return (0, _effects.select)(_site.selectSiteHost); - - case 8: - host = _context.sent; - - if (!state.requestList[requestId]) { - _context.next = 11; - break; - } - - return _context.abrupt('return', null); - - case 11: - // get long id && add request to request list - longId = void 0; - _context.prev = 12; - _context.next = 15; - return (0, _effects.call)(_assetApi.getLongClaimId, host, name, modifier); - - case 15: - _ref = _context.sent; - longId = _ref.data; - _context.next = 24; - break; - - case 19: - _context.prev = 19; - _context.t0 = _context['catch'](12); - _context.next = 23; - return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message)); - - case 23: - return _context.abrupt('return', _context.sent); - - case 24: - assetKey = 'a#' + name + '#' + longId; - _context.next = 27; - return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, assetKey)); - - case 27: - if (!state.assetList[assetKey]) { - _context.next = 29; - break; - } - - return _context.abrupt('return', null); - - case 29: - // get short Id - shortId = void 0; - _context.prev = 30; - _context.next = 33; - return (0, _effects.call)(_assetApi.getShortId, host, name, longId); - - case 33: - _ref2 = _context.sent; - shortId = _ref2.data; - _context.next = 42; - break; - - case 37: - _context.prev = 37; - _context.t1 = _context['catch'](30); - _context.next = 41; - return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message)); - - case 41: - return _context.abrupt('return', _context.sent); - - case 42: - // get asset claim data - claimData = void 0; - _context.prev = 43; - _context.next = 46; - return (0, _effects.call)(_assetApi.getClaimData, host, name, longId); - - case 46: - _ref3 = _context.sent; - claimData = _ref3.data; - _context.next = 55; - break; - - case 50: - _context.prev = 50; - _context.t2 = _context['catch'](43); - _context.next = 54; - return (0, _effects.put)((0, _show.onRequestError)(_context.t2.message)); - - case 54: - return _context.abrupt('return', _context.sent); - - case 55: - _context.next = 57; - return (0, _effects.put)((0, _show.addAssetToAssetList)(assetKey, null, name, longId, shortId, claimData)); - - case 57: - _context.next = 59; - return (0, _effects.put)((0, _show.onRequestError)(null)); - - case 59: - case 'end': - return _context.stop(); - } - } - }, _marked, this, [[12, 19], [30, 37], [43, 50]]); -}; - -function watchNewAssetRequest() { - return regeneratorRuntime.wrap(function watchNewAssetRequest$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - _context2.next = 2; - return (0, _effects.takeLatest)(actions.ASSET_REQUEST_NEW, newAssetRequest); - - case 2: - case 'end': - return _context2.stop(); - } - } - }, _marked2, this); -}; - -/***/ }), -/* 154 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getLongClaimId = getLongClaimId; -exports.getShortId = getShortId; -exports.getClaimData = getClaimData; - -var _request = __webpack_require__(11); - -var _request2 = _interopRequireDefault(_request); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function getLongClaimId(host, name, modifier) { - var body = {}; - // create request params - if (modifier) { - if (modifier.id) { - body['claimId'] = modifier.id; - } else { - body['channelName'] = modifier.channel.name; - body['channelClaimId'] = modifier.channel.id; - } - } - body['claimName'] = name; - var params = { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(body) - }; - // create url - var url = host + '/api/claim/long-id'; - // return the request promise - return (0, _request2.default)(url, params); -}; - -function getShortId(host, name, claimId) { - var url = host + '/api/claim/short-id/' + claimId + '/' + name; - return (0, _request2.default)(url); -}; - -function getClaimData(host, name, claimId) { - var url = host + '/api/claim/data/' + name + '/' + claimId; - return (0, _request2.default)(url); -}; - -/***/ }), -/* 155 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.newChannelRequest = newChannelRequest; -exports.watchNewChannelRequest = watchNewChannelRequest; -exports.watchUpdateChannelClaims = watchUpdateChannelClaims; - -var _effects = __webpack_require__(15); - -var _show_action_types = __webpack_require__(12); - -var actions = _interopRequireWildcard(_show_action_types); - -var _show = __webpack_require__(8); - -var _channelApi = __webpack_require__(156); - -var _show2 = __webpack_require__(13); - -var _site = __webpack_require__(44); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -var _marked = /*#__PURE__*/regeneratorRuntime.mark(newChannelRequest), - _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewChannelRequest), - _marked3 = /*#__PURE__*/regeneratorRuntime.mark(getNewClaimsAndUpdateChannel), - _marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchUpdateChannelClaims); - -function newChannelRequest(action) { - var _action$data, requestType, requestId, channelName, channelId, state, host, longId, shortId, _ref, _ref$data, channelKey, claimsData, _ref2; - - return regeneratorRuntime.wrap(function newChannelRequest$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, channelName = _action$data.channelName, channelId = _action$data.channelId; - // put an action to update the request in redux - - _context.next = 3; - return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId)); - - case 3: - _context.next = 5; - return (0, _effects.select)(_show2.selectShowState); - - case 5: - state = _context.sent; - _context.next = 8; - return (0, _effects.select)(_site.selectSiteHost); - - case 8: - host = _context.sent; - - if (!state.requestList[requestId]) { - _context.next = 11; - break; - } - - return _context.abrupt('return', null); - - case 11: - // get channel long id - longId = void 0, shortId = void 0; - _context.prev = 12; - _context.next = 15; - return (0, _effects.call)(_channelApi.getChannelData, host, channelName, channelId); - - case 15: - _ref = _context.sent; - _ref$data = _ref.data; - longId = _ref$data.longChannelClaimId; - shortId = _ref$data.shortChannelClaimId; - _context.next = 26; - break; - - case 21: - _context.prev = 21; - _context.t0 = _context['catch'](12); - _context.next = 25; - return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message)); - - case 25: - return _context.abrupt('return', _context.sent); - - case 26: - // store the request in the channel requests list - channelKey = 'c#' + channelName + '#' + longId; - _context.next = 29; - return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, channelKey)); - - case 29: - if (!state.channelList[channelKey]) { - _context.next = 31; - break; - } - - return _context.abrupt('return', null); - - case 31: - // get channel claims data - claimsData = void 0; - _context.prev = 32; - _context.next = 35; - return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, channelName, 1); - - case 35: - _ref2 = _context.sent; - claimsData = _ref2.data; - _context.next = 44; - break; - - case 39: - _context.prev = 39; - _context.t1 = _context['catch'](32); - _context.next = 43; - return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message)); - - case 43: - return _context.abrupt('return', _context.sent); - - case 44: - _context.next = 46; - return (0, _effects.put)((0, _show.addNewChannelToChannelList)(channelKey, channelName, shortId, longId, claimsData)); - - case 46: - _context.next = 48; - return (0, _effects.put)((0, _show.onRequestError)(null)); - - case 48: - case 'end': - return _context.stop(); - } - } - }, _marked, this, [[12, 21], [32, 39]]); -} - -function watchNewChannelRequest() { - return regeneratorRuntime.wrap(function watchNewChannelRequest$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - _context2.next = 2; - return (0, _effects.takeLatest)(actions.CHANNEL_REQUEST_NEW, newChannelRequest); - - case 2: - case 'end': - return _context2.stop(); - } - } - }, _marked2, this); -}; - -function getNewClaimsAndUpdateChannel(action) { - var _action$data2, channelKey, name, longId, page, host, claimsData, _ref3; - - return regeneratorRuntime.wrap(function getNewClaimsAndUpdateChannel$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - _action$data2 = action.data, channelKey = _action$data2.channelKey, name = _action$data2.name, longId = _action$data2.longId, page = _action$data2.page; - _context3.next = 3; - return (0, _effects.select)(_site.selectSiteHost); - - case 3: - host = _context3.sent; - claimsData = void 0; - _context3.prev = 5; - _context3.next = 8; - return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, name, page); - - case 8: - _ref3 = _context3.sent; - claimsData = _ref3.data; - _context3.next = 17; - break; - - case 12: - _context3.prev = 12; - _context3.t0 = _context3['catch'](5); - _context3.next = 16; - return (0, _effects.put)((0, _show.onRequestError)(_context3.t0.message)); - - case 16: - return _context3.abrupt('return', _context3.sent); - - case 17: - _context3.next = 19; - return (0, _effects.put)((0, _show.updateChannelClaims)(channelKey, claimsData)); - - case 19: - case 'end': - return _context3.stop(); - } - } - }, _marked3, this, [[5, 12]]); -} - -function watchUpdateChannelClaims() { - return regeneratorRuntime.wrap(function watchUpdateChannelClaims$(_context4) { - while (1) { - switch (_context4.prev = _context4.next) { - case 0: - _context4.next = 2; - return (0, _effects.takeLatest)(actions.CHANNEL_CLAIMS_UPDATE_ASYNC, getNewClaimsAndUpdateChannel); - - case 2: - case 'end': - return _context4.stop(); - } - } - }, _marked4, this); -} - -/***/ }), -/* 156 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getChannelData = getChannelData; -exports.getChannelClaims = getChannelClaims; - -var _request = __webpack_require__(11); - -var _request2 = _interopRequireDefault(_request); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function getChannelData(host, id, name) { - if (!id) id = 'none'; - var url = host + '/api/channel/data/' + name + '/' + id; - return (0, _request2.default)(url); -}; - -function getChannelClaims(host, longId, name, page) { - if (!page) page = 1; - var url = host + '/api/channel/claims/' + name + '/' + longId + '/' + page; - return (0, _request2.default)(url); -}; - -/***/ }), -/* 157 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -module.exports = { - REGEXP_INVALID_CLAIM: /[^A-Za-z0-9-]/g, - REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g, - REGEXP_ADDRESS: /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/, - CHANNEL_CHAR: '@', - parseIdentifier: function parseIdentifier(identifier) { - var componentsRegex = new RegExp('([^:$#/]*)' + // value (stops at the first separator or end) - '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end) - ); - - var _componentsRegex$exec = componentsRegex // eslint-disable-line no-unused-vars - .exec(identifier).map(function (match) { - return match || null; - }), - _componentsRegex$exec2 = _slicedToArray(_componentsRegex$exec, 4), - proto = _componentsRegex$exec2[0], - value = _componentsRegex$exec2[1], - modifierSeperator = _componentsRegex$exec2[2], - modifier = _componentsRegex$exec2[3]; - - // Validate and process name - - - if (!value) { - throw new Error('Check your URL. No channel name provided before "' + modifierSeperator + '"'); - } - var isChannel = value.startsWith(module.exports.CHANNEL_CHAR); - var channelName = isChannel ? value : null; - var claimId = void 0; - if (isChannel) { - if (!channelName) { - throw new Error('Check your URL. No channel name after "@".'); - } - var nameBadChars = channelName.match(module.exports.REGEXP_INVALID_CHANNEL); - if (nameBadChars) { - throw new Error('Check your URL. Invalid characters in channel name: "' + nameBadChars.join(', ') + '".'); - } - } else { - claimId = value; - } - - // Validate and process modifier - var channelClaimId = void 0; - if (modifierSeperator) { - if (!modifier) { - throw new Error('Check your URL. No modifier provided after separator "' + modifierSeperator + '"'); - } - - if (modifierSeperator === ':') { - channelClaimId = modifier; - } else { - throw new Error('Check your URL. The "' + modifierSeperator + '" modifier is not currently supported'); - } - } - return { - isChannel: isChannel, - channelName: channelName, - channelClaimId: channelClaimId || null, - claimId: claimId || null - }; - }, - parseClaim: function parseClaim(name) { - var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first extension) - '([:$#.]?)([^/]*)' // extension separator, extension (stops at the first path separator or end) - ); - - var _componentsRegex$exec3 = componentsRegex // eslint-disable-line no-unused-vars - .exec(name).map(function (match) { - return match || null; - }), - _componentsRegex$exec4 = _slicedToArray(_componentsRegex$exec3, 4), - proto = _componentsRegex$exec4[0], - claimName = _componentsRegex$exec4[1], - extensionSeperator = _componentsRegex$exec4[2], - extension = _componentsRegex$exec4[3]; - - // Validate and process name - - - if (!claimName) { - throw new Error('Check your URL. No claim name provided before "."'); - } - var nameBadChars = claimName.match(module.exports.REGEXP_INVALID_CLAIM); - if (nameBadChars) { - throw new Error('Check your URL. Invalid characters in claim name: "' + nameBadChars.join(', ') + '".'); - } - // Validate and process extension - if (extensionSeperator) { - if (!extension) { - throw new Error('Check your URL. No file extension provided after separator "' + extensionSeperator + '".'); - } - if (extensionSeperator !== '.') { - throw new Error('Check your URL. The "' + extensionSeperator + '" separator is not supported in the claim name.'); - } - } - return { - claimName: claimName, - extension: extension || null - }; - } -}; - -/***/ }), -/* 158 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var handlePageRender = __webpack_require__(29); - -module.exports = function (app) { - // a catch-all route if someone visits a page that does not exist - app.use('*', function (req, res) { - // send response - handlePageRender(req, res); - }); -}; - -/***/ }) -/******/ ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZmRiYmJiMjcwMzQ0OThjZDIwNDciLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJyZWFjdC1yZWR1eFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbnN0b25cIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJyZWFjdC1yb3V0ZXItZG9tXCIiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2FjdGlvbnMvcHVibGlzaC5qcyIsIndlYnBhY2s6Ly8vLi9jb25maWcvc2l0ZUNvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvbW9kZWxzL2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL05hdkJhci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvYWN0aW9ucy9zaG93LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb21wb25lbnRzL1NFTy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJwcm9wLXR5cGVzXCIiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3V0aWxzL3JlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnN0YW50cy9zaG93X2FjdGlvbl90eXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc2VsZWN0b3JzL3Nob3cuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3QtaGVsbWV0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVkdXgtc2FnYS9lZmZlY3RzXCIiLCJ3ZWJwYWNrOi8vLy4vc2VydmVyL2hlbHBlcnMvbGJyeUFwaS5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvaGVscGVycy9nb29nbGVBbmFseXRpY3MuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVkdXhcIiIsIndlYnBhY2s6Ly8vLi9jbGllbnQvYWN0aW9ucy9jaGFubmVsLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb21wb25lbnRzL1Byb2dyZXNzQmFyL2luZGV4LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvcGFnZXMvRXJyb3JQYWdlL2luZGV4LmpzeCIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJwYXNzcG9ydFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInBhc3Nwb3J0LWxvY2FsXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwic2VxdWVsaXplXCIiLCJ3ZWJwYWNrOi8vLy4vc2VydmVyL2hlbHBlcnMvc2VxdWVsaXplSGVscGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvaGVscGVycy9wdWJsaXNoSGVscGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvaGVscGVycy9lcnJvckhhbmRsZXJzLmpzIiwid2VicGFjazovLy8uL3NlcnZlci9jb250cm9sbGVycy9zZXJ2ZUNvbnRyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc2VydmVyL2hlbHBlcnMvaGFuZGxlUGFnZVJlbmRlci5qc3giLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3QtZG9tL3NlcnZlclwiIiwid2VicGFjazovLy8uL2NsaWVudC9yZWR1Y2Vycy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29uc3RhbnRzL3B1Ymxpc2hfYWN0aW9uX3R5cGVzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb25zdGFudHMvcHVibGlzaF9jaGFubmVsX3NlbGVjdF9zdGF0ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnN0YW50cy9jaGFubmVsX2FjdGlvbl90eXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29uc3RhbnRzL2Fzc2V0X2Rpc3BsYXlfc3RhdGVzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb21wb25lbnRzL0dBTGlzdGVuZXIvaW5kZXguanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9hcHAuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0Ryb3B6b25lL2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxMb2dpbkZvcm0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvQ2hhbm5lbENyZWF0ZUZvcm0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnN0YW50cy9zaG93X3JlcXVlc3RfdHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvQXNzZXREaXNwbGF5L2luZGV4LmpzIiwid2VicGFjazovLy8uL3NlcnZlci9oZWxwZXJzL3JlbmRlckZ1bGxQYWdlLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9zZWxlY3RvcnMvc2l0ZS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJiYWJlbC1wb2x5ZmlsbFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndoYXR3Zy1mZXRjaFwiIiwid2VicGFjazovLy8uL3NlcnZlci9zZXJ2ZXIuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiZXhwcmVzc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcImJvZHktcGFyc2VyXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiZXhwcmVzcy1oYW5kbGViYXJzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiaGFuZGxlYmFyc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcImhlbG1ldFwiIiwid2VicGFjazovLy8uL3NlcnZlci9oZWxwZXJzL2F1dGhIZWxwZXJzLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcImNvb2tpZS1zZXNzaW9uXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiaHR0cFwiIiwid2VicGFjazovLy8uL3NlcnZlci9oZWxwZXJzL2NvbmZpZ3VyZUxvZ2dlci5qcyIsIndlYnBhY2s6Ly8vLi9jb25maWcvbG9nZ2VyQ29uZmlnLmpzIiwid2VicGFjazovLy8uL3NlcnZlci9oZWxwZXJzL2NvbmZpZ3VyZVNsYWNrLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbnN0b24tc2xhY2std2ViaG9va1wiIiwid2VicGFjazovLy8uL2NvbmZpZy9zbGFja0NvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvcGFzc3BvcnQvbG9jYWwtc2lnbnVwLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcImF4aW9zXCIiLCJ3ZWJwYWNrOi8vLy4vY29uZmlnL2xicnlDb25maWcuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwidW5pdmVyc2FsLWFuYWx5dGljc1wiIiwid2VicGFjazovLy8uL2NvbmZpZy9teXNxbENvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvbW9kZWxzL2NlcnRpZmljYXRlLmpzIiwid2VicGFjazovLy8uL3NlcnZlci9tb2RlbHMvY2hhbm5lbC5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvbW9kZWxzL2NsYWltLmpzIiwid2VicGFjazovLy8uL3NlcnZlci9tb2RlbHMvZmlsZS5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvbW9kZWxzL3JlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vc2VydmVyL21vZGVscy91c2VyLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcImJjcnlwdFwiIiwid2VicGFjazovLy8uL3NlcnZlci9wYXNzcG9ydC9sb2NhbC1sb2dpbi5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvcm91dGVzL2F1dGgtcm91dGVzLmpzIiwid2VicGFjazovLy8uL3NlcnZlci9yb3V0ZXMvYXBpLXJvdXRlcy5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJjb25uZWN0LW11bHRpcGFydHlcIiIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvY29udHJvbGxlcnMvcHVibGlzaENvbnRyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiZnNcIiIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvYXV0aC9hdXRoZW50aWNhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvaGVscGVycy9jaGFubmVsUGFnaW5hdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvcm91dGVzL3BhZ2Utcm91dGVzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9yZWR1Y2Vycy9wdWJsaXNoLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9yZWR1Y2Vycy9jaGFubmVsLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9yZWR1Y2Vycy9zaG93LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9yZWR1Y2Vycy9zaXRlLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlYWN0LWdhXCIiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3BhZ2VzL0hvbWVQYWdlL2luZGV4LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29tcG9uZW50cy9TRU8vdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3V0aWxzL3BhZ2VUaXRsZS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdXRpbHMvbWV0YVRhZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3V0aWxzL2Nhbm9uaWNhbExpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvTmF2QmFyL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb21wb25lbnRzL0xvZ28vaW5kZXguanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb21wb25lbnRzL05hdkJhckNoYW5uZWxPcHRpb25zRHJvcGRvd24vaW5kZXguanN4Iiwid2VicGFjazovLy9leHRlcm5hbCBcImNyb3NzLWZldGNoL3BvbHlmaWxsXCIiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvUHVibGlzaFRvb2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvUHVibGlzaFRvb2wvdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvRHJvcHpvbmUvdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3V0aWxzL2ZpbGUuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbXBvbmVudHMvUHVibGlzaFByZXZpZXcvaW5kZXguanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hEZXRhaWxzL2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hEZXRhaWxzL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hUaXRsZUlucHV0L2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hUaXRsZUlucHV0L3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hVcmxJbnB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoVXJsSW5wdXQvdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbXBvbmVudHMvUHVibGlzaFVybE1pZGRsZURpc3BsYXkvaW5kZXguanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hUaHVtYm5haWxJbnB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoVGh1bWJuYWlsSW5wdXQvdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvUHVibGlzaE1ldGFkYXRhSW5wdXRzL2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hNZXRhZGF0YUlucHV0cy92aWV3LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29tcG9uZW50cy9FeHBhbmRpbmdUZXh0QXJlYS9pbmRleC5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvQ2hhbm5lbFNlbGVjdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9DaGFubmVsU2VsZWN0L3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxMb2dpbkZvcm0vdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvQ2hhbm5lbENyZWF0ZUZvcm0vdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbXBvbmVudHMvQWN0aXZlU3RhdHVzQmFyL2luZGV4LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29tcG9uZW50cy9JbmFjdGl2ZVN0YXR1c0Jhci9pbmRleC5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvUHVibGlzaFN0YXR1cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoU3RhdHVzL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb25zdGFudHMvcHVibGlzaF9jbGFpbV9zdGF0ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvUHVibGlzaERpc2FibGVkTWVzc2FnZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoRGlzYWJsZWRNZXNzYWdlL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9wYWdlcy9BYm91dFBhZ2UvaW5kZXguanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9wYWdlcy9Mb2dpblBhZ2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3BhZ2VzL0xvZ2luUGFnZS92aWV3LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvcGFnZXMvU2hvd1BhZ2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3BhZ2VzL1Nob3dQYWdlL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1Nob3dBc3NldExpdGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvU2hvd0Fzc2V0TGl0ZS92aWV3LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9Bc3NldERpc3BsYXkvdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvU2hvd0Fzc2V0RGV0YWlscy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9TaG93QXNzZXREZXRhaWxzL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0Fzc2V0VGl0bGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvQXNzZXRUaXRsZS92aWV3LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9Bc3NldEluZm8vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvQXNzZXRJbmZvL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1Nob3dDaGFubmVsL2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1Nob3dDaGFubmVsL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxDbGFpbXNEaXNwbGF5L2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxDbGFpbXNEaXNwbGF5L3ZpZXcuanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb21wb25lbnRzL0Fzc2V0UHJldmlldy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29tcG9uZW50cy9Bc3NldFByZXZpZXcvdmlldy5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvRm91ck9oRm91clBhZ2UvaW5kZXguanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0ZvdXJPaEZvdXJQYWdlL3ZpZXcuanN4Iiwid2VicGFjazovLy8uL3NlcnZlci9yb3V0ZXMvYXNzZXQtcm91dGVzLmpzIiwid2VicGFjazovLy8uL3NlcnZlci9oZWxwZXJzL3NlcnZlSGVscGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvaGVscGVycy9sYnJ5VXJpLmpzIiwid2VicGFjazovLy8uL3NlcnZlci9oZWxwZXJzL2hhbmRsZVNob3dSZW5kZXIuanN4Iiwid2VicGFjazovLy9leHRlcm5hbCBcInJlZHV4LXNhZ2FcIiIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc2FnYXMvc2hvd191cmkuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3NhZ2FzL3Nob3dfYXNzZXQuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2FwaS9hc3NldEFwaS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc2FnYXMvc2hvd19jaGFubmVsLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9hcGkvY2hhbm5lbEFwaS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvdXRpbHMvbGJyeVVyaS5qcyIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvcm91dGVzL2ZhbGxiYWNrLXJvdXRlcy5qcyJdLCJuYW1lcyI6WyJzZWxlY3RGaWxlIiwiY2xlYXJGaWxlIiwidXBkYXRlTWV0YWRhdGEiLCJ1cGRhdGVDbGFpbSIsInNldFB1Ymxpc2hJbkNoYW5uZWwiLCJ1cGRhdGVQdWJsaXNoU3RhdHVzIiwidXBkYXRlRXJyb3IiLCJ1cGRhdGVTZWxlY3RlZENoYW5uZWwiLCJ0b2dnbGVNZXRhZGF0YUlucHV0cyIsIm9uTmV3VGh1bWJuYWlsIiwic3RhcnRQdWJsaXNoIiwiYWN0aW9ucyIsImZpbGUiLCJ0eXBlIiwiRklMRV9TRUxFQ1RFRCIsImRhdGEiLCJGSUxFX0NMRUFSIiwibmFtZSIsInZhbHVlIiwiTUVUQURBVEFfVVBEQVRFIiwiQ0xBSU1fVVBEQVRFIiwiY2hhbm5lbCIsIlNFVF9QVUJMSVNIX0lOX0NIQU5ORUwiLCJzdGF0dXMiLCJtZXNzYWdlIiwiUFVCTElTSF9TVEFUVVNfVVBEQVRFIiwiRVJST1JfVVBEQVRFIiwiY2hhbm5lbE5hbWUiLCJTRUxFQ1RFRF9DSEFOTkVMX1VQREFURSIsInNob3dNZXRhZGF0YUlucHV0cyIsIlRPR0dMRV9NRVRBREFUQV9JTlBVVFMiLCJUSFVNQk5BSUxfTkVXIiwiaGlzdG9yeSIsIlBVQkxJU0hfU1RBUlQiLCJTaXRlQ29uZmlnIiwiYW5hbHl0aWNzIiwiZ29vZ2xlSWQiLCJhc3NldERlZmF1bHRzIiwiZGVzY3JpcHRpb24iLCJ0aHVtYm5haWwiLCJ0aXRsZSIsImF1dGgiLCJzZXNzaW9uS2V5IiwiZGV0YWlscyIsImhvc3QiLCJwb3J0IiwidHdpdHRlciIsInB1Ymxpc2hpbmciLCJhZGRpdGlvbmFsQ2xhaW1BZGRyZXNzZXMiLCJkaXNhYmxlZCIsImRpc2FibGVkTWVzc2FnZSIsInByaW1hcnlDbGFpbUFkZHJlc3MiLCJ0aHVtYm5haWxDaGFubmVsIiwidGh1bWJuYWlsQ2hhbm5lbElkIiwidXBsb2FkRGlyZWN0b3J5IiwibW9kdWxlIiwiZXhwb3J0cyIsIlNlcXVlbGl6ZSIsInJlcXVpcmUiLCJsb2dnZXIiLCJjb25zb2xlIiwibG9nIiwiZGF0YWJhc2UiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiZGIiLCJzZXF1ZWxpemUiLCJkaWFsZWN0IiwiZGlhbGVjdE9wdGlvbnMiLCJkZWNpbWFsTnVtYmVycyIsImxvZ2dpbmciLCJwb29sIiwibWF4IiwibWluIiwiaWRsZSIsImFjcXVpcmUiLCJhdXRoZW50aWNhdGUiLCJ0aGVuIiwiaW5mbyIsImNhdGNoIiwiZXJyb3IiLCJlcnIiLCJDZXJ0aWZpY2F0ZSIsIkNoYW5uZWwiLCJDbGFpbSIsIkZpbGUiLCJSZXF1ZXN0IiwiVXNlciIsImltcG9ydCIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwibW9kZWxOYW1lIiwiYXNzb2NpYXRlIiwidXBzZXJ0IiwiTW9kZWwiLCJ2YWx1ZXMiLCJjb25kaXRpb24iLCJ0YWJsZU5hbWUiLCJmaW5kT25lIiwid2hlcmUiLCJvYmoiLCJkZWJ1ZyIsInVwZGF0ZSIsImNyZWF0ZSIsIm1hcFN0YXRlVG9Qcm9wcyIsInNpdGUiLCJsb2dnZWRJbkNoYW5uZWwiLCJjaGFubmVsU2hvcnRJZCIsInNob3J0SWQiLCJjaGFubmVsTG9uZ0lkIiwibG9uZ0lkIiwic2l0ZURlc2NyaXB0aW9uIiwibWFwRGlzcGF0Y2hUb1Byb3BzIiwib25DaGFubmVsTG9naW4iLCJkaXNwYXRjaCIsIm9uQ2hhbm5lbExvZ291dCIsIm9uSGFuZGxlU2hvd1BhZ2VVcmkiLCJvblJlcXVlc3RFcnJvciIsIm9uTmV3Q2hhbm5lbFJlcXVlc3QiLCJvbk5ld0Fzc2V0UmVxdWVzdCIsIm9uUmVxdWVzdFVwZGF0ZSIsImFkZFJlcXVlc3RUb1JlcXVlc3RMaXN0IiwiYWRkQXNzZXRUb0Fzc2V0TGlzdCIsImFkZE5ld0NoYW5uZWxUb0NoYW5uZWxMaXN0Iiwib25VcGRhdGVDaGFubmVsQ2xhaW1zIiwidXBkYXRlQ2hhbm5lbENsYWltcyIsImZpbGVSZXF1ZXN0ZWQiLCJ1cGRhdGVGaWxlQXZhaWxhYmlsaXR5IiwidXBkYXRlRGlzcGxheUFzc2V0RXJyb3IiLCJwYXJhbXMiLCJIQU5ETEVfU0hPV19VUkkiLCJSRVFVRVNUX0VSUk9SIiwiY2hhbm5lbElkIiwicmVxdWVzdFR5cGUiLCJyZXF1ZXN0SWQiLCJDSEFOTkVMX1JFUVVFU1RfTkVXIiwiaWQiLCJleHRlbnNpb24iLCJBU1NFVF9SRVFVRVNUX05FVyIsIm1vZGlmaWVyIiwiUkVRVUVTVF9VUERBVEUiLCJrZXkiLCJSRVFVRVNUX0xJU1RfQUREIiwiY2xhaW1JZCIsImNsYWltRGF0YSIsIkFTU0VUX0FERCIsImNsYWltc0RhdGEiLCJDSEFOTkVMX0FERCIsImNoYW5uZWxLZXkiLCJwYWdlIiwiQ0hBTk5FTF9DTEFJTVNfVVBEQVRFX0FTWU5DIiwiY2hhbm5lbExpc3RJZCIsIkNIQU5ORUxfQ0xBSU1TX1VQREFURV9TVUNDRVNTIiwiRklMRV9SRVFVRVNURUQiLCJGSUxFX0FWQUlMQUJJTElUWV9VUERBVEUiLCJESVNQTEFZX0FTU0VUX0VSUk9SIiwiZGVmYXVsdERlc2NyaXB0aW9uIiwiZGVmYXVsdFRodW1ibmFpbCIsInNpdGVIb3N0Iiwic2l0ZVRpdGxlIiwic2l0ZVR3aXR0ZXIiLCJyZXF1ZXN0IiwicGFyc2VKU09OIiwicmVzcG9uc2UiLCJqc29uIiwiY2hlY2tTdGF0dXMiLCJqc29uUmVzcG9uc2UiLCJFcnJvciIsInVybCIsIm9wdGlvbnMiLCJmZXRjaCIsIlByb21pc2UiLCJhbGwiLCJzZWxlY3RBc3NldCIsInNob3ciLCJyZXF1ZXN0TGlzdCIsImFzc2V0S2V5IiwiYXNzZXRMaXN0Iiwic2VsZWN0U2hvd1N0YXRlIiwic3RhdGUiLCJheGlvcyIsImFwaSIsImFwaUhvc3QiLCJhcGlQb3J0IiwibGJyeUFwaVVyaSIsImNob29zZUdhTGJyeW5ldFB1Ymxpc2hMYWJlbCIsInNlbmRHQVRpbWluZ0V2ZW50IiwiaGFuZGxlTGJyeW5ldFJlc3BvbnNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlc3VsdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJwdWJsaXNoQ2xhaW0iLCJwdWJsaXNoUGFyYW1zIiwiZ2FTdGFydFRpbWUiLCJEYXRlIiwibm93IiwicG9zdCIsIm1ldGhvZCIsImdldENsYWltIiwidXJpIiwidGltZW91dCIsImdldENsYWltTGlzdCIsImNsYWltTmFtZSIsInJlc29sdmVVcmkiLCJnZXREb3dubG9hZERpcmVjdG9yeSIsImRvd25sb2FkX2RpcmVjdG9yeSIsImNyZWF0ZUNoYW5uZWwiLCJjaGFubmVsX25hbWUiLCJhbW91bnQiLCJ1YSIsImNyZWF0ZVNlcnZlRXZlbnRQYXJhbXMiLCJoZWFkZXJzIiwiaXAiLCJvcmlnaW5hbFVybCIsImV2ZW50Q2F0ZWdvcnkiLCJldmVudEFjdGlvbiIsImV2ZW50TGFiZWwiLCJpcE92ZXJyaWRlIiwidXNlckFnZW50T3ZlcnJpZGUiLCJjcmVhdGVQdWJsaXNoVGltaW5nRXZlbnRQYXJhbXMiLCJjYXRlZ29yeSIsInZhcmlhYmxlIiwibGFiZWwiLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwiZHVyYXRpb24iLCJ1c2VyVGltaW5nQ2F0ZWdvcnkiLCJ1c2VyVGltaW5nVmFyaWFibGVOYW1lIiwidXNlclRpbWluZ1RpbWUiLCJ1c2VyVGltaW5nTGFiZWwiLCJzZW5kR29vZ2xlQW5hbHl0aWNzRXZlbnQiLCJ2aXNpdG9ySWQiLCJyZXBsYWNlIiwidmlzaXRvciIsInN0cmljdENpZEZvcm1hdCIsImh0dHBzIiwiZXZlbnQiLCJzZW5kR29vZ2xlQW5hbHl0aWNzVGltaW5nIiwidGltaW5nIiwic2VuZEdBU2VydmVFdmVudCIsImNoYW5uZWxfaWQiLCJ1cGRhdGVMb2dnZWRJbkNoYW5uZWwiLCJDSEFOTkVMX1VQREFURSIsIlByb2dyZXNzQmFyIiwicHJvcHMiLCJiYXJzIiwiaW5kZXgiLCJpbmNyZW1lbnRlciIsImNyZWF0ZUJhcnMiLCJiaW5kIiwic3RhcnRQcm9ncmVzc0JhciIsInVwZGF0ZVByb2dyZXNzQmFyIiwic3RvcFByb2dyZXNzQmFyIiwiaSIsInNpemUiLCJwdXNoIiwiaXNBY3RpdmUiLCJzZXRTdGF0ZSIsInVwZGF0ZUludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwibWFwIiwiYmFyIiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIiwibnVtYmVyIiwiaXNSZXF1aXJlZCIsIkVycm9yUGFnZSIsInN0cmluZyIsInJldHVyblNob3J0SWQiLCJjbGFpbXNBcnJheSIsImNsYWltSW5kZXgiLCJzdWJzdHJpbmciLCJzaG9ydElkTGVuZ3RoIiwiZmluZEluZGV4IiwiZWxlbWVudCIsInBvc3NpYmxlTWF0Y2hlcyIsInNsaWNlIiwibGVuZ3RoIiwiZmlsdGVyIiwiZnMiLCJwYXJzZVB1Ymxpc2hBcGlSZXF1ZXN0Qm9keSIsIm5zZnciLCJsaWNlbnNlIiwiaW52YWxpZE5hbWVDaGFyYWN0ZXJzIiwiZXhlYyIsInBhcnNlUHVibGlzaEFwaVJlcXVlc3RGaWxlcyIsInBhdGgiLCJ0ZXN0IiwidmFsaWRhdGVGaWxlVHlwZUFuZFNpemUiLCJmaWxlTmFtZSIsImZpbGVQYXRoIiwiZmlsZVR5cGUiLCJ0aHVtYm5haWxGaWxlTmFtZSIsInRodW1ibmFpbEZpbGVQYXRoIiwidGh1bWJuYWlsRmlsZVR5cGUiLCJjcmVhdGVCYXNpY1B1Ymxpc2hQYXJhbXMiLCJ0cmltIiwiZmlsZV9wYXRoIiwiYmlkIiwibWV0YWRhdGEiLCJhdXRob3IiLCJsYW5ndWFnZSIsImNsYWltX2FkZHJlc3MiLCJjcmVhdGVUaHVtYm5haWxQdWJsaXNoUGFyYW1zIiwiZGVsZXRlVGVtcG9yYXJ5RmlsZSIsInVubGluayIsImFkZEdldFJlc3VsdHNUb0ZpbGVEYXRhIiwiZmlsZUluZm8iLCJnZXRSZXN1bHQiLCJmaWxlX25hbWUiLCJkb3dubG9hZF9wYXRoIiwiY3JlYXRlRmlsZURhdGEiLCJvdXRwb2ludCIsImhlaWdodCIsImFkZHJlc3MiLCJjb250ZW50VHlwZSIsImhhbmRsZUVycm9yUmVzcG9uc2UiLCJyZXMiLCJ1c2VPYmplY3RQcm9wZXJ0aWVzSWZOb0tleXMiLCJyZXR1cm5FcnJvck1lc3NhZ2VBbmRTdGF0dXMiLCJjcmVhdGVFcnJvclJlc3BvbnNlUGF5bG9hZCIsImNvZGUiLCJuZXdFcnJvck9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJzdWNjZXNzIiwicmV0dXJuUGFnaW5hdGVkQ2hhbm5lbENsYWltcyIsIk5PX0NIQU5ORUwiLCJOT19DTEFJTSIsIk5PX0ZJTEUiLCJnZXRDbGFpbUlkIiwiY2hhbm5lbENsYWltSWQiLCJnZXRDbGFpbUlkQnlDaGFubmVsIiwiZ2V0Q2xhaW1JZEJ5Q2xhaW0iLCJnZXRMb25nQ2xhaW1JZCIsImxvbmdDbGFpbUlkIiwiZ2V0TG9uZ0NoYW5uZWxJZCIsImxvbmdDaGFubmVsSWQiLCJnZXRDbGFpbUlkQnlMb25nQ2hhbm5lbElkIiwiZ2V0Q2hhbm5lbERhdGEiLCJsb25nQ2hhbm5lbENsYWltSWQiLCJnZXRTaG9ydENoYW5uZWxJZEZyb21Mb25nQ2hhbm5lbElkIiwic2hvcnRDaGFubmVsQ2xhaW1JZCIsImdldENoYW5uZWxDbGFpbXMiLCJnZXRBbGxDaGFubmVsQ2xhaW1zIiwiY2hhbm5lbENsYWltc0FycmF5IiwicGFnaW5hdGVkQ2hhbm5lbFZpZXdEYXRhIiwiZ2V0TG9jYWxGaWxlUmVjb3JkIiwiZGF0YVZhbHVlcyIsInJlcSIsImNvbnRleHQiLCJzdG9yZSIsImh0bWwiLCJoZWxtZXQiLCJyZW5kZXJTdGF0aWMiLCJyZWRpcmVjdCIsInByZWxvYWRlZFN0YXRlIiwiZ2V0U3RhdGUiLCJzZW5kIiwicHVibGlzaCIsIkxPR0lOIiwiQ1JFQVRFIiwiTE9DQUxfQ0hFQ0siLCJVTkFWQUlMQUJMRSIsIkVSUk9SIiwiQVZBSUxBQkxFIiwiaW5pdGlhbGl6ZSIsIkdBTGlzdGVuZXIiLCJzZW5kUGFnZVZpZXciLCJsb2NhdGlvbiIsImxpc3RlbiIsInNldCIsInBhdGhuYW1lIiwicGFnZXZpZXciLCJjaGlsZHJlbiIsIkFwcCIsImZpbGVFcnJvciIsInNldEZpbGVFcnJvciIsIkNIQU5ORUwiLCJBU1NFVF9MSVRFIiwiQVNTRVRfREVUQUlMUyIsImRpc3BsYXlBc3NldCIsImFzc2V0Iiwib25GaWxlUmVxdWVzdCIsInRvU3RyaW5nIiwibWV0YSIsImxpbmsiLCJzZWxlY3RTaXRlU3RhdGUiLCJzZWxlY3RTaXRlSG9zdCIsImV4cHJlc3MiLCJib2R5UGFyc2VyIiwiZXhwcmVzc0hhbmRsZWJhcnMiLCJIYW5kbGViYXJzIiwicGFzc3BvcnQiLCJzZXJpYWxpemVTcGVlY2hVc2VyIiwiZGVzZXJpYWxpemVTcGVlY2hVc2VyIiwiY29va2llU2Vzc2lvbiIsImh0dHAiLCJQT1JUIiwiYXBwIiwiZW5hYmxlIiwidXNlIiwic3RhdGljIiwiX19kaXJuYW1lIiwidXJsZW5jb2RlZCIsImV4dGVuZGVkIiwibmV4dCIsInZlcmJvc2UiLCJzZXJpYWxpemVVc2VyIiwiZGVzZXJpYWxpemVVc2VyIiwibG9jYWxTaWdudXBTdHJhdGVneSIsImxvY2FsTG9naW5TdHJhdGVneSIsIm1heEFnZSIsInNlc3Npb24iLCJoYnMiLCJkZWZhdWx0TGF5b3V0IiwiaGFuZGxlYmFycyIsImVuZ2luZSIsInNlcnZlciIsIlNlcnZlciIsInN5bmMiLCJ1c2VyIiwiZG9uZSIsImxvZ0xldmVsIiwid2luc3RvbiIsImNvbmZpZ3VyZSIsInRyYW5zcG9ydHMiLCJDb25zb2xlIiwibGV2ZWwiLCJ0aW1lc3RhbXAiLCJjb2xvcml6ZSIsInByZXR0eVByaW50IiwiaGFuZGxlRXhjZXB0aW9ucyIsImh1bWFuUmVhZGFibGVVbmhhbmRsZWRFeGNlcHRpb24iLCJ3YXJuIiwic2lsbHkiLCJsb2dnZXJDb25maWciLCJ3aW5zdG9uU2xhY2tXZWJIb29rIiwiU2xhY2tXZWJIb29rIiwic2xhY2tDb25maWciLCJzbGFja1dlYkhvb2siLCJzbGFja0Vycm9yQ2hhbm5lbCIsInNsYWNrSW5mb0NoYW5uZWwiLCJhZGQiLCJ3ZWJob29rVXJsIiwiaWNvbkVtb2ppIiwiU2xhY2tDb25maWciLCJQYXNzcG9ydExvY2FsU3RyYXRlZ3kiLCJTdHJhdGVneSIsImxicnlBcGkiLCJ1c2VybmFtZUZpZWxkIiwicGFzc3dvcmRGaWVsZCIsInVzZXJJbmZvIiwidXNlckRhdGEiLCJ1c2VyTmFtZSIsImNoYW5uZWxEYXRhIiwidHgiLCJjbGFpbV9pZCIsImNlcnRpZmljYXRlRGF0YSIsIm5ld1VzZXIiLCJuZXdDaGFubmVsIiwibmV3Q2VydGlmaWNhdGUiLCJzZXRDaGFubmVsIiwic2V0VXNlciIsInNob3J0Q2hhbm5lbElkIiwibGJyeUNvbmZpZyIsIk15c3FsQ29uZmlnIiwiU1RSSU5HIiwiQk9PTEVBTiIsIklOVEVHRVIiLCJURVhUIiwiREVDSU1BTCIsImRlZmluZSIsImRlZmF1bHQiLCJjbGFpbVNlcXVlbmNlIiwiZGVjb2RlZENsYWltIiwiZGVwdGgiLCJlZmZlY3RpdmVBbW91bnQiLCJoYXNTaWduYXR1cmUiLCJoZXgiLCJub3V0IiwidHhpZCIsInZhbGlkQXRIZWlnaHQiLCJ2YWx1ZVZlcnNpb24iLCJjbGFpbVR5cGUiLCJjZXJ0aWZpY2F0ZVZlcnNpb24iLCJrZXlUeXBlIiwicHVibGljS2V5IiwiZnJlZXplVGFibGVOYW1lIiwiYmVsb25nc1RvIiwiZm9yZWlnbktleSIsImFsbG93TnVsbCIsImZpbmRBbGwiLCJvcmRlciIsImdldExvbmdDaGFubmVsSWRGcm9tU2hvcnRDaGFubmVsSWQiLCIkbGlrZSIsImdldExvbmdDaGFubmVsSWRGcm9tQ2hhbm5lbE5hbWUiLCJ2YWxpZGF0ZUxvbmdDaGFubmVsSWQiLCJoYXNPbmUiLCJkZXRlcm1pbmVGaWxlRXh0ZW5zaW9uRnJvbUNvbnRlbnRUeXBlIiwiZGV0ZXJtaW5lVGh1bWJuYWlsIiwic3RvcmVkVGh1bWJuYWlsIiwicHJlcGFyZUNsYWltRGF0YSIsImNsYWltIiwiY2VydGlmaWNhdGVJZCIsImxpY2Vuc2VVcmwiLCJwcmV2aWV3IiwibWV0YWRhdGFWZXJzaW9uIiwic291cmNlIiwic291cmNlVHlwZSIsInNvdXJjZVZlcnNpb24iLCJzdHJlYW1WZXJzaW9uIiwiZ2V0U2hvcnRDbGFpbUlkRnJvbUxvbmdDbGFpbUlkIiwicmF3IiwiZ2V0TG9uZ0NsYWltSWRGcm9tU2hvcnRDbGFpbUlkIiwiZ2V0VG9wRnJlZUNsYWltSWRCeUNsYWltTmFtZSIsInZhbGlkYXRlTG9uZ0NsYWltSWQiLCJyZXNvbHZlQ2xhaW0iLCJjbGFpbUFycmF5IiwiZGVmYXVsdFZhbHVlIiwidHJlbmRpbmdFbGlnaWJsZSIsImhhc01hbnkiLCJnZXRSZWNlbnRDbGFpbXMiLCJsaW1pdCIsImFjdGlvbiIsImlwQWRkcmVzcyIsImJjcnlwdCIsInByb3RvdHlwZSIsImNvbXBhcmVQYXNzd29yZCIsImNvbXBhcmUiLCJjaGFuZ2VQYXNzd29yZCIsIm5ld1Bhc3N3b3JkIiwiZ2VuU2FsdCIsInNhbHRFcnJvciIsInNhbHQiLCJoYXNoIiwiaGFzaEVycm9yIiwiaG9vayIsInJldHVyblVzZXJBbmRDaGFubmVsSW5mbyIsInVzZXJJbnN0YW5jZSIsImdldENoYW5uZWwiLCJpc01hdGNoIiwibG9nSW4iLCJnZXQiLCJsb2dvdXQiLCJtdWx0aXBhcnQiLCJtdWx0aXBhcnRNaWRkbGV3YXJlIiwidXBsb2FkRGlyIiwiY2xhaW1OYW1lSXNBdmFpbGFibGUiLCJjaGVja0NoYW5uZWxBdmFpbGFiaWxpdHkiLCJlcnJvckhhbmRsZXJzIiwiYXV0aGVudGljYXRlVXNlciIsImF2YWlsYWJsZU5hbWUiLCJib2R5IiwiY2xhaW1zTGlzdCIsInJlc29sdmVSZXN1bHQiLCJmaWxlRGF0YSIsImZpbGVSZWNvcmQiLCJjb21wbGV0ZWQiLCJyZXNvbHZlZFVyaSIsImZpbGVzIiwiY2hhbm5lbFBhc3N3b3JkIiwidmFsaWRhdGVkQ2xhaW1OYW1lIiwidGh1bWJuYWlsUHVibGlzaFBhcmFtcyIsImxicnlUeCIsImNsYWltSW5mbyIsInB1Ymxpc2hIZWxwZXJzIiwiT3AiLCJwdWJsaXNoUmVzdWx0cyIsImNsYWltUmVjb3JkIiwidXBzZXJ0Q3JpdGVyaWEiLCJzZXRDbGFpbSIsInNldEZpbGUiLCJjbGFpbUFkZHJlc3NlcyIsImF0dHJpYnV0ZXMiLCJvciIsImF1dGhlbnRpY2F0ZUNoYW5uZWxDcmVkZW50aWFscyIsInVzZXJQYXNzd29yZCIsImNoYW5uZWxGaW5kUGFyYW1zIiwiQ0xBSU1TX1BFUl9QQUdFIiwiY2xhaW1zIiwidG90YWxQYWdlcyIsImRldGVybWluZVRvdGFsUGFnZXMiLCJwYWdpbmF0aW9uUGFnZSIsImdldFBhZ2VGcm9tUXVlcnkiLCJ2aWV3RGF0YSIsImV4dHJhY3RQYWdlRnJvbUNsYWltcyIsInByZXZpb3VzUGFnZSIsImRldGVybWluZVByZXZpb3VzUGFnZSIsImN1cnJlbnRQYWdlIiwibmV4dFBhZ2UiLCJkZXRlcm1pbmVOZXh0UGFnZSIsInRvdGFsUmVzdWx0cyIsImRldGVybWluZVRvdGFsQ2xhaW1zIiwicGFyc2VJbnQiLCJwYWdlTnVtYmVyIiwiY2xhaW1TdGFydEluZGV4IiwiY2xhaW1FbmRJbmRleCIsInBhZ2VPZkNsYWltcyIsInRvdGFsQ2xhaW1zIiwiZnVsbFBhZ2VzIiwiTWF0aCIsImZsb29yIiwicmVtYWluZGVyIiwiaGFuZGxlUGFnZVJlbmRlciIsInJlbmRlciIsImxheW91dCIsImluaXRpYWxTdGF0ZSIsImFzc2lnbiIsInB1Ymxpc2hJbkNoYW5uZWwiLCJzZWxlY3RlZENoYW5uZWwiLCJwdWJsaXNoU3VibWl0IiwiY2hhbm5lbExpc3QiLCJzaXRlQ29uZmlnIiwiZ29vZ2xlQW5hbHl0aWNzSWQiLCJIb21lUGFnZSIsIlNFTyIsInBhZ2VVcmkiLCJwYWdlVGl0bGUiLCJtZXRhVGFncyIsImNhbm9uaWNhbExpbmsiLCJyZWwiLCJocmVmIiwib2JqZWN0IiwiY3JlYXRlUGFnZVRpdGxlIiwiZGV0ZXJtaW5lT2dUaHVtYm5haWxDb250ZW50VHlwZSIsImZpbGVFeHQiLCJsYXN0SW5kZXhPZiIsImNyZWF0ZUJhc2ljTWV0YVRhZ3MiLCJwcm9wZXJ0eSIsImNvbnRlbnQiLCJjcmVhdGVDaGFubmVsTWV0YVRhZ3MiLCJjcmVhdGVBc3NldE1ldGFUYWdzIiwiZW1iZWRVcmwiLCJzaG93VXJsIiwib2dUaXRsZSIsIm9nRGVzY3JpcHRpb24iLCJvZ1RodW1ibmFpbENvbnRlbnRUeXBlIiwib2dUaHVtYm5haWwiLCJjcmVhdGVNZXRhVGFncyIsImNyZWF0ZUJhc2ljQ2Fub25pY2FsTGluayIsImNyZWF0ZUFzc2V0Q2Fub25pY2FsTGluayIsImNyZWF0ZUNoYW5uZWxDYW5vbmljYWxMaW5rIiwiY3JlYXRlQ2Fub25pY2FsTGluayIsIlZJRVciLCJMT0dPVVQiLCJOYXZCYXIiLCJjaGVja0ZvckxvZ2dlZEluVXNlciIsImxvZ291dFVzZXIiLCJoYW5kbGVTZWxlY3Rpb24iLCJjcmVkZW50aWFscyIsInRhcmdldCIsInNlbGVjdGVkT3B0aW9ucyIsIkxvZ28iLCJOYXZCYXJDaGFubmVsRHJvcGRvd24iLCJkZWZhdWx0U2VsZWN0aW9uIiwiUHVibGlzaFRvb2wiLCJEcm9wem9uZSIsImRyYWdPdmVyIiwibW91c2VPdmVyIiwiZGltUHJldmlldyIsImhhbmRsZURyb3AiLCJoYW5kbGVEcmFnT3ZlciIsImhhbmRsZURyYWdFbmQiLCJoYW5kbGVEcmFnRW50ZXIiLCJoYW5kbGVEcmFnTGVhdmUiLCJoYW5kbGVNb3VzZUVudGVyIiwiaGFuZGxlTW91c2VMZWF2ZSIsImhhbmRsZUNsaWNrIiwiaGFuZGxlRmlsZUlucHV0IiwiY2hvb3NlRmlsZSIsInByZXZlbnREZWZhdWx0IiwiZHQiLCJkYXRhVHJhbnNmZXIiLCJpdGVtcyIsImtpbmQiLCJkcm9wcGVkRmlsZSIsImdldEFzRmlsZSIsInJlbW92ZSIsImNsZWFyRGF0YSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJjbGljayIsImZpbGVMaXN0IiwidmFsaWRhdGVGaWxlIiwiUHVibGlzaFByZXZpZXciLCJpbWdTb3VyY2UiLCJzZXRQcmV2aWV3SW1hZ2VTb3VyY2UiLCJuZXdQcm9wcyIsInNldFByZXZpZXdJbWFnZVNvdXJjZUZyb21GaWxlIiwicHJldmlld1JlYWRlciIsIkZpbGVSZWFkZXIiLCJyZWFkQXNEYXRhVVJMIiwib25sb2FkZW5kIiwiYm9vbCIsIlB1Ymxpc2hEZXRhaWxzIiwib25QdWJsaXNoU3VibWl0Iiwib25NZXRhZGF0YUNoYW5nZSIsIlB1Ymxpc2hUaXRsZUlucHV0IiwiaGFuZGxlSW5wdXQiLCJlIiwibG9nZ2VkSW5DaGFubmVsTmFtZSIsImxvZ2dlZEluQ2hhbm5lbFNob3J0SWQiLCJ1cmxFcnJvciIsIm9uQ2xhaW1DaGFuZ2UiLCJvblVybEVycm9yIiwiUHVibGlzaFVybElucHV0Iiwic2V0Q2xhaW1OYW1lIiwidmFsaWRhdGVDbGFpbSIsImNsZWFuc2VJbnB1dCIsImlucHV0IiwiZmlsZU5hbWVXaXRob3V0RW5kaW5nIiwiY2xlYW5DbGFpbU5hbWUiLCJVcmxNaWRkbGUiLCJkYXRhVVJJdG9CbG9iIiwiZGF0YVVSSSIsImJ5dGVTdHJpbmciLCJhdG9iIiwic3BsaXQiLCJtaW1lU3RyaW5nIiwiaWEiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIkJsb2IiLCJQdWJsaXNoVGh1bWJuYWlsSW5wdXQiLCJ2aWRlb1NvdXJjZSIsInNsaWRlck1pblJhbmdlIiwic2xpZGVyTWF4UmFuZ2UiLCJzbGlkZXJWYWx1ZSIsImhhbmRsZVZpZGVvTG9hZGVkRGF0YSIsImhhbmRsZVNsaWRlckNoYW5nZSIsImNyZWF0ZVRodW1ibmFpbCIsInNldFZpZGVvU291cmNlIiwibmV4dFByb3BzIiwiZGF0YVVyaSIsImJsb2IiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJ0b3RhbE1pbnV0ZXMiLCJ0b3RhbFNlY29uZHMiLCJ2aWRlbyIsImN1cnJlbnRUaW1lIiwiY2FudmFzIiwiY3JlYXRlRWxlbWVudCIsIndpZHRoIiwidmlkZW9XaWR0aCIsInZpZGVvSGVpZ2h0IiwiZ2V0Q29udGV4dCIsImRyYXdJbWFnZSIsImRhdGFVcmwiLCJ0b0RhdGFVUkwiLCJzbmFwc2hvdCIsImRpc3BsYXkiLCJvblRvZ2dsZU1ldGFkYXRhSW5wdXRzIiwiUHVibGlzaE1ldGFkYXRhSW5wdXRzIiwidG9nZ2xlU2hvd0lucHV0cyIsImhhbmRsZVNlbGVjdCIsImNoZWNrZWQiLCJzZWxlY3RlZE9wdGlvbiIsIm1heEhlaWdodCIsIkV4cGFuZGluZ1RleHRhcmVhIiwiX2hhbmRsZUNoYW5nZSIsImFkanVzdFRleHRhcmVhIiwib25DaGFuZ2UiLCJlbCIsInN0eWxlIiwic2Nyb2xsSGVpZ2h0IiwicmVzdCIsIngiLCJmdW5jIiwiY2hhbm5lbEVycm9yIiwib25QdWJsaXNoSW5DaGFubmVsQ2hhbmdlIiwib25DaGFubmVsU2VsZWN0Iiwic3RhdGVzIiwiQ2hhbm5lbFNlbGVjdCIsInRvZ2dsZUFub255bW91c1B1Ymxpc2giLCJDaGFubmVsTG9naW5Gb3JtIiwibG9naW5Ub0NoYW5uZWwiLCJIZWFkZXJzIiwiQ2hhbm5lbENyZWF0ZUZvcm0iLCJoYW5kbGVDaGFubmVsSW5wdXQiLCJjbGVhbnNlQ2hhbm5lbElucHV0IiwidXBkYXRlSXNDaGFubmVsQXZhaWxhYmxlIiwiY2hhbm5lbFdpdGhBdFN5bWJvbCIsImNoZWNrSXNQYXNzd29yZFByb3ZpZGVkIiwiY2hlY2tJc0NoYW5uZWxBdmFpbGFibGUiLCJtYWtlUHVibGlzaENoYW5uZWxSZXF1ZXN0IiwiQWN0aXZlU3RhdHVzQmFyIiwiSW5hY3RpdmVTdGF0dXNCYXIiLCJwdWJsaXNoU3RhdGVzIiwiUHVibGlzaFN0YXR1cyIsIkxPQURfU1RBUlQiLCJMT0FESU5HIiwiUFVCTElTSElORyIsIlNVQ0NFU1MiLCJGQUlMRUQiLCJQdWJsaXNoRGlzYWJsZWRNZXNzYWdlIiwiQWJvdXRQYWdlIiwiTG9naW5QYWdlIiwiU2hvd1BhZ2UiLCJtYXRjaCIsIlNob3dMaXRlIiwiQXNzZXREaXNwbGF5IiwiU2hvd0Fzc2V0RGV0YWlscyIsIkFzc2V0VGl0bGUiLCJBc3NldEluZm8iLCJjb3B5VG9DbGlwYm9hcmQiLCJlbGVtZW50VG9Db3B5IiwiZGF0YXNldCIsImVsZW1lbnR0b2NvcHkiLCJzZWxlY3QiLCJleGVjQ29tbWFuZCIsInByZXZpb3VzUmVxdWVzdCIsIlNob3dDaGFubmVsIiwiQ2hhbm5lbENsYWltc0Rpc3BsYXkiLCJzaG93TmV4dFJlc3VsdHNQYWdlIiwic2hvd1ByZXZpb3VzUmVzdWx0c1BhZ2UiLCJzaG93TmV3UGFnZSIsImRlZmF1bHRzIiwiQXNzZXRQcmV2aWV3IiwiZGlyZWN0U291cmNlTGluayIsInNob3dVcmxMaW5rIiwiRm91ck9oRm9yUGFnZSIsImRldGVybWluZVJlc3BvbnNlVHlwZSIsImZsaXBDbGFpbU5hbWVBbmRJZEZvckJhY2t3YXJkc0NvbXBhdGliaWxpdHkiLCJsb2dSZXF1ZXN0RGF0YSIsImdldENsYWltSWRBbmRTZXJ2ZUFzc2V0IiwibGJyeVVyaSIsImhhbmRsZVNob3dSZW5kZXIiLCJTRVJWRSIsImhhc0ZpbGVFeHRlbnNpb24iLCJwYXJzZU1vZGlmaWVyIiwicmVzcG9uc2VUeXBlIiwicGFyc2VDbGFpbSIsImlzQ2hhbm5lbCIsInBhcnNlSWRlbnRpZmllciIsImlkZW50aWZpZXIiLCJTSE9XIiwiY2xpZW50QWNjZXB0c0h0bWwiLCJhY2NlcHQiLCJyZXF1ZXN0SXNGcm9tQnJvd3NlciIsImNsaWVudFdhbnRzQXNzZXQiLCJyYW5nZSIsImltYWdlSXNXYW50ZWQiLCJ2aWRlb0lzV2FudGVkIiwiaXNWYWxpZENsYWltSWQiLCJpc1ZhbGlkU2hvcnRJZCIsImlzVmFsaWRTaG9ydElkT3JDbGFpbUlkIiwic2VydmVBc3NldFRvQ2xpZW50Iiwic2VuZEZpbGVPcHRpb25zIiwic2VuZEZpbGUiLCJmdWxsQ2xhaW1JZCIsInRlbXBOYW1lIiwiUkVHRVhQX0lOVkFMSURfQ0xBSU0iLCJSRUdFWFBfSU5WQUxJRF9DSEFOTkVMIiwiUkVHRVhQX0FERFJFU1MiLCJDSEFOTkVMX0NIQVIiLCJjb21wb25lbnRzUmVnZXgiLCJSZWdFeHAiLCJwcm90byIsIm1vZGlmaWVyU2VwZXJhdG9yIiwic3RhcnRzV2l0aCIsIm5hbWVCYWRDaGFycyIsImpvaW4iLCJyZXR1cm5TYWdhV2l0aFBhcmFtcyIsInNhZ2EiLCJzYWdhTWlkZGxld2FyZSIsIm1pZGRsZXdhcmUiLCJydW4iLCJoYW5kbGVTaG93UGFnZVVyaSIsIndhdGNoSGFuZGxlU2hvd1BhZ2VVcmkiLCJwYXJzZUFuZFVwZGF0ZUlkZW50aWZpZXJBbmRDbGFpbSIsInBhcnNlQW5kVXBkYXRlQ2xhaW1Pbmx5IiwibmV3QXNzZXRSZXF1ZXN0Iiwid2F0Y2hOZXdBc3NldFJlcXVlc3QiLCJnZXRTaG9ydElkIiwiZ2V0Q2xhaW1EYXRhIiwibmV3Q2hhbm5lbFJlcXVlc3QiLCJ3YXRjaE5ld0NoYW5uZWxSZXF1ZXN0Iiwid2F0Y2hVcGRhdGVDaGFubmVsQ2xhaW1zIiwiZ2V0TmV3Q2xhaW1zQW5kVXBkYXRlQ2hhbm5lbCIsImV4dGVuc2lvblNlcGVyYXRvciJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7OztBQzdEQSxrQzs7Ozs7O0FDQUEsd0M7Ozs7OztBQ0FBLG9DOzs7Ozs7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QUQsRUFBTS9CLEdBQU4sRUFBYztBQUN6QjtBQUNBOFIscUJBQWlCL1AsR0FBakIsRUFBc0IvQixHQUF0QjtBQUNELEdBSEQ7QUFJRCxDQU5ELEMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNDUpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGZkYmJiYjI3MDM0NDk4Y2QyMDQ3IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJyZWFjdFwiXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXJlZHV4XCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwicmVhY3QtcmVkdXhcIlxuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ3aW5zdG9uXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwid2luc3RvblwiXG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXJvdXRlci1kb21cIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJyZWFjdC1yb3V0ZXItZG9tXCJcbi8vIG1vZHVsZSBpZCA9IDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICogYXMgYWN0aW9ucyBmcm9tICdjb25zdGFudHMvcHVibGlzaF9hY3Rpb25fdHlwZXMnO1xuXG4vLyBleHBvcnQgYWN0aW9uIGNyZWF0b3JzXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0RmlsZSAoZmlsZSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuRklMRV9TRUxFQ1RFRCxcbiAgICBkYXRhOiBmaWxlLFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRmlsZSAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYWN0aW9ucy5GSUxFX0NMRUFSLFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZU1ldGFkYXRhIChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuTUVUQURBVEFfVVBEQVRFLFxuICAgIGRhdGE6IHtcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICB9LFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUNsYWltICh2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuQ0xBSU1fVVBEQVRFLFxuICAgIGRhdGE6IHZhbHVlLFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldFB1Ymxpc2hJbkNoYW5uZWwgKGNoYW5uZWwpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLlNFVF9QVUJMSVNIX0lOX0NIQU5ORUwsXG4gICAgY2hhbm5lbCxcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVQdWJsaXNoU3RhdHVzIChzdGF0dXMsIG1lc3NhZ2UpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLlBVQkxJU0hfU1RBVFVTX1VQREFURSxcbiAgICBkYXRhOiB7XG4gICAgICBzdGF0dXMsXG4gICAgICBtZXNzYWdlLFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRXJyb3IgKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYWN0aW9ucy5FUlJPUl9VUERBVEUsXG4gICAgZGF0YToge1xuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU2VsZWN0ZWRDaGFubmVsIChjaGFubmVsTmFtZSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuU0VMRUNURURfQ0hBTk5FTF9VUERBVEUsXG4gICAgZGF0YTogY2hhbm5lbE5hbWUsXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlTWV0YWRhdGFJbnB1dHMgKHNob3dNZXRhZGF0YUlucHV0cykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuVE9HR0xFX01FVEFEQVRBX0lOUFVUUyxcbiAgICBkYXRhOiBzaG93TWV0YWRhdGFJbnB1dHMsXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb25OZXdUaHVtYm5haWwgKGZpbGUpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLlRIVU1CTkFJTF9ORVcsXG4gICAgZGF0YTogZmlsZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFB1Ymxpc2ggKGhpc3RvcnkpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLlBVQkxJU0hfU1RBUlQsXG4gICAgZGF0YTogeyBoaXN0b3J5IH0sXG4gIH07XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvYWN0aW9ucy9wdWJsaXNoLmpzIiwiZnVuY3Rpb24gU2l0ZUNvbmZpZyAoKSB7XG4gIHRoaXMuYW5hbHl0aWNzID0ge1xuICAgIGdvb2dsZUlkOiAnZGVmYXVsdCcsXG4gIH07XG4gIHRoaXMuYXNzZXREZWZhdWx0cyA9IHtcbiAgICBkZXNjcmlwdGlvbjogJ0FuIGFzc2V0IHB1Ymxpc2hlZCBvbiBTcGVlLmNoJyxcbiAgICB0aHVtYm5haWwgIDogJ2h0dHBzOi8vc3BlZS5jaC9hc3NldHMvaW1nL3ZpZGVvX3RodW1iX2RlZmF1bHQucG5nJyxcbiAgICB0aXRsZSAgICAgIDogJ1NwZWUuY2gnLFxuICB9O1xuICB0aGlzLmF1dGggPSB7XG4gICAgc2Vzc2lvbktleTogJ2RlZmF1bHQnLFxuICB9O1xuICB0aGlzLmRldGFpbHMgPSB7XG4gICAgZGVzY3JpcHRpb246ICdPcGVuLXNvdXJjZSwgZGVjZW50cmFsaXplZCBpbWFnZSBhbmQgdmlkZW8gc2hhcmluZy4nLFxuICAgIGhvc3QgICAgICAgOiAnZGVmYXVsdCcsXG4gICAgcG9ydCAgICAgICA6IDMwMDAsXG4gICAgdGl0bGUgICAgICA6ICdTcGVlLmNoJyxcbiAgICB0d2l0dGVyICAgIDogJ0BzcGVlX2NoJyxcbiAgfTtcbiAgdGhpcy5wdWJsaXNoaW5nID0ge1xuICAgIGFkZGl0aW9uYWxDbGFpbUFkZHJlc3NlczogW10sXG4gICAgZGlzYWJsZWQgICAgICAgICAgICAgICAgOiBmYWxzZSxcbiAgICBkaXNhYmxlZE1lc3NhZ2UgICAgICAgICA6ICdQbGVhc2UgY2hlY2sgYmFjayBzb29uLicsXG4gICAgcHJpbWFyeUNsYWltQWRkcmVzcyAgICAgOiAnZGVmYXVsdCcsXG4gICAgdGh1bWJuYWlsQ2hhbm5lbCAgICAgICAgOiAnZGVmYXVsdCcsXG4gICAgdGh1bWJuYWlsQ2hhbm5lbElkICAgICAgOiAnZGVmYXVsdCcsXG4gICAgdXBsb2FkRGlyZWN0b3J5ICAgICAgICAgOiAnL2hvbWUvbGJyeS9VcGxvYWRzJyxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFNpdGVDb25maWcoKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NvbmZpZy9zaXRlQ29uZmlnLmpzIiwiY29uc3QgU2VxdWVsaXplID0gcmVxdWlyZSgnc2VxdWVsaXplJyk7XG5jb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5cbmNvbnNvbGUubG9nKCdleHBvcnRpbmcgc2VxdWVsaXplIG1vZGVscycpO1xuY29uc3QgeyBkYXRhYmFzZSwgdXNlcm5hbWUsIHBhc3N3b3JkIH0gPSByZXF1aXJlKCcuLi8uLi9jb25maWcvbXlzcWxDb25maWcnKTtcbmNvbnN0IGRiID0ge307XG4vLyBzZXQgc2VxdWVsaXplIG9wdGlvbnNcbmNvbnN0IHNlcXVlbGl6ZSA9IG5ldyBTZXF1ZWxpemUoZGF0YWJhc2UsIHVzZXJuYW1lLCBwYXNzd29yZCwge1xuICBob3N0ICAgICAgICAgIDogJ2xvY2FsaG9zdCcsXG4gIGRpYWxlY3QgICAgICAgOiAnbXlzcWwnLFxuICBkaWFsZWN0T3B0aW9uczoge2RlY2ltYWxOdW1iZXJzOiB0cnVlfSwgLy8gZml4IHRvIGVuc3VyZSBERUNJTUFMIHdpbGwgbm90IGJlIHN0b3JlZCBhcyBhIHN0cmluZ1xuICBsb2dnaW5nICAgICAgIDogZmFsc2UsXG4gIHBvb2wgICAgICAgICAgOiB7XG4gICAgbWF4ICAgIDogNSxcbiAgICBtaW4gICAgOiAwLFxuICAgIGlkbGUgICA6IDEwMDAwLFxuICAgIGFjcXVpcmU6IDEwMDAwLFxuICB9LFxufSk7XG5cbi8vIGVzdGFibGlzaCBteXNxbCBjb25uZWN0aW9uXG5zZXF1ZWxpemVcbiAgLmF1dGhlbnRpY2F0ZSgpXG4gIC50aGVuKCgpID0+IHtcbiAgICBsb2dnZXIuaW5mbygnU2VxdWVsaXplIGhhcyBlc3RhYmxpc2hlZCBteXNxbCBjb25uZWN0aW9uIHN1Y2Nlc3NmdWxseS4nKTtcbiAgfSlcbiAgLmNhdGNoKGVyciA9PiB7XG4gICAgbG9nZ2VyLmVycm9yKCdTZXF1ZWxpemUgd2FzIHVuYWJsZSB0byBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZTonLCBlcnIpO1xuICB9KTtcblxuLy8gbWFudWFsbHkgYWRkIGVhY2ggbW9kZWwgdG8gdGhlIGRiIG9iamVjdFxuY29uc3QgQ2VydGlmaWNhdGUgPSByZXF1aXJlKCcuL2NlcnRpZmljYXRlLmpzJyk7XG5jb25zdCBDaGFubmVsID0gcmVxdWlyZSgnLi9jaGFubmVsLmpzJyk7XG5jb25zdCBDbGFpbSA9IHJlcXVpcmUoJy4vY2xhaW0uanMnKTtcbmNvbnN0IEZpbGUgPSByZXF1aXJlKCcuL2ZpbGUuanMnKTtcbmNvbnN0IFJlcXVlc3QgPSByZXF1aXJlKCcuL3JlcXVlc3QuanMnKTtcbmNvbnN0IFVzZXIgPSByZXF1aXJlKCcuL3VzZXIuanMnKTtcbmRiWydDZXJ0aWZpY2F0ZSddID0gc2VxdWVsaXplLmltcG9ydCgnQ2VydGlmaWNhdGUnLCBDZXJ0aWZpY2F0ZSk7XG5kYlsnQ2hhbm5lbCddID0gc2VxdWVsaXplLmltcG9ydCgnQ2hhbm5lbCcsIENoYW5uZWwpO1xuZGJbJ0NsYWltJ10gPSBzZXF1ZWxpemUuaW1wb3J0KCdDbGFpbScsIENsYWltKTtcbmRiWydGaWxlJ10gPSBzZXF1ZWxpemUuaW1wb3J0KCdGaWxlJywgRmlsZSk7XG5kYlsnUmVxdWVzdCddID0gc2VxdWVsaXplLmltcG9ydCgnUmVxdWVzdCcsIFJlcXVlc3QpO1xuZGJbJ1VzZXInXSA9IHNlcXVlbGl6ZS5pbXBvcnQoJ1VzZXInLCBVc2VyKTtcblxuLy8gcnVuIG1vZGVsLmFzc29jaWF0aW9uIGZvciBlYWNoIG1vZGVsIGluIHRoZSBkYiBvYmplY3QgdGhhdCBoYXMgYW4gYXNzb2NpYXRpb25cbk9iamVjdC5rZXlzKGRiKS5mb3JFYWNoKG1vZGVsTmFtZSA9PiB7XG4gIGlmIChkYlttb2RlbE5hbWVdLmFzc29jaWF0ZSkge1xuICAgIGxvZ2dlci5pbmZvKCdBc3NvY2lhdGluZyBtb2RlbDonLCBtb2RlbE5hbWUpO1xuICAgIGRiW21vZGVsTmFtZV0uYXNzb2NpYXRlKGRiKTtcbiAgfVxufSk7XG5cbmRiLnNlcXVlbGl6ZSA9IHNlcXVlbGl6ZTtcbmRiLlNlcXVlbGl6ZSA9IFNlcXVlbGl6ZTtcblxuLy8gYWRkIGFuICd1cHNlcnQnIG1ldGhvZCB0byB0aGUgZGIgb2JqZWN0XG5kYi51cHNlcnQgPSAoTW9kZWwsIHZhbHVlcywgY29uZGl0aW9uLCB0YWJsZU5hbWUpID0+IHtcbiAgcmV0dXJuIE1vZGVsXG4gICAgLmZpbmRPbmUoe1xuICAgICAgd2hlcmU6IGNvbmRpdGlvbixcbiAgICB9KVxuICAgIC50aGVuKG9iaiA9PiB7XG4gICAgICBpZiAob2JqKSB7ICAvLyB1cGRhdGVcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGB1cGRhdGluZyByZWNvcmQgaW4gZGIuJHt0YWJsZU5hbWV9YCk7XG4gICAgICAgIHJldHVybiBvYmoudXBkYXRlKHZhbHVlcyk7XG4gICAgICB9IGVsc2UgeyAgLy8gaW5zZXJ0XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgY3JlYXRpbmcgcmVjb3JkIGluIGRiLiR7dGFibGVOYW1lfWApO1xuICAgICAgICByZXR1cm4gTW9kZWwuY3JlYXRlKHZhbHVlcyk7XG4gICAgICB9XG4gICAgfSlcbiAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYCR7dGFibGVOYW1lfS51cHNlcnQgZXJyb3JgLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZGI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2ZXIvbW9kZWxzL2luZGV4LmpzIiwiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHVwZGF0ZUxvZ2dlZEluQ2hhbm5lbCB9IGZyb20gJ2FjdGlvbnMvY2hhbm5lbCc7XG5pbXBvcnQge3VwZGF0ZVNlbGVjdGVkQ2hhbm5lbH0gZnJvbSAnYWN0aW9ucy9wdWJsaXNoJztcbmltcG9ydCBWaWV3IGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9ICh7IGNoYW5uZWwsIHNpdGUgfSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGNoYW5uZWxOYW1lICAgOiBjaGFubmVsLmxvZ2dlZEluQ2hhbm5lbC5uYW1lLFxuICAgIGNoYW5uZWxTaG9ydElkOiBjaGFubmVsLmxvZ2dlZEluQ2hhbm5lbC5zaG9ydElkLFxuICAgIGNoYW5uZWxMb25nSWQgOiBjaGFubmVsLmxvZ2dlZEluQ2hhbm5lbC5sb25nSWQsXG4gICAgc2l0ZURlc2NyaXB0aW9uOiBzaXRlLmRlc2NyaXB0aW9uLFxuICB9O1xufTtcblxuY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gZGlzcGF0Y2ggPT4ge1xuICByZXR1cm4ge1xuICAgIG9uQ2hhbm5lbExvZ2luOiAobmFtZSwgc2hvcnRJZCwgbG9uZ0lkKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVMb2dnZWRJbkNoYW5uZWwobmFtZSwgc2hvcnRJZCwgbG9uZ0lkKSk7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVTZWxlY3RlZENoYW5uZWwobmFtZSkpO1xuICAgIH0sXG4gICAgb25DaGFubmVsTG9nb3V0OiAoKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVMb2dnZWRJbkNoYW5uZWwobnVsbCwgbnVsbCwgbnVsbCkpO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL05hdkJhci9pbmRleC5qcyIsImltcG9ydCAqIGFzIGFjdGlvbnMgZnJvbSAnY29uc3RhbnRzL3Nob3dfYWN0aW9uX3R5cGVzJztcblxuaW1wb3J0IHsgQ0hBTk5FTCwgQVNTRVRfTElURSwgQVNTRVRfREVUQUlMUyB9IGZyb20gJ2NvbnN0YW50cy9zaG93X3JlcXVlc3RfdHlwZXMnO1xuXG4vLyBiYXNpYyByZXF1ZXN0IHBhcnNpbmdcbmV4cG9ydCBmdW5jdGlvbiBvbkhhbmRsZVNob3dQYWdlVXJpIChwYXJhbXMpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLkhBTkRMRV9TSE9XX1VSSSxcbiAgICBkYXRhOiBwYXJhbXMsXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb25SZXF1ZXN0RXJyb3IgKGVycm9yKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYWN0aW9ucy5SRVFVRVNUX0VSUk9SLFxuICAgIGRhdGE6IGVycm9yLFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG9uTmV3Q2hhbm5lbFJlcXVlc3QgKGNoYW5uZWxOYW1lLCBjaGFubmVsSWQpIHtcbiAgY29uc3QgcmVxdWVzdFR5cGUgPSBDSEFOTkVMO1xuICBjb25zdCByZXF1ZXN0SWQgPSBgY3IjJHtjaGFubmVsTmFtZX0jJHtjaGFubmVsSWR9YDtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLkNIQU5ORUxfUkVRVUVTVF9ORVcsXG4gICAgZGF0YTogeyByZXF1ZXN0VHlwZSwgcmVxdWVzdElkLCBjaGFubmVsTmFtZSwgY2hhbm5lbElkIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb25OZXdBc3NldFJlcXVlc3QgKG5hbWUsIGlkLCBjaGFubmVsTmFtZSwgY2hhbm5lbElkLCBleHRlbnNpb24pIHtcbiAgY29uc3QgcmVxdWVzdFR5cGUgPSBleHRlbnNpb24gPyBBU1NFVF9MSVRFIDogQVNTRVRfREVUQUlMUztcbiAgY29uc3QgcmVxdWVzdElkID0gYGFyIyR7bmFtZX0jJHtpZH0jJHtjaGFubmVsTmFtZX0jJHtjaGFubmVsSWR9YDtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLkFTU0VUX1JFUVVFU1RfTkVXLFxuICAgIGRhdGE6IHtcbiAgICAgIHJlcXVlc3RUeXBlLFxuICAgICAgcmVxdWVzdElkLFxuICAgICAgbmFtZSxcbiAgICAgIG1vZGlmaWVyOiB7XG4gICAgICAgIGlkLFxuICAgICAgICBjaGFubmVsOiB7XG4gICAgICAgICAgbmFtZTogY2hhbm5lbE5hbWUsXG4gICAgICAgICAgaWQgIDogY2hhbm5lbElkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG9uUmVxdWVzdFVwZGF0ZSAocmVxdWVzdFR5cGUsIHJlcXVlc3RJZCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuUkVRVUVTVF9VUERBVEUsXG4gICAgZGF0YToge1xuICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICByZXF1ZXN0SWQsXG4gICAgfSxcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRSZXF1ZXN0VG9SZXF1ZXN0TGlzdCAoaWQsIGVycm9yLCBrZXkpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLlJFUVVFU1RfTElTVF9BREQsXG4gICAgZGF0YTogeyBpZCwgZXJyb3IsIGtleSB9LFxuICB9O1xufTtcblxuLy8gYXNzZXQgYWN0aW9uc1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkQXNzZXRUb0Fzc2V0TGlzdCAoaWQsIGVycm9yLCBuYW1lLCBjbGFpbUlkLCBzaG9ydElkLCBjbGFpbURhdGEpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLkFTU0VUX0FERCxcbiAgICBkYXRhOiB7IGlkLCBlcnJvciwgbmFtZSwgY2xhaW1JZCwgc2hvcnRJZCwgY2xhaW1EYXRhIH0sXG4gIH07XG59XG5cbi8vIGNoYW5uZWwgYWN0aW9uc1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkTmV3Q2hhbm5lbFRvQ2hhbm5lbExpc3QgKGlkLCBuYW1lLCBzaG9ydElkLCBsb25nSWQsIGNsYWltc0RhdGEpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLkNIQU5ORUxfQURELFxuICAgIGRhdGE6IHsgaWQsIG5hbWUsIHNob3J0SWQsIGxvbmdJZCwgY2xhaW1zRGF0YSB9LFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG9uVXBkYXRlQ2hhbm5lbENsYWltcyAoY2hhbm5lbEtleSwgbmFtZSwgbG9uZ0lkLCBwYWdlKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYWN0aW9ucy5DSEFOTkVMX0NMQUlNU19VUERBVEVfQVNZTkMsXG4gICAgZGF0YToge2NoYW5uZWxLZXksIG5hbWUsIGxvbmdJZCwgcGFnZX0sXG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQ2hhbm5lbENsYWltcyAoY2hhbm5lbExpc3RJZCwgY2xhaW1zRGF0YSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuQ0hBTk5FTF9DTEFJTVNfVVBEQVRFX1NVQ0NFU1MsXG4gICAgZGF0YToge2NoYW5uZWxMaXN0SWQsIGNsYWltc0RhdGF9LFxuICB9O1xufTtcblxuLy8gZGlzcGxheSBhIGZpbGVcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVSZXF1ZXN0ZWQgKG5hbWUsIGNsYWltSWQpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLkZJTEVfUkVRVUVTVEVELFxuICAgIGRhdGE6IHsgbmFtZSwgY2xhaW1JZCB9LFxuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVBdmFpbGFiaWxpdHkgKHN0YXR1cykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuRklMRV9BVkFJTEFCSUxJVFlfVVBEQVRFLFxuICAgIGRhdGE6IHN0YXR1cyxcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5QXNzZXRFcnJvciAoZXJyb3IpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhY3Rpb25zLkRJU1BMQVlfQVNTRVRfRVJST1IsXG4gICAgZGF0YTogZXJyb3IsXG4gIH07XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2FjdGlvbnMvc2hvdy5qcyIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBzaXRlIH0pID0+IHtcbiAgY29uc3QgeyBkZWZhdWx0RGVzY3JpcHRpb24sIGRlZmF1bHRUaHVtYm5haWwsIGRlc2NyaXB0aW9uOiBzaXRlRGVzY3JpcHRpb24sIGhvc3Q6IHNpdGVIb3N0LCB0aXRsZTogc2l0ZVRpdGxlLCB0d2l0dGVyOiBzaXRlVHdpdHRlciB9ID0gc2l0ZTtcbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0RGVzY3JpcHRpb24sXG4gICAgZGVmYXVsdFRodW1ibmFpbCxcbiAgICBzaXRlRGVzY3JpcHRpb24sXG4gICAgc2l0ZUhvc3QsXG4gICAgc2l0ZVRpdGxlLFxuICAgIHNpdGVUd2l0dGVyLFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG51bGwpKFZpZXcpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbXBvbmVudHMvU0VPL2luZGV4LmpzIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInByb3AtdHlwZXNcIlxuLy8gbW9kdWxlIGlkID0gMTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICdjcm9zcy1mZXRjaC9wb2x5ZmlsbCc7XG5cbi8qKlxuICogUGFyc2VzIHRoZSBKU09OIHJldHVybmVkIGJ5IGEgbmV0d29yayByZXF1ZXN0XG4gKlxuICogQHBhcmFtICB7b2JqZWN0fSByZXNwb25zZSBBIHJlc3BvbnNlIGZyb20gYSBuZXR3b3JrIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJuIHtvYmplY3R9ICAgICAgICAgIFRoZSBwYXJzZWQgSlNPTiBmcm9tIHRoZSByZXF1ZXN0XG4gKi9cbmZ1bmN0aW9uIHBhcnNlSlNPTiAocmVzcG9uc2UpIHtcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0IHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA1KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIHN0YXR1cyByZXR1cm5lZCBieSBhIG5ldHdvcmsgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSAge29iamVjdH0gcmVzcG9uc2UgICBBIHJlc3BvbnNlIGZyb20gYSBuZXR3b3JrIHJlcXVlc3RcbiAqIEBwYXJhbSAge29iamVjdH0gcmVzcG9uc2UgICBUaGUgcGFyc2VkIEpTT04gZnJvbSB0aGUgbmV0d29yayByZXF1ZXN0XG4gKlxuICogQHJldHVybiB7b2JqZWN0IHwgdW5kZWZpbmVkfSBSZXR1cm5zIG9iamVjdCB3aXRoIHN0YXR1cyBhbmQgc3RhdHVzVGV4dCwgb3IgdW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGNoZWNrU3RhdHVzIChyZXNwb25zZSwganNvblJlc3BvbnNlKSB7XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMCkge1xuICAgIHJldHVybiBqc29uUmVzcG9uc2U7XG4gIH1cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoanNvblJlc3BvbnNlLm1lc3NhZ2UpO1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICB0aHJvdyBlcnJvcjtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0cyBhIFVSTCwgcmV0dXJuaW5nIGEgcHJvbWlzZVxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gdXJsICAgICAgIFRoZSBVUkwgd2Ugd2FudCB0byByZXF1ZXN0XG4gKiBAcGFyYW0gIHtvYmplY3R9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyB3ZSB3YW50IHRvIHBhc3MgdG8gXCJmZXRjaFwiXG4gKlxuICogQHJldHVybiB7b2JqZWN0fSAgICAgICAgICAgVGhlIHJlc3BvbnNlIGRhdGFcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXF1ZXN0ICh1cmwsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZldGNoKHVybCwgb3B0aW9ucylcbiAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3Jlc3BvbnNlLCBwYXJzZUpTT04ocmVzcG9uc2UpXSk7XG4gICAgfSlcbiAgICAudGhlbigoW3Jlc3BvbnNlLCBqc29uUmVzcG9uc2VdKSA9PiB7XG4gICAgICByZXR1cm4gY2hlY2tTdGF0dXMocmVzcG9uc2UsIGpzb25SZXNwb25zZSk7XG4gICAgfSk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvdXRpbHMvcmVxdWVzdC5qcyIsIi8vIHJlcXVlc3QgYWN0aW9uc1xuZXhwb3J0IGNvbnN0IEhBTkRMRV9TSE9XX1VSSSA9ICdIQU5ETEVfU0hPV19VUkknO1xuZXhwb3J0IGNvbnN0IFJFUVVFU1RfRVJST1IgPSAnUkVRVUVTVF9FUlJPUic7XG5leHBvcnQgY29uc3QgUkVRVUVTVF9VUERBVEUgPSAnUkVRVUVTVF9VUERBVEUnO1xuZXhwb3J0IGNvbnN0IEFTU0VUX1JFUVVFU1RfTkVXID0gJ0FTU0VUX1JFUVVFU1RfTkVXJztcbmV4cG9ydCBjb25zdCBDSEFOTkVMX1JFUVVFU1RfTkVXID0gJ0NIQU5ORUxfUkVRVUVTVF9ORVcnO1xuZXhwb3J0IGNvbnN0IFJFUVVFU1RfTElTVF9BREQgPSAnUkVRVUVTVF9MSVNUX0FERCc7XG5cbi8vIGFzc2V0IGFjdGlvbnNcbmV4cG9ydCBjb25zdCBBU1NFVF9BREQgPSBgQVNTRVRfQUREYDtcblxuLy8gY2hhbm5lbCBhY3Rpb25zXG5leHBvcnQgY29uc3QgQ0hBTk5FTF9BREQgPSAnQ0hBTk5FTF9BREQnO1xuXG5leHBvcnQgY29uc3QgQ0hBTk5FTF9DTEFJTVNfVVBEQVRFX0FTWU5DID0gJ0NIQU5ORUxfQ0xBSU1TX1VQREFURV9BU1lOQyc7XG5leHBvcnQgY29uc3QgQ0hBTk5FTF9DTEFJTVNfVVBEQVRFX1NVQ0NFU1MgPSAnQ0hBTk5FTF9DTEFJTVNfVVBEQVRFX1NVQ0NFU1MnO1xuXG4vLyBhc3NldC9maWxlIGRpc3BsYXkgYWN0aW9uc1xuZXhwb3J0IGNvbnN0IEZJTEVfUkVRVUVTVEVEID0gJ0ZJTEVfUkVRVUVTVEVEJztcbmV4cG9ydCBjb25zdCBGSUxFX0FWQUlMQUJJTElUWV9VUERBVEUgPSAnRklMRV9BVkFJTEFCSUxJVFlfVVBEQVRFJztcbmV4cG9ydCBjb25zdCBESVNQTEFZX0FTU0VUX0VSUk9SID0gJ0RJU1BMQVlfQVNTRVRfRVJST1InO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnN0YW50cy9zaG93X2FjdGlvbl90eXBlcy5qcyIsImV4cG9ydCBjb25zdCBzZWxlY3RBc3NldCA9IChzaG93KSA9PiB7XG4gIGNvbnN0IHJlcXVlc3QgPSBzaG93LnJlcXVlc3RMaXN0W3Nob3cucmVxdWVzdC5pZF07XG4gIGNvbnN0IGFzc2V0S2V5ID0gcmVxdWVzdC5rZXk7XG4gIHJldHVybiBzaG93LmFzc2V0TGlzdFthc3NldEtleV07XG59O1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0U2hvd1N0YXRlID0gKHN0YXRlKSA9PiB7XG4gIHJldHVybiBzdGF0ZS5zaG93O1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9zZWxlY3RvcnMvc2hvdy5qcyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWhlbG1ldFwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInJlYWN0LWhlbG1ldFwiXG4vLyBtb2R1bGUgaWQgPSAxNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWR1eC1zYWdhL2VmZmVjdHNcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJyZWR1eC1zYWdhL2VmZmVjdHNcIlxuLy8gbW9kdWxlIGlkID0gMTVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiY29uc3QgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpO1xuY29uc3QgbG9nZ2VyID0gcmVxdWlyZSgnd2luc3RvbicpO1xuY29uc3QgeyBhcGk6IHsgYXBpSG9zdCwgYXBpUG9ydCB9IH0gPSByZXF1aXJlKCcuLi8uLi9jb25maWcvbGJyeUNvbmZpZy5qcycpO1xuY29uc3QgbGJyeUFwaVVyaSA9ICdodHRwOi8vJyArIGFwaUhvc3QgKyAnOicgKyBhcGlQb3J0O1xuY29uc3QgeyBjaG9vc2VHYUxicnluZXRQdWJsaXNoTGFiZWwsIHNlbmRHQVRpbWluZ0V2ZW50IH0gPSByZXF1aXJlKCcuL2dvb2dsZUFuYWx5dGljcy5qcycpO1xuXG5jb25zdCBoYW5kbGVMYnJ5bmV0UmVzcG9uc2UgPSAoeyBkYXRhIH0sIHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICBsb2dnZXIuZGVidWcoJ2xicnkgYXBpIGRhdGE6JywgZGF0YSk7XG4gIGlmIChkYXRhLnJlc3VsdCkge1xuICAgIC8vIGNoZWNrIGZvciBhbiBlcnJvclxuICAgIGlmIChkYXRhLnJlc3VsdC5lcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdMYnJ5bmV0IGFwaSBlcnJvcjonLCBkYXRhLnJlc3VsdC5lcnJvcik7XG4gICAgICByZWplY3QobmV3IEVycm9yKGRhdGEucmVzdWx0LmVycm9yKSk7XG4gICAgICByZXR1cm47XG4gICAgfTtcbiAgICByZXNvbHZlKGRhdGEucmVzdWx0KTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gZmFsbGJhY2sgaW4gY2FzZSBpdCBqdXN0IHRpbWVkIG91dFxuICByZWplY3QoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHB1Ymxpc2hDbGFpbSAocHVibGlzaFBhcmFtcykge1xuICAgIGxvZ2dlci5kZWJ1ZyhgbGJyeUFwaSA+PiBQdWJsaXNoaW5nIGNsYWltIHRvIFwiJHtwdWJsaXNoUGFyYW1zLm5hbWV9XCJgKTtcbiAgICBjb25zdCBnYVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGF4aW9zXG4gICAgICAgIC5wb3N0KGxicnlBcGlVcmksIHtcbiAgICAgICAgICBtZXRob2Q6ICdwdWJsaXNoJyxcbiAgICAgICAgICBwYXJhbXM6IHB1Ymxpc2hQYXJhbXMsXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBzZW5kR0FUaW1pbmdFdmVudCgnbGJyeW5ldCcsICdwdWJsaXNoJywgY2hvb3NlR2FMYnJ5bmV0UHVibGlzaExhYmVsKHB1Ymxpc2hQYXJhbXMpLCBnYVN0YXJ0VGltZSwgRGF0ZS5ub3coKSk7XG4gICAgICAgICAgaGFuZGxlTGJyeW5ldFJlc3BvbnNlKHJlc3BvbnNlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxuICBnZXRDbGFpbSAodXJpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBsYnJ5QXBpID4+IEdldHRpbmcgQ2xhaW0gZm9yIFwiJHt1cml9XCJgKTtcbiAgICBjb25zdCBnYVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGF4aW9zXG4gICAgICAgIC5wb3N0KGxicnlBcGlVcmksIHtcbiAgICAgICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgICAgIHBhcmFtczogeyB1cmksIHRpbWVvdXQ6IDIwIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBzZW5kR0FUaW1pbmdFdmVudCgnbGJyeW5ldCcsICdnZXRDbGFpbScsICdHRVQnLCBnYVN0YXJ0VGltZSwgRGF0ZS5ub3coKSk7XG4gICAgICAgICAgaGFuZGxlTGJyeW5ldFJlc3BvbnNlKHJlc3BvbnNlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxuICBnZXRDbGFpbUxpc3QgKGNsYWltTmFtZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgbGJyeUFwaSA+PiBHZXR0aW5nIGNsYWltX2xpc3QgZm9yIFwiJHtjbGFpbU5hbWV9XCJgKTtcbiAgICBjb25zdCBnYVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGF4aW9zXG4gICAgICAgIC5wb3N0KGxicnlBcGlVcmksIHtcbiAgICAgICAgICBtZXRob2Q6ICdjbGFpbV9saXN0JyxcbiAgICAgICAgICBwYXJhbXM6IHsgbmFtZTogY2xhaW1OYW1lIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBzZW5kR0FUaW1pbmdFdmVudCgnbGJyeW5ldCcsICdnZXRDbGFpbUxpc3QnLCAnQ0xBSU1fTElTVCcsIGdhU3RhcnRUaW1lLCBEYXRlLm5vdygpKTtcbiAgICAgICAgICBoYW5kbGVMYnJ5bmV0UmVzcG9uc2UocmVzcG9uc2UsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG4gIHJlc29sdmVVcmkgKHVyaSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgbGJyeUFwaSA+PiBSZXNvbHZpbmcgVVJJIGZvciBcIiR7dXJpfVwiYCk7XG4gICAgY29uc3QgZ2FTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBheGlvc1xuICAgICAgICAucG9zdChsYnJ5QXBpVXJpLCB7XG4gICAgICAgICAgbWV0aG9kOiAncmVzb2x2ZScsXG4gICAgICAgICAgcGFyYW1zOiB7IHVyaSB9LFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgICBzZW5kR0FUaW1pbmdFdmVudCgnbGJyeW5ldCcsICdyZXNvbHZlVXJpJywgJ1JFU09MVkUnLCBnYVN0YXJ0VGltZSwgRGF0ZS5ub3coKSk7XG4gICAgICAgICAgaWYgKGRhdGEucmVzdWx0W3VyaV0uZXJyb3IpIHsgIC8vIGNoZWNrIGZvciBlcnJvcnNcbiAgICAgICAgICAgIHJlamVjdChkYXRhLnJlc3VsdFt1cmldLmVycm9yKTtcbiAgICAgICAgICB9IGVsc2UgeyAgLy8gaWYgbm8gZXJyb3JzLCByZXNvbHZlXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEucmVzdWx0W3VyaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSxcbiAgZ2V0RG93bmxvYWREaXJlY3RvcnkgKCkge1xuICAgIGxvZ2dlci5kZWJ1ZygnbGJyeUFwaSA+PiBSZXRyaWV2aW5nIHRoZSBkb3dubG9hZCBkaXJlY3RvcnkgcGF0aCBmcm9tIGxicnkgZGFlbW9uLi4uJyk7XG4gICAgY29uc3QgZ2FTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBheGlvc1xuICAgICAgICAucG9zdChsYnJ5QXBpVXJpLCB7XG4gICAgICAgICAgbWV0aG9kOiAnc2V0dGluZ3NfZ2V0JyxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHsgZGF0YSB9KSA9PiB7XG4gICAgICAgICAgc2VuZEdBVGltaW5nRXZlbnQoJ2xicnluZXQnLCAnZ2V0RG93bmxvYWREaXJlY3RvcnknLCAnU0VUVElOR1NfR0VUJywgZ2FTdGFydFRpbWUsIERhdGUubm93KCkpO1xuICAgICAgICAgIGlmIChkYXRhLnJlc3VsdCkge1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnJlc3VsdC5kb3dubG9hZF9kaXJlY3RvcnkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdTdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvIGxicnkgZGFlbW9uLCBidXQgdW5hYmxlIHRvIHJldHJpZXZlIHRoZSBkb3dubG9hZCBkaXJlY3RvcnkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignTGJyeW5ldCBFcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgcmVzb2x2ZSgnL2hvbWUvbGJyeS9Eb3dubG9hZHMvJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxuICBjcmVhdGVDaGFubmVsIChuYW1lKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBsYnJ5QXBpID4+IENyZWF0aW5nIGNoYW5uZWwgZm9yICR7bmFtZX0uLi5gKTtcbiAgICBjb25zdCBnYVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGF4aW9zXG4gICAgICAgIC5wb3N0KGxicnlBcGlVcmksIHtcbiAgICAgICAgICBtZXRob2Q6ICdjaGFubmVsX25ldycsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBjaGFubmVsX25hbWU6IG5hbWUsXG4gICAgICAgICAgICBhbW91bnQgICAgICA6IDAuMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgc2VuZEdBVGltaW5nRXZlbnQoJ2xicnluZXQnLCAnY3JlYXRlQ2hhbm5lbCcsICdDSEFOTkVMX05FVycsIGdhU3RhcnRUaW1lLCBEYXRlLm5vdygpKTtcbiAgICAgICAgICBoYW5kbGVMYnJ5bmV0UmVzcG9uc2UocmVzcG9uc2UsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvbGJyeUFwaS5qcyIsImNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJ3dpbnN0b24nKTtcbmNvbnN0IHVhID0gcmVxdWlyZSgndW5pdmVyc2FsLWFuYWx5dGljcycpO1xuY29uc3QgeyBhbmFseXRpY3MgOiB7IGdvb2dsZUlkIH0sIGRldGFpbHM6IHsgdGl0bGUgfSB9ID0gcmVxdWlyZSgnLi4vLi4vY29uZmlnL3NpdGVDb25maWcuanMnKTtcblxuZnVuY3Rpb24gY3JlYXRlU2VydmVFdmVudFBhcmFtcyAoaGVhZGVycywgaXAsIG9yaWdpbmFsVXJsKSB7XG4gIHJldHVybiB7XG4gICAgZXZlbnRDYXRlZ29yeSAgICA6ICdjbGllbnQgcmVxdWVzdHMnLFxuICAgIGV2ZW50QWN0aW9uICAgICAgOiAnc2VydmUgcmVxdWVzdCcsXG4gICAgZXZlbnRMYWJlbCAgICAgICA6IG9yaWdpbmFsVXJsLFxuICAgIGlwT3ZlcnJpZGUgICAgICAgOiBpcCxcbiAgICB1c2VyQWdlbnRPdmVycmlkZTogaGVhZGVyc1sndXNlci1hZ2VudCddLFxuICB9O1xufTtcblxuZnVuY3Rpb24gY3JlYXRlUHVibGlzaFRpbWluZ0V2ZW50UGFyYW1zIChjYXRlZ29yeSwgdmFyaWFibGUsIGxhYmVsLCBzdGFydFRpbWUsIGVuZFRpbWUpIHtcbiAgY29uc3QgZHVyYXRpb24gPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xuICByZXR1cm4ge1xuICAgIHVzZXJUaW1pbmdDYXRlZ29yeSAgICA6IGNhdGVnb3J5LFxuICAgIHVzZXJUaW1pbmdWYXJpYWJsZU5hbWU6IHZhcmlhYmxlLFxuICAgIHVzZXJUaW1pbmdUaW1lICAgICAgICA6IGR1cmF0aW9uLFxuICAgIHVzZXJUaW1pbmdMYWJlbCAgICAgICA6IGxhYmVsLFxuICB9O1xufTtcblxuZnVuY3Rpb24gc2VuZEdvb2dsZUFuYWx5dGljc0V2ZW50IChpcCwgcGFyYW1zKSB7XG4gIGNvbnN0IHZpc2l0b3JJZCA9IGlwLnJlcGxhY2UoL1xcLi9nLCAnLScpO1xuICBjb25zdCB2aXNpdG9yID0gdWEoZ29vZ2xlSWQsIHZpc2l0b3JJZCwgeyBzdHJpY3RDaWRGb3JtYXQ6IGZhbHNlLCBodHRwczogdHJ1ZSB9KTtcbiAgdmlzaXRvci5ldmVudChwYXJhbXMsIChlcnIpID0+IHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0dvb2dsZSBBbmFseXRpY3MgRXZlbnQgRXJyb3IgPj4nLCBlcnIpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBzZW5kR29vZ2xlQW5hbHl0aWNzVGltaW5nICh2aXNpdG9ySWQsIHBhcmFtcykge1xuICBjb25zdCB2aXNpdG9yID0gdWEoZ29vZ2xlSWQsIHZpc2l0b3JJZCwgeyBzdHJpY3RDaWRGb3JtYXQ6IGZhbHNlLCBodHRwczogdHJ1ZSB9KTtcbiAgdmlzaXRvci50aW1pbmcocGFyYW1zLCAoZXJyKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdHb29nbGUgQW5hbHl0aWNzIEV2ZW50IEVycm9yID4+JywgZXJyKTtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKGBUaW1pbmcgZXZlbnQgc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gZ29vZ2xlIGFuYWx5dGljc2ApO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZW5kR0FTZXJ2ZUV2ZW50IChoZWFkZXJzLCBpcCwgb3JpZ2luYWxVcmwpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBjcmVhdGVTZXJ2ZUV2ZW50UGFyYW1zKGhlYWRlcnMsIGlwLCBvcmlnaW5hbFVybCk7XG4gICAgc2VuZEdvb2dsZUFuYWx5dGljc0V2ZW50KGlwLCBwYXJhbXMpO1xuICB9LFxuICBzZW5kR0FUaW1pbmdFdmVudCAoY2F0ZWdvcnksIHZhcmlhYmxlLCBsYWJlbCwgc3RhcnRUaW1lLCBlbmRUaW1lKSB7XG4gICAgY29uc3QgcGFyYW1zID0gY3JlYXRlUHVibGlzaFRpbWluZ0V2ZW50UGFyYW1zKGNhdGVnb3J5LCB2YXJpYWJsZSwgbGFiZWwsIHN0YXJ0VGltZSwgZW5kVGltZSk7XG4gICAgc2VuZEdvb2dsZUFuYWx5dGljc1RpbWluZyh0aXRsZSwgcGFyYW1zKTtcbiAgfSxcbiAgY2hvb3NlR2FMYnJ5bmV0UHVibGlzaExhYmVsICh7IGNoYW5uZWxfbmFtZTogY2hhbm5lbE5hbWUsIGNoYW5uZWxfaWQ6IGNoYW5uZWxJZCB9KSB7XG4gICAgcmV0dXJuIChjaGFubmVsTmFtZSB8fCBjaGFubmVsSWQgPyAnUFVCTElTSF9JTl9DSEFOTkVMX0NMQUlNJyA6ICdQVUJMSVNIX0FOT05ZTU9VU19DTEFJTScpO1xuICB9LFxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9oZWxwZXJzL2dvb2dsZUFuYWx5dGljcy5qcyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZHV4XCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwicmVkdXhcIlxuLy8gbW9kdWxlIGlkID0gMThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICogYXMgYWN0aW9ucyBmcm9tICdjb25zdGFudHMvY2hhbm5lbF9hY3Rpb25fdHlwZXMnO1xuXG4vLyBleHBvcnQgYWN0aW9uIGNyZWF0b3JzXG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMb2dnZWRJbkNoYW5uZWwgKG5hbWUsIHNob3J0SWQsIGxvbmdJZCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGFjdGlvbnMuQ0hBTk5FTF9VUERBVEUsXG4gICAgZGF0YToge1xuICAgICAgbmFtZSxcbiAgICAgIHNob3J0SWQsXG4gICAgICBsb25nSWQsXG4gICAgfSxcbiAgfTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvYWN0aW9ucy9jaGFubmVsLmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgQWN0aXZlU3RhdHVzQmFyIGZyb20gJ2NvbXBvbmVudHMvQWN0aXZlU3RhdHVzQmFyJztcbmltcG9ydCBJbmFjdGl2ZVN0YXR1c0JhciBmcm9tICdjb21wb25lbnRzL0luYWN0aXZlU3RhdHVzQmFyJztcblxuY2xhc3MgUHJvZ3Jlc3NCYXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGJhcnMgICAgICAgOiBbXSxcbiAgICAgIGluZGV4ICAgICAgOiAwLFxuICAgICAgaW5jcmVtZW50ZXI6IDEsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZUJhcnMgPSB0aGlzLmNyZWF0ZUJhcnMuYmluZCh0aGlzKTtcbiAgICB0aGlzLnN0YXJ0UHJvZ3Jlc3NCYXIgPSB0aGlzLnN0YXJ0UHJvZ3Jlc3NCYXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzQmFyID0gdGhpcy51cGRhdGVQcm9ncmVzc0Jhci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc3RvcFByb2dyZXNzQmFyID0gdGhpcy5zdG9wUHJvZ3Jlc3NCYXIuYmluZCh0aGlzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgdGhpcy5jcmVhdGVCYXJzKCk7XG4gICAgdGhpcy5zdGFydFByb2dyZXNzQmFyKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQgKCkge1xuICAgIHRoaXMuc3RvcFByb2dyZXNzQmFyKCk7XG4gIH1cbiAgY3JlYXRlQmFycyAoKSB7XG4gICAgY29uc3QgYmFycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHRoaXMucHJvcHMuc2l6ZTsgaSsrKSB7XG4gICAgICBiYXJzLnB1c2goe2lzQWN0aXZlOiBmYWxzZX0pO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHsgYmFycyB9KTtcbiAgfVxuICBzdGFydFByb2dyZXNzQmFyICgpIHtcbiAgICB0aGlzLnVwZGF0ZUludGVydmFsID0gc2V0SW50ZXJ2YWwodGhpcy51cGRhdGVQcm9ncmVzc0Jhci5iaW5kKHRoaXMpLCAzMDApO1xuICB9O1xuICB1cGRhdGVQcm9ncmVzc0JhciAoKSB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5zdGF0ZS5pbmRleDtcbiAgICBsZXQgaW5jcmVtZW50ZXIgPSB0aGlzLnN0YXRlLmluY3JlbWVudGVyO1xuICAgIGxldCBiYXJzID0gdGhpcy5zdGF0ZS5iYXJzO1xuICAgIC8vIGZsaXAgaW5jcmVtZW50ZXIgaWYgbmVjZXNzYXJ5LCB0byBzdGF5IGluIGJvdW5kc1xuICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPiB0aGlzLnByb3BzLnNpemUpKSB7XG4gICAgICBpbmNyZW1lbnRlciA9IGluY3JlbWVudGVyICogLTE7XG4gICAgICBpbmRleCArPSBpbmNyZW1lbnRlcjtcbiAgICB9XG4gICAgLy8gdXBkYXRlIHRoZSBpbmRleGVkIGJhclxuICAgIGlmIChpbmNyZW1lbnRlciA+IDApIHtcbiAgICAgIGJhcnNbaW5kZXhdLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFyc1tpbmRleF0uaXNBY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuICAgIC8vIGluY3JlbWVudCBpbmRleFxuICAgIGluZGV4ICs9IGluY3JlbWVudGVyO1xuICAgIC8vIHVwZGF0ZSBzdGF0ZVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgYmFycyxcbiAgICAgIGluY3JlbWVudGVyLFxuICAgICAgaW5kZXgsXG4gICAgfSk7XG4gIH07XG4gIHN0b3BQcm9ncmVzc0JhciAoKSB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZUludGVydmFsKTtcbiAgfTtcbiAgcmVuZGVyICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAge3RoaXMuc3RhdGUuYmFycy5tYXAoKGJhciwgaW5kZXgpID0+IGJhci5pc0FjdGl2ZSA/IDxBY3RpdmVTdGF0dXNCYXIga2V5PXtpbmRleH0gLz4gOiA8SW5hY3RpdmVTdGF0dXNCYXIga2V5PXtpbmRleH0vPil9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59O1xuXG5Qcm9ncmVzc0Jhci5wcm9wVHlwZXMgPSB7XG4gIHNpemU6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb2dyZXNzQmFyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbXBvbmVudHMvUHJvZ3Jlc3NCYXIvaW5kZXguanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgTmF2QmFyIGZyb20gJ2NvbnRhaW5lcnMvTmF2QmFyJztcblxuY2xhc3MgRXJyb3JQYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7IGVycm9yIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2PlxuICAgICAgICA8TmF2QmFyIC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS1wYWRkZWQnPlxuICAgICAgICAgIDxwPntlcnJvcn08L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufTtcblxuRXJyb3JQYWdlLnByb3BUeXBlcyA9IHtcbiAgZXJyb3I6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVycm9yUGFnZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9wYWdlcy9FcnJvclBhZ2UvaW5kZXguanN4IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicGFzc3BvcnRcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJwYXNzcG9ydFwiXG4vLyBtb2R1bGUgaWQgPSAyMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwYXNzcG9ydC1sb2NhbFwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInBhc3Nwb3J0LWxvY2FsXCJcbi8vIG1vZHVsZSBpZCA9IDIzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInNlcXVlbGl6ZVwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInNlcXVlbGl6ZVwiXG4vLyBtb2R1bGUgaWQgPSAyNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmV0dXJuU2hvcnRJZDogZnVuY3Rpb24gKGNsYWltc0FycmF5LCBsb25nSWQpIHtcbiAgICBsZXQgY2xhaW1JbmRleDtcbiAgICBsZXQgc2hvcnRJZCA9IGxvbmdJZC5zdWJzdHJpbmcoMCwgMSk7IC8vIGRlZmF1bHQgc2hvcnQgaWQgaXMgdGhlIGZpcnN0IGxldHRlclxuICAgIGxldCBzaG9ydElkTGVuZ3RoID0gMDtcbiAgICAvLyBmaW5kIHRoZSBpbmRleCBvZiB0aGlzIGNsYWltIGlkXG4gICAgY2xhaW1JbmRleCA9IGNsYWltc0FycmF5LmZpbmRJbmRleChlbGVtZW50ID0+IHtcbiAgICAgIHJldHVybiBlbGVtZW50LmNsYWltSWQgPT09IGxvbmdJZDtcbiAgICB9KTtcbiAgICBpZiAoY2xhaW1JbmRleCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2xhaW0gaWQgbm90IGZvdW5kIGluIGNsYWltcyBsaXN0Jyk7XG4gICAgfVxuICAgIC8vIGdldCBhbiBhcnJheSBvZiBhbGwgY2xhaW1zIHdpdGggbG93ZXIgaGVpZ2h0XG4gICAgbGV0IHBvc3NpYmxlTWF0Y2hlcyA9IGNsYWltc0FycmF5LnNsaWNlKDAsIGNsYWltSW5kZXgpO1xuICAgIC8vIHJlbW92ZSBjZXJ0aWZpY2F0ZXMgd2l0aCB0aGUgc2FtZSBwcmVmaXhlcyB1bnRpbCBub25lIGFyZSBsZWZ0LlxuICAgIHdoaWxlIChwb3NzaWJsZU1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgc2hvcnRJZExlbmd0aCArPSAxO1xuICAgICAgc2hvcnRJZCA9IGxvbmdJZC5zdWJzdHJpbmcoMCwgc2hvcnRJZExlbmd0aCk7XG4gICAgICBwb3NzaWJsZU1hdGNoZXMgPSBwb3NzaWJsZU1hdGNoZXMuZmlsdGVyKGVsZW1lbnQgPT4ge1xuICAgICAgICByZXR1cm4gKGVsZW1lbnQuY2xhaW1JZCAmJiAoZWxlbWVudC5jbGFpbUlkLnN1YnN0cmluZygwLCBzaG9ydElkTGVuZ3RoKSA9PT0gc2hvcnRJZCkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzaG9ydElkO1xuICB9LFxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9oZWxwZXJzL3NlcXVlbGl6ZUhlbHBlcnMuanMiLCJjb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5cbmNvbnN0IHsgZGV0YWlscywgcHVibGlzaGluZyB9ID0gcmVxdWlyZSgnLi4vLi4vY29uZmlnL3NpdGVDb25maWcuanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBhcnNlUHVibGlzaEFwaVJlcXVlc3RCb2R5ICh7bmFtZSwgbnNmdywgbGljZW5zZSwgdGl0bGUsIGRlc2NyaXB0aW9uLCB0aHVtYm5haWx9KSB7XG4gICAgLy8gdmFsaWRhdGUgbmFtZVxuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBuYW1lIGZpZWxkIGZvdW5kIGluIHJlcXVlc3QnKTtcbiAgICB9XG4gICAgY29uc3QgaW52YWxpZE5hbWVDaGFyYWN0ZXJzID0gL1teQS1aYS16MC05LC1dLy5leGVjKG5hbWUpO1xuICAgIGlmIChpbnZhbGlkTmFtZUNoYXJhY3RlcnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGNsYWltIG5hbWUgeW91IHByb3ZpZGVkIGlzIG5vdCBhbGxvd2VkLiAgT25seSB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQ6IEEtWiwgYS16LCAwLTksIGFuZCBcIi1cIicpO1xuICAgIH1cbiAgICAvLyBvcHRpb25hbCBwYXJhbWV0ZXJzXG4gICAgbnNmdyA9IChuc2Z3ID09PSAndHJ1ZScpO1xuICAgIGxpY2Vuc2UgPSBsaWNlbnNlIHx8IG51bGw7XG4gICAgdGl0bGUgPSB0aXRsZSB8fCBudWxsO1xuICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gfHwgbnVsbDtcbiAgICB0aHVtYm5haWwgPSB0aHVtYm5haWwgfHwgbnVsbDtcbiAgICAvLyByZXR1cm4gcmVzdWx0c1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgbnNmdyxcbiAgICAgIGxpY2Vuc2UsXG4gICAgICB0aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgdGh1bWJuYWlsLFxuICAgIH07XG4gIH0sXG4gIHBhcnNlUHVibGlzaEFwaVJlcXVlc3RGaWxlcyAoe2ZpbGUsIHRodW1ibmFpbH0pIHtcbiAgICAvLyBtYWtlIHN1cmUgYSBmaWxlIHdhcyBwcm92aWRlZFxuICAgIGlmICghZmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBmaWxlIHdpdGgga2V5IG9mIFtmaWxlXSBmb3VuZCBpbiByZXF1ZXN0Jyk7XG4gICAgfVxuICAgIGlmICghZmlsZS5wYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGZpbGUgcGF0aCBmb3VuZCcpO1xuICAgIH1cbiAgICBpZiAoIWZpbGUudHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBmaWxlIHR5cGUgZm91bmQnKTtcbiAgICB9XG4gICAgaWYgKCFmaWxlLnNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbm8gZmlsZSB0eXBlIGZvdW5kJyk7XG4gICAgfVxuICAgIC8vIHZhbGlkYXRlIHRoZSBmaWxlIG5hbWVcbiAgICBpZiAoLycvLnRlc3QoZmlsZS5uYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhcG9zdHJvcGhlcyBhcmUgbm90IGFsbG93ZWQgaW4gdGhlIGZpbGUgbmFtZScpO1xuICAgIH1cbiAgICAvLyB2YWxpZGF0ZSB0aGUgZmlsZVxuICAgIG1vZHVsZS5leHBvcnRzLnZhbGlkYXRlRmlsZVR5cGVBbmRTaXplKGZpbGUpO1xuICAgIC8vIHJldHVybiByZXN1bHRzXG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGVOYW1lICAgICAgICAgOiBmaWxlLm5hbWUsXG4gICAgICBmaWxlUGF0aCAgICAgICAgIDogZmlsZS5wYXRoLFxuICAgICAgZmlsZVR5cGUgICAgICAgICA6IGZpbGUudHlwZSxcbiAgICAgIHRodW1ibmFpbEZpbGVOYW1lOiAodGh1bWJuYWlsID8gdGh1bWJuYWlsLm5hbWUgOiBudWxsKSxcbiAgICAgIHRodW1ibmFpbEZpbGVQYXRoOiAodGh1bWJuYWlsID8gdGh1bWJuYWlsLnBhdGggOiBudWxsKSxcbiAgICAgIHRodW1ibmFpbEZpbGVUeXBlOiAodGh1bWJuYWlsID8gdGh1bWJuYWlsLnR5cGUgOiBudWxsKSxcbiAgICB9O1xuICB9LFxuICB2YWxpZGF0ZUZpbGVUeXBlQW5kU2l6ZSAoZmlsZSkge1xuICAgIC8vIGNoZWNrIGZpbGUgdHlwZSBhbmQgc2l6ZVxuICAgIHN3aXRjaCAoZmlsZS50eXBlKSB7XG4gICAgICBjYXNlICdpbWFnZS9qcGVnJzpcbiAgICAgIGNhc2UgJ2ltYWdlL2pwZyc6XG4gICAgICBjYXNlICdpbWFnZS9wbmcnOlxuICAgICAgICBpZiAoZmlsZS5zaXplID4gMTAwMDAwMDApIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoJ3B1Ymxpc2ggPiBmaWxlIHZhbGlkYXRpb24gPiAuanBlZy8uanBnLy5wbmcgd2FzIHRvbyBiaWcnKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvcnJ5LCBpbWFnZXMgYXJlIGxpbWl0ZWQgdG8gMTAgbWVnYWJ5dGVzLicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW1hZ2UvZ2lmJzpcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IDUwMDAwMDAwKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKCdwdWJsaXNoID4gZmlsZSB2YWxpZGF0aW9uID4gLmdpZiB3YXMgdG9vIGJpZycpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU29ycnksIC5naWZzIGFyZSBsaW1pdGVkIHRvIDUwIG1lZ2FieXRlcy4nKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3ZpZGVvL21wNCc6XG4gICAgICAgIGlmIChmaWxlLnNpemUgPiA1MDAwMDAwMCkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygncHVibGlzaCA+IGZpbGUgdmFsaWRhdGlvbiA+IC5tcDQgd2FzIHRvbyBiaWcnKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvcnJ5LCB2aWRlb3MgYXJlIGxpbWl0ZWQgdG8gNTAgbWVnYWJ5dGVzLicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdwdWJsaXNoID4gZmlsZSB2YWxpZGF0aW9uID4gdW5yZWNvZ25pemVkIGZpbGUgdHlwZScpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSAnICsgZmlsZS50eXBlICsgJyBjb250ZW50IHR5cGUgaXMgbm90IHN1cHBvcnRlZC4gIE9ubHksIC5qcGVnLCAucG5nLCAuZ2lmLCBhbmQgLm1wNCBmaWxlcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbGU7XG4gIH0sXG4gIGNyZWF0ZUJhc2ljUHVibGlzaFBhcmFtcyAoZmlsZVBhdGgsIG5hbWUsIHRpdGxlLCBkZXNjcmlwdGlvbiwgbGljZW5zZSwgbnNmdywgdGh1bWJuYWlsKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBDcmVhdGluZyBQdWJsaXNoIFBhcmFtZXRlcnNgKTtcbiAgICAvLyBwcm92aWRlIGRlZmF1bHRzIGZvciB0aXRsZVxuICAgIGlmICh0aXRsZSA9PT0gbnVsbCB8fCB0aXRsZS50cmltKCkgPT09ICcnKSB7XG4gICAgICB0aXRsZSA9IG5hbWU7XG4gICAgfVxuICAgIC8vIHByb3ZpZGUgZGVmYXVsdCBmb3IgZGVzY3JpcHRpb25cbiAgICBpZiAoZGVzY3JpcHRpb24gPT09IG51bGwgfHwgZGVzY3JpcHRpb24udHJpbSgpID09PSAnJykge1xuICAgICAgZGVzY3JpcHRpb24gPSAnJztcbiAgICB9XG4gICAgLy8gcHJvdmlkZSBkZWZhdWx0IGZvciBsaWNlbnNlXG4gICAgaWYgKGxpY2Vuc2UgPT09IG51bGwgfHwgbGljZW5zZS50cmltKCkgPT09ICcnKSB7XG4gICAgICBsaWNlbnNlID0gJyAnOyAgLy8gZGVmYXVsdCB0byBlbXB0eSBzdHJpbmdcbiAgICB9XG4gICAgLy8gY3JlYXRlIHRoZSBwdWJsaXNoIHBhcmFtc1xuICAgIGNvbnN0IHB1Ymxpc2hQYXJhbXMgPSB7XG4gICAgICBuYW1lLFxuICAgICAgZmlsZV9wYXRoOiBmaWxlUGF0aCxcbiAgICAgIGJpZCAgICAgIDogMC4wMSxcbiAgICAgIG1ldGFkYXRhIDoge1xuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGF1dGhvciAgOiBkZXRhaWxzLnRpdGxlLFxuICAgICAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgbnNmdyxcbiAgICAgIH0sXG4gICAgICBjbGFpbV9hZGRyZXNzOiBwdWJsaXNoaW5nLnByaW1hcnlDbGFpbUFkZHJlc3MsXG4gICAgfTtcbiAgICAvLyBhZGQgdGh1bWJuYWlsIHRvIGNoYW5uZWwgaWYgdmlkZW9cbiAgICBpZiAodGh1bWJuYWlsKSB7XG4gICAgICBwdWJsaXNoUGFyYW1zWydtZXRhZGF0YSddWyd0aHVtYm5haWwnXSA9IHRodW1ibmFpbDtcbiAgICB9XG4gICAgcmV0dXJuIHB1Ymxpc2hQYXJhbXM7XG4gIH0sXG4gIGNyZWF0ZVRodW1ibmFpbFB1Ymxpc2hQYXJhbXMgKHRodW1ibmFpbEZpbGVQYXRoLCBjbGFpbU5hbWUsIGxpY2Vuc2UsIG5zZncpIHtcbiAgICBpZiAoIXRodW1ibmFpbEZpbGVQYXRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxvZ2dlci5kZWJ1ZyhgQ3JlYXRpbmcgVGh1bWJuYWlsIFB1Ymxpc2ggUGFyYW1ldGVyc2ApO1xuICAgIC8vIGNyZWF0ZSB0aGUgcHVibGlzaCBwYXJhbXNcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSAgICAgOiBgJHtjbGFpbU5hbWV9LXRodW1iYCxcbiAgICAgIGZpbGVfcGF0aDogdGh1bWJuYWlsRmlsZVBhdGgsXG4gICAgICBiaWQgICAgICA6IDAuMDEsXG4gICAgICBtZXRhZGF0YSA6IHtcbiAgICAgICAgdGl0bGUgICAgICA6IGAke2NsYWltTmFtZX0gdGh1bWJuYWlsYCxcbiAgICAgICAgZGVzY3JpcHRpb246IGBhIHRodW1ibmFpbCBmb3IgJHtjbGFpbU5hbWV9YCxcbiAgICAgICAgYXV0aG9yICAgICA6IGRldGFpbHMudGl0bGUsXG4gICAgICAgIGxhbmd1YWdlICAgOiAnZW4nLFxuICAgICAgICBsaWNlbnNlLFxuICAgICAgICBuc2Z3LFxuICAgICAgfSxcbiAgICAgIGNsYWltX2FkZHJlc3M6IHB1Ymxpc2hpbmcucHJpbWFyeUNsYWltQWRkcmVzcyxcbiAgICAgIGNoYW5uZWxfbmFtZSA6IHB1Ymxpc2hpbmcudGh1bWJuYWlsQ2hhbm5lbCxcbiAgICAgIGNoYW5uZWxfaWQgICA6IHB1Ymxpc2hpbmcudGh1bWJuYWlsQ2hhbm5lbElkLFxuICAgIH07XG4gIH0sXG4gIGRlbGV0ZVRlbXBvcmFyeUZpbGUgKGZpbGVQYXRoKSB7XG4gICAgZnMudW5saW5rKGZpbGVQYXRoLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYGVycm9yIGRlbGV0aW5nIHRlbXBvcmFyeSBmaWxlICR7ZmlsZVBhdGh9YCk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5kZWJ1Zyhgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQgJHtmaWxlUGF0aH1gKTtcbiAgICB9KTtcbiAgfSxcbiAgYWRkR2V0UmVzdWx0c1RvRmlsZURhdGEgKGZpbGVJbmZvLCBnZXRSZXN1bHQpIHtcbiAgICBmaWxlSW5mby5maWxlTmFtZSA9IGdldFJlc3VsdC5maWxlX25hbWU7XG4gICAgZmlsZUluZm8uZmlsZVBhdGggPSBnZXRSZXN1bHQuZG93bmxvYWRfcGF0aDtcbiAgICByZXR1cm4gZmlsZUluZm87XG4gIH0sXG4gIGNyZWF0ZUZpbGVEYXRhICh7IG5hbWUsIGNsYWltSWQsIG91dHBvaW50LCBoZWlnaHQsIGFkZHJlc3MsIG5zZncsIGNvbnRlbnRUeXBlIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIGNsYWltSWQsXG4gICAgICBvdXRwb2ludCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGFkZHJlc3MsXG4gICAgICBmaWxlTmFtZTogJycsXG4gICAgICBmaWxlUGF0aDogJycsXG4gICAgICBmaWxlVHlwZTogY29udGVudFR5cGUsXG4gICAgICBuc2Z3LFxuICAgIH07XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvcHVibGlzaEhlbHBlcnMuanMiLCJjb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBoYW5kbGVFcnJvclJlc3BvbnNlOiBmdW5jdGlvbiAob3JpZ2luYWxVcmwsIGlwLCBlcnJvciwgcmVzKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBFcnJvciBvbiAke29yaWdpbmFsVXJsfWAsIG1vZHVsZS5leHBvcnRzLnVzZU9iamVjdFByb3BlcnRpZXNJZk5vS2V5cyhlcnJvcikpO1xuICAgIGNvbnN0IFtzdGF0dXMsIG1lc3NhZ2VdID0gbW9kdWxlLmV4cG9ydHMucmV0dXJuRXJyb3JNZXNzYWdlQW5kU3RhdHVzKGVycm9yKTtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoc3RhdHVzKVxuICAgICAgLmpzb24obW9kdWxlLmV4cG9ydHMuY3JlYXRlRXJyb3JSZXNwb25zZVBheWxvYWQoc3RhdHVzLCBtZXNzYWdlKSk7XG4gIH0sXG4gIHJldHVybkVycm9yTWVzc2FnZUFuZFN0YXR1czogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgbGV0IHN0YXR1cywgbWVzc2FnZTtcbiAgICAvLyBjaGVjayBmb3IgZGFlbW9uIGJlaW5nIHR1cm5lZCBvZmZcbiAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VDT05OUkVGVVNFRCcpIHtcbiAgICAgIHN0YXR1cyA9IDUwMztcbiAgICAgIG1lc3NhZ2UgPSAnQ29ubmVjdGlvbiByZWZ1c2VkLiAgVGhlIGRhZW1vbiBtYXkgbm90IGJlIHJ1bm5pbmcuJztcbiAgICAgIC8vIGZhbGxiYWNrIGZvciBldmVyeXRoaW5nIGVsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdHVzID0gNDAwO1xuICAgICAgaWYgKGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXNzYWdlID0gZXJyb3I7XG4gICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFtzdGF0dXMsIG1lc3NhZ2VdO1xuICB9LFxuICB1c2VPYmplY3RQcm9wZXJ0aWVzSWZOb0tleXM6IGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZXJyKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGxldCBuZXdFcnJvck9iamVjdCA9IHt9O1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgbmV3RXJyb3JPYmplY3Rba2V5XSA9IGVycltrZXldO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3RXJyb3JPYmplY3Q7XG4gICAgfVxuICAgIHJldHVybiBlcnI7XG4gIH0sXG4gIGNyZWF0ZUVycm9yUmVzcG9uc2VQYXlsb2FkIChzdGF0dXMsIG1lc3NhZ2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzLFxuICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICBtZXNzYWdlLFxuICAgIH07XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvZXJyb3JIYW5kbGVycy5qcyIsImNvbnN0IGRiID0gcmVxdWlyZSgnLi4vbW9kZWxzL2luZGV4Jyk7XG5jb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5jb25zdCB7IHJldHVyblBhZ2luYXRlZENoYW5uZWxDbGFpbXMgfSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvY2hhbm5lbFBhZ2luYXRpb24uanMnKTtcblxuY29uc3QgTk9fQ0hBTk5FTCA9ICdOT19DSEFOTkVMJztcbmNvbnN0IE5PX0NMQUlNID0gJ05PX0NMQUlNJztcbmNvbnN0IE5PX0ZJTEUgPSAnTk9fRklMRSc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDbGFpbUlkIChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIG5hbWUsIGNsYWltSWQpIHtcbiAgICBpZiAoY2hhbm5lbE5hbWUpIHtcbiAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cy5nZXRDbGFpbUlkQnlDaGFubmVsKGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCwgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cy5nZXRDbGFpbUlkQnlDbGFpbShuYW1lLCBjbGFpbUlkKTtcbiAgICB9XG4gIH0sXG4gIGdldENsYWltSWRCeUNsYWltIChjbGFpbU5hbWUsIGNsYWltSWQpIHtcbiAgICBsb2dnZXIuZGVidWcoYGdldENsYWltSWRCeUNsYWltKCR7Y2xhaW1OYW1lfSwgJHtjbGFpbUlkfSlgKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZGIuQ2xhaW0uZ2V0TG9uZ0NsYWltSWQoY2xhaW1OYW1lLCBjbGFpbUlkKVxuICAgICAgICAudGhlbihsb25nQ2xhaW1JZCA9PiB7XG4gICAgICAgICAgaWYgKCFsb25nQ2xhaW1JZCkge1xuICAgICAgICAgICAgcmVzb2x2ZShOT19DTEFJTSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmUobG9uZ0NsYWltSWQpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxuICBnZXRDbGFpbUlkQnlDaGFubmVsIChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIGNsYWltTmFtZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgZ2V0Q2xhaW1JZEJ5Q2hhbm5lbCgke2NoYW5uZWxOYW1lfSwgJHtjaGFubmVsQ2xhaW1JZH0sICR7Y2xhaW1OYW1lfSlgKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZGIuQ2VydGlmaWNhdGUuZ2V0TG9uZ0NoYW5uZWxJZChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQpIC8vIDEuIGdldCB0aGUgbG9uZyBjaGFubmVsIGlkXG4gICAgICAgIC50aGVuKGxvbmdDaGFubmVsSWQgPT4ge1xuICAgICAgICAgIGlmICghbG9uZ0NoYW5uZWxJZCkge1xuICAgICAgICAgICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtsb25nQ2hhbm5lbElkLCBkYi5DbGFpbS5nZXRDbGFpbUlkQnlMb25nQ2hhbm5lbElkKGxvbmdDaGFubmVsSWQsIGNsYWltTmFtZSldKTsgIC8vIDIuIGdldCB0aGUgbG9uZyBjbGFpbSBpZFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigoW2xvbmdDaGFubmVsSWQsIGxvbmdDbGFpbUlkXSkgPT4ge1xuICAgICAgICAgIGlmICghbG9uZ0NoYW5uZWxJZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoTk9fQ0hBTk5FTCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghbG9uZ0NsYWltSWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKE5PX0NMQUlNKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZShsb25nQ2xhaW1JZCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG4gIGdldENoYW5uZWxEYXRhIChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIHBhZ2UpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gMS4gZ2V0IHRoZSBsb25nIGNoYW5uZWwgSWQgKG1ha2Ugc3VyZSBjaGFubmVsIGV4aXN0cylcbiAgICAgIGRiLkNlcnRpZmljYXRlLmdldExvbmdDaGFubmVsSWQoY2hhbm5lbE5hbWUsIGNoYW5uZWxDbGFpbUlkKVxuICAgICAgICAudGhlbihsb25nQ2hhbm5lbENsYWltSWQgPT4ge1xuICAgICAgICAgIGlmICghbG9uZ0NoYW5uZWxDbGFpbUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gW251bGwsIG51bGwsIG51bGxdO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyAyLiBnZXQgdGhlIHNob3J0IElEIGFuZCBhbGwgY2xhaW1zIGZvciB0aGF0IGNoYW5uZWxcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW2xvbmdDaGFubmVsQ2xhaW1JZCwgZGIuQ2VydGlmaWNhdGUuZ2V0U2hvcnRDaGFubmVsSWRGcm9tTG9uZ0NoYW5uZWxJZChsb25nQ2hhbm5lbENsYWltSWQsIGNoYW5uZWxOYW1lKV0pO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoW2xvbmdDaGFubmVsQ2xhaW1JZCwgc2hvcnRDaGFubmVsQ2xhaW1JZF0pID0+IHtcbiAgICAgICAgICBpZiAoIWxvbmdDaGFubmVsQ2xhaW1JZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoTk9fQ0hBTk5FTCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIDMuIHJldHVybiBhbGwgdGhlIGNoYW5uZWwgaW5mb3JtYXRpb25cbiAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lLFxuICAgICAgICAgICAgbG9uZ0NoYW5uZWxDbGFpbUlkLFxuICAgICAgICAgICAgc2hvcnRDaGFubmVsQ2xhaW1JZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSxcbiAgZ2V0Q2hhbm5lbENsYWltcyAoY2hhbm5lbE5hbWUsIGNoYW5uZWxDbGFpbUlkLCBwYWdlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIDEuIGdldCB0aGUgbG9uZyBjaGFubmVsIElkIChtYWtlIHN1cmUgY2hhbm5lbCBleGlzdHMpXG4gICAgICBkYi5DZXJ0aWZpY2F0ZS5nZXRMb25nQ2hhbm5lbElkKGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZClcbiAgICAgICAgLnRoZW4obG9uZ0NoYW5uZWxDbGFpbUlkID0+IHtcbiAgICAgICAgICBpZiAoIWxvbmdDaGFubmVsQ2xhaW1JZCkge1xuICAgICAgICAgICAgcmV0dXJuIFtudWxsLCBudWxsLCBudWxsXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gMi4gZ2V0IHRoZSBzaG9ydCBJRCBhbmQgYWxsIGNsYWltcyBmb3IgdGhhdCBjaGFubmVsXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtsb25nQ2hhbm5lbENsYWltSWQsIGRiLkNsYWltLmdldEFsbENoYW5uZWxDbGFpbXMobG9uZ0NoYW5uZWxDbGFpbUlkKV0pO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoW2xvbmdDaGFubmVsQ2xhaW1JZCwgY2hhbm5lbENsYWltc0FycmF5XSkgPT4ge1xuICAgICAgICAgIGlmICghbG9uZ0NoYW5uZWxDbGFpbUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShOT19DSEFOTkVMKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gMy4gZm9ybWF0IHRoZSBkYXRhIGZvciB0aGUgdmlldywgaW5jbHVkaW5nIHBhZ2luYXRpb25cbiAgICAgICAgICBsZXQgcGFnaW5hdGVkQ2hhbm5lbFZpZXdEYXRhID0gcmV0dXJuUGFnaW5hdGVkQ2hhbm5lbENsYWltcyhjaGFubmVsTmFtZSwgbG9uZ0NoYW5uZWxDbGFpbUlkLCBjaGFubmVsQ2xhaW1zQXJyYXksIHBhZ2UpO1xuICAgICAgICAgIC8vIDQuIHJldHVybiBhbGwgdGhlIGNoYW5uZWwgaW5mb3JtYXRpb24gYW5kIGNvbnRlbnRzXG4gICAgICAgICAgcmVzb2x2ZShwYWdpbmF0ZWRDaGFubmVsVmlld0RhdGEpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxuICBnZXRMb2NhbEZpbGVSZWNvcmQgKGNsYWltSWQsIG5hbWUpIHtcbiAgICByZXR1cm4gZGIuRmlsZS5maW5kT25lKHt3aGVyZToge2NsYWltSWQsIG5hbWV9fSlcbiAgICAgIC50aGVuKGZpbGUgPT4ge1xuICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICByZXR1cm4gTk9fRklMRTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsZS5kYXRhVmFsdWVzO1xuICAgICAgfSk7XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2NvbnRyb2xsZXJzL3NlcnZlQ29udHJvbGxlci5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXJUb1N0cmluZyB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuaW1wb3J0IHsgY3JlYXRlU3RvcmUgfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgUmVkdWNlciBmcm9tICcuLi8uLi9jbGllbnQvcmVkdWNlcnMvaW5kZXgnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBTdGF0aWNSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCBHQUxpc3RlbmVyIGZyb20gJy4uLy4uL2NsaWVudC9jb21wb25lbnRzL0dBTGlzdGVuZXIvaW5kZXgnO1xuaW1wb3J0IEFwcCBmcm9tICcuLi8uLi9jbGllbnQvYXBwJztcbmltcG9ydCByZW5kZXJGdWxsUGFnZSBmcm9tICcuL3JlbmRlckZ1bGxQYWdlLmpzJztcbmltcG9ydCBIZWxtZXQgZnJvbSAncmVhY3QtaGVsbWV0JztcblxubW9kdWxlLmV4cG9ydHMgPSAocmVxLCByZXMpID0+IHtcbiAgbGV0IGNvbnRleHQgPSB7fTtcblxuICAvLyBjcmVhdGUgYSBuZXcgUmVkdXggc3RvcmUgaW5zdGFuY2VcbiAgY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZShSZWR1Y2VyKTtcblxuICAvLyByZW5kZXIgY29tcG9uZW50IHRvIGEgc3RyaW5nXG4gIGNvbnN0IGh0bWwgPSByZW5kZXJUb1N0cmluZyhcbiAgICA8UHJvdmlkZXIgc3RvcmU9e3N0b3JlfT5cbiAgICAgIDxTdGF0aWNSb3V0ZXIgbG9jYXRpb249e3JlcS51cmx9IGNvbnRleHQ9e2NvbnRleHR9PlxuICAgICAgICA8R0FMaXN0ZW5lcj5cbiAgICAgICAgICA8QXBwIC8+XG4gICAgICAgIDwvR0FMaXN0ZW5lcj5cbiAgICAgIDwvU3RhdGljUm91dGVyPlxuICAgIDwvUHJvdmlkZXI+XG4gICk7XG5cbiAgLy8gZ2V0IGhlYWQgdGFncyBmcm9tIGhlbG1ldFxuICBjb25zdCBoZWxtZXQgPSBIZWxtZXQucmVuZGVyU3RhdGljKCk7XG5cbiAgLy8gY2hlY2sgZm9yIGEgcmVkaXJlY3RcbiAgaWYgKGNvbnRleHQudXJsKSB7XG4gICAgLy8gU29tZXdoZXJlIGEgYDxSZWRpcmVjdD5gIHdhcyByZW5kZXJlZFxuICAgIHJldHVybiByZXMucmVkaXJlY3QoMzAxLCBjb250ZXh0LnVybCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gd2UncmUgZ29vZCwgc2VuZCB0aGUgcmVzcG9uc2VcbiAgfVxuXG4gIC8vIGdldCB0aGUgaW5pdGlhbCBzdGF0ZSBmcm9tIG91ciBSZWR1eCBzdG9yZVxuICBjb25zdCBwcmVsb2FkZWRTdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG5cbiAgLy8gc2VuZCB0aGUgcmVuZGVyZWQgcGFnZSBiYWNrIHRvIHRoZSBjbGllbnRcbiAgcmVzLnNlbmQocmVuZGVyRnVsbFBhZ2UoaGVsbWV0LCBodG1sLCBwcmVsb2FkZWRTdGF0ZSkpO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9oZWxwZXJzL2hhbmRsZVBhZ2VSZW5kZXIuanN4IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG9tL3NlcnZlclwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInJlYWN0LWRvbS9zZXJ2ZXJcIlxuLy8gbW9kdWxlIGlkID0gMzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IHsgY29tYmluZVJlZHVjZXJzIH0gZnJvbSAncmVkdXgnO1xuaW1wb3J0IFB1Ymxpc2hSZWR1Y2VyIGZyb20gJ3JlZHVjZXJzL3B1Ymxpc2gnO1xuaW1wb3J0IENoYW5uZWxSZWR1Y2VyIGZyb20gJ3JlZHVjZXJzL2NoYW5uZWwnO1xuaW1wb3J0IFNob3dSZWR1Y2VyIGZyb20gJ3JlZHVjZXJzL3Nob3cnO1xuaW1wb3J0IFNpdGVSZWR1Y2VyIGZyb20gJ3JlZHVjZXJzL3NpdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjb21iaW5lUmVkdWNlcnMoe1xuICBjaGFubmVsOiBDaGFubmVsUmVkdWNlcixcbiAgcHVibGlzaDogUHVibGlzaFJlZHVjZXIsXG4gIHNob3cgICA6IFNob3dSZWR1Y2VyLFxuICBzaXRlICAgOiBTaXRlUmVkdWNlcixcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3JlZHVjZXJzL2luZGV4LmpzIiwiZXhwb3J0IGNvbnN0IEZJTEVfU0VMRUNURUQgPSAnRklMRV9TRUxFQ1RFRCc7XG5leHBvcnQgY29uc3QgRklMRV9DTEVBUiA9ICdGSUxFX0NMRUFSJztcbmV4cG9ydCBjb25zdCBNRVRBREFUQV9VUERBVEUgPSAnTUVUQURBVEFfVVBEQVRFJztcbmV4cG9ydCBjb25zdCBDTEFJTV9VUERBVEUgPSAnQ0xBSU1fVVBEQVRFJztcbmV4cG9ydCBjb25zdCBTRVRfUFVCTElTSF9JTl9DSEFOTkVMID0gJ1NFVF9QVUJMSVNIX0lOX0NIQU5ORUwnO1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hfU1RBVFVTX1VQREFURSA9ICdQVUJMSVNIX1NUQVRVU19VUERBVEUnO1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VQREFURSA9ICdFUlJPUl9VUERBVEUnO1xuZXhwb3J0IGNvbnN0IFNFTEVDVEVEX0NIQU5ORUxfVVBEQVRFID0gJ1NFTEVDVEVEX0NIQU5ORUxfVVBEQVRFJztcbmV4cG9ydCBjb25zdCBUT0dHTEVfTUVUQURBVEFfSU5QVVRTID0gJ1RPR0dMRV9NRVRBREFUQV9JTlBVVFMnO1xuZXhwb3J0IGNvbnN0IFRIVU1CTkFJTF9ORVcgPSAnVEhVTUJOQUlMX05FVyc7XG5leHBvcnQgY29uc3QgUFVCTElTSF9TVEFSVCA9ICdQVUJMSVNIX1NUQVJUJztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb25zdGFudHMvcHVibGlzaF9hY3Rpb25fdHlwZXMuanMiLCJleHBvcnQgY29uc3QgTE9HSU4gPSAnRXhpc3RpbmcnO1xuZXhwb3J0IGNvbnN0IENSRUFURSA9ICdOZXcnO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnN0YW50cy9wdWJsaXNoX2NoYW5uZWxfc2VsZWN0X3N0YXRlcy5qcyIsImV4cG9ydCBjb25zdCBDSEFOTkVMX1VQREFURSA9ICdDSEFOTkVMX1VQREFURSc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29uc3RhbnRzL2NoYW5uZWxfYWN0aW9uX3R5cGVzLmpzIiwiZXhwb3J0IGNvbnN0IExPQ0FMX0NIRUNLID0gJ0xPQ0FMX0NIRUNLJztcbmV4cG9ydCBjb25zdCBVTkFWQUlMQUJMRSA9ICdVTkFWQUlMQUJMRSc7XG5leHBvcnQgY29uc3QgRVJST1IgPSAnRVJST1InO1xuZXhwb3J0IGNvbnN0IEFWQUlMQUJMRSA9ICdBVkFJTEFCTEUnO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnN0YW50cy9hc3NldF9kaXNwbGF5X3N0YXRlcy5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgR29vZ2xlQW5hbHl0aWNzIGZyb20gJ3JlYWN0LWdhJztcbmltcG9ydCB7IHdpdGhSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmNvbnN0IHsgYW5hbHl0aWNzOiB7IGdvb2dsZUlkIH0gfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbmZpZy9zaXRlQ29uZmlnLmpzJyk7XG5cbkdvb2dsZUFuYWx5dGljcy5pbml0aWFsaXplKGdvb2dsZUlkKTtcblxuY2xhc3MgR0FMaXN0ZW5lciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICB0aGlzLnNlbmRQYWdlVmlldyh0aGlzLnByb3BzLmhpc3RvcnkubG9jYXRpb24pO1xuICAgIHRoaXMucHJvcHMuaGlzdG9yeS5saXN0ZW4odGhpcy5zZW5kUGFnZVZpZXcpO1xuICB9XG5cbiAgc2VuZFBhZ2VWaWV3IChsb2NhdGlvbikge1xuICAgIEdvb2dsZUFuYWx5dGljcy5zZXQoeyBwYWdlOiBsb2NhdGlvbi5wYXRobmFtZSB9KTtcbiAgICBHb29nbGVBbmFseXRpY3MucGFnZXZpZXcobG9jYXRpb24ucGF0aG5hbWUpO1xuICB9XG5cbiAgcmVuZGVyICgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKEdBTGlzdGVuZXIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbXBvbmVudHMvR0FMaXN0ZW5lci9pbmRleC5qc3giLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUm91dGUsIFN3aXRjaCB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IEhvbWVQYWdlIGZyb20gJ3BhZ2VzL0hvbWVQYWdlJzsgLy8gb3IgdXNlIHRoZSBwcm92aWRlZCBsb2NhbCBob21lcGFnZVxuaW1wb3J0IEFib3V0UGFnZSBmcm9tICdwYWdlcy9BYm91dFBhZ2UnO1xuaW1wb3J0IExvZ2luUGFnZSBmcm9tICdwYWdlcy9Mb2dpblBhZ2UnO1xuaW1wb3J0IFNob3dQYWdlIGZyb20gJ3BhZ2VzL1Nob3dQYWdlJztcbmltcG9ydCBGb3VyT2hGb3VyUGFnZSBmcm9tICdjb250YWluZXJzL0ZvdXJPaEZvdXJQYWdlJztcblxuY29uc3QgQXBwID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxTd2l0Y2g+XG4gICAgICA8Um91dGUgZXhhY3QgcGF0aD0nLycgY29tcG9uZW50PXtIb21lUGFnZX0gLz5cbiAgICAgIDxSb3V0ZSBleGFjdCBwYXRoPScvYWJvdXQnIGNvbXBvbmVudD17QWJvdXRQYWdlfSAvPlxuICAgICAgPFJvdXRlIGV4YWN0IHBhdGg9Jy9sb2dpbicgY29tcG9uZW50PXtMb2dpblBhZ2V9IC8+XG4gICAgICA8Um91dGUgZXhhY3QgcGF0aD0nLzppZGVudGlmaWVyLzpjbGFpbScgY29tcG9uZW50PXtTaG93UGFnZX0gLz5cbiAgICAgIDxSb3V0ZSBleGFjdCBwYXRoPScvOmNsYWltJyBjb21wb25lbnQ9e1Nob3dQYWdlfSAvPlxuICAgICAgPFJvdXRlIGNvbXBvbmVudD17Rm91ck9oRm91clBhZ2V9IC8+XG4gICAgPC9Td2l0Y2g+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBcHA7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvYXBwLmpzeCIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBzZWxlY3RGaWxlLCB1cGRhdGVFcnJvciwgY2xlYXJGaWxlIH0gZnJvbSAnYWN0aW9ucy9wdWJsaXNoJztcbmltcG9ydCBWaWV3IGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9ICh7IHB1Ymxpc2ggfSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZpbGUgICAgIDogcHVibGlzaC5maWxlLFxuICAgIHRodW1ibmFpbDogcHVibGlzaC50aHVtYm5haWwsXG4gICAgZmlsZUVycm9yOiBwdWJsaXNoLmVycm9yLmZpbGUsXG4gIH07XG59O1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSBkaXNwYXRjaCA9PiB7XG4gIHJldHVybiB7XG4gICAgc2VsZWN0RmlsZTogKGZpbGUpID0+IHtcbiAgICAgIGRpc3BhdGNoKHNlbGVjdEZpbGUoZmlsZSkpO1xuICAgIH0sXG4gICAgc2V0RmlsZUVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGRpc3BhdGNoKGNsZWFyRmlsZSgpKTtcbiAgICAgIGRpc3BhdGNoKHVwZGF0ZUVycm9yKCdmaWxlJywgdmFsdWUpKTtcbiAgICB9LFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcykoVmlldyk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9Ecm9wem9uZS9pbmRleC5qcyIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyB1cGRhdGVMb2dnZWRJbkNoYW5uZWwgfSBmcm9tICdhY3Rpb25zL2NoYW5uZWwnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcbmltcG9ydCB7dXBkYXRlU2VsZWN0ZWRDaGFubmVsfSBmcm9tICcuLi8uLi9hY3Rpb25zL3B1Ymxpc2gnO1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSBkaXNwYXRjaCA9PiB7XG4gIHJldHVybiB7XG4gICAgb25DaGFubmVsTG9naW46IChuYW1lLCBzaG9ydElkLCBsb25nSWQpID0+IHtcbiAgICAgIGRpc3BhdGNoKHVwZGF0ZUxvZ2dlZEluQ2hhbm5lbChuYW1lLCBzaG9ydElkLCBsb25nSWQpKTtcbiAgICAgIGRpc3BhdGNoKHVwZGF0ZVNlbGVjdGVkQ2hhbm5lbChuYW1lKSk7XG4gICAgfSxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobnVsbCwgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxMb2dpbkZvcm0vaW5kZXguanMiLCJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgdXBkYXRlTG9nZ2VkSW5DaGFubmVsIH0gZnJvbSAnYWN0aW9ucy9jaGFubmVsJztcbmltcG9ydCBWaWV3IGZyb20gJy4vdmlldyc7XG5pbXBvcnQge3VwZGF0ZVNlbGVjdGVkQ2hhbm5lbH0gZnJvbSAnYWN0aW9ucy9wdWJsaXNoJztcblxuY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gZGlzcGF0Y2ggPT4ge1xuICByZXR1cm4ge1xuICAgIG9uQ2hhbm5lbExvZ2luOiAobmFtZSwgc2hvcnRJZCwgbG9uZ0lkKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVMb2dnZWRJbkNoYW5uZWwobmFtZSwgc2hvcnRJZCwgbG9uZ0lkKSk7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVTZWxlY3RlZENoYW5uZWwobmFtZSkpO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG51bGwsIG1hcERpc3BhdGNoVG9Qcm9wcykoVmlldyk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9DaGFubmVsQ3JlYXRlRm9ybS9pbmRleC5qcyIsImV4cG9ydCBjb25zdCBDSEFOTkVMID0gJ0NIQU5ORUwnO1xuZXhwb3J0IGNvbnN0IEFTU0VUX0xJVEUgPSAnQVNTRVRfTElURSc7XG5leHBvcnQgY29uc3QgQVNTRVRfREVUQUlMUyA9ICdBU1NFVF9ERVRBSUxTJztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb25zdGFudHMvc2hvd19yZXF1ZXN0X3R5cGVzLmpzIiwiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBWaWV3IGZyb20gJy4vdmlldyc7XG5pbXBvcnQgeyBmaWxlUmVxdWVzdGVkIH0gZnJvbSAnYWN0aW9ucy9zaG93JztcbmltcG9ydCB7IHNlbGVjdEFzc2V0IH0gZnJvbSAnc2VsZWN0b3JzL3Nob3cnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBzaG93IH0pID0+IHtcbiAgLy8gc2VsZWN0IGVycm9yIGFuZCBzdGF0dXNcbiAgY29uc3QgZXJyb3IgID0gc2hvdy5kaXNwbGF5QXNzZXQuZXJyb3I7XG4gIGNvbnN0IHN0YXR1cyA9IHNob3cuZGlzcGxheUFzc2V0LnN0YXR1cztcbiAgLy8gc2VsZWN0IGFzc2V0XG4gIGNvbnN0IGFzc2V0ID0gc2VsZWN0QXNzZXQoc2hvdyk7XG4gIC8vICByZXR1cm4gcHJvcHNcbiAgcmV0dXJuIHtcbiAgICBlcnJvcixcbiAgICBzdGF0dXMsXG4gICAgYXNzZXQsXG4gIH07XG59O1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSBkaXNwYXRjaCA9PiB7XG4gIHJldHVybiB7XG4gICAgb25GaWxlUmVxdWVzdDogKG5hbWUsIGNsYWltSWQpID0+IHtcbiAgICAgIGRpc3BhdGNoKGZpbGVSZXF1ZXN0ZWQobmFtZSwgY2xhaW1JZCkpO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0Fzc2V0RGlzcGxheS9pbmRleC5qcyIsIm1vZHVsZS5leHBvcnRzID0gKGhlbG1ldCwgaHRtbCwgcHJlbG9hZGVkU3RhdGUpID0+IHtcbiAgLy8gdGFrZSB0aGUgaHRtbCBhbmQgcHJlbG9hZGVkU3RhdGUgYW5kIHJldHVybiB0aGUgZnVsbCBwYWdlXG4gIHJldHVybiBgXG4gICAgPCFET0NUWVBFIGh0bWw+XG4gICAgPGh0bWwgbGFuZz1cImVuXCIgcHJlZml4PVwib2c6IGh0dHA6Ly9vZ3AubWUvbnMjIGZiOiBodHRwOi8vb2dwLm1lL25zL2ZiI1wiPlxuICAgICAgICA8aGVhZD5cbiAgICAgICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICAgICAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MSwgdXNlci1zY2FsYWJsZT1ub1wiPlxuICAgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj1cIlgtVUEtQ29tcGF0aWJsZVwiIGNvbnRlbnQ9XCJpZT1lZGdlXCI+XG4gICAgICAgICAgICA8IS0taGVsbWV0LS0+XG4gICAgICAgICAgICAke2hlbG1ldC50aXRsZS50b1N0cmluZygpfVxuICAgICAgICAgICAgJHtoZWxtZXQubWV0YS50b1N0cmluZygpfVxuICAgICAgICAgICAgJHtoZWxtZXQubGluay50b1N0cmluZygpfVxuICAgICAgICAgICAgPCEtLXN0eWxlIHNoZWV0cy0tPlxuICAgICAgICAgICAgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIvYXNzZXRzL2Nzcy9yZXNldC5jc3NcIiB0eXBlPVwidGV4dC9jc3NcIj5cbiAgICAgICAgICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiL2Fzc2V0cy9jc3MvZ2VuZXJhbC5jc3NcIiB0eXBlPVwidGV4dC9jc3NcIj5cbiAgICAgICAgICAgIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiL2Fzc2V0cy9jc3MvbWVkaWFRdWVyaWVzLmNzc1wiIHR5cGU9XCJ0ZXh0L2Nzc1wiPlxuICAgICAgICAgICAgPCEtLWdvb2dsZSBmb250LS0+XG4gICAgICAgICAgICA8bGluayBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PVJvYm90bzozMDBcIiByZWw9XCJzdHlsZXNoZWV0XCI+XG4gICAgICAgIDwvaGVhZD5cbiAgICAgICAgPGJvZHkgaWQ9XCJtYWluLWJvZHlcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcm93LS10YWxsIGZsZXgtY29udGFpbmVyLS1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicmVhY3QtYXBwXCIgY2xhc3M9XCJyb3cgcm93LS10YWxsIGZsZXgtY29udGFpbmVyLS1jb2x1bW5cIj4ke2h0bWx9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgd2luZG93Ll9fUFJFTE9BREVEX1NUQVRFX18gPSAke0pTT04uc3RyaW5naWZ5KHByZWxvYWRlZFN0YXRlKS5yZXBsYWNlKC88L2csICdcXFxcXFx1MDAzYycpfVxuICAgICAgICAgICAgPC9zY3JpcHQ+XG4gICAgICAgICAgICA8c2NyaXB0IHNyYz1cIi9idW5kbGUvYnVuZGxlLmpzXCI+PC9zY3JpcHQ+XG4gICAgICAgIDwvYm9keT5cbiAgICA8L2h0bWw+XG4gIGA7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvcmVuZGVyRnVsbFBhZ2UuanMiLCJleHBvcnQgY29uc3Qgc2VsZWN0U2l0ZVN0YXRlID0gKHN0YXRlKSA9PiB7XG4gIHJldHVybiBzdGF0ZS5zaXRlO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFNpdGVIb3N0ID0gKHN0YXRlKSA9PiB7XG4gIHJldHVybiBzdGF0ZS5zaXRlLmhvc3Q7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3NlbGVjdG9ycy9zaXRlLmpzIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYmFiZWwtcG9seWZpbGxcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJiYWJlbC1wb2x5ZmlsbFwiXG4vLyBtb2R1bGUgaWQgPSA0NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ3aGF0d2ctZmV0Y2hcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJ3aGF0d2ctZmV0Y2hcIlxuLy8gbW9kdWxlIGlkID0gNDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gYXBwIGRlcGVuZGVuY2llc1xuY29uc3QgZXhwcmVzcyA9IHJlcXVpcmUoJ2V4cHJlc3MnKTtcbmNvbnN0IGJvZHlQYXJzZXIgPSByZXF1aXJlKCdib2R5LXBhcnNlcicpO1xuY29uc3QgZXhwcmVzc0hhbmRsZWJhcnMgPSByZXF1aXJlKCdleHByZXNzLWhhbmRsZWJhcnMnKTtcbmNvbnN0IEhhbmRsZWJhcnMgPSByZXF1aXJlKCdoYW5kbGViYXJzJyk7XG5jb25zdCBoZWxtZXQgPSByZXF1aXJlKCdoZWxtZXQnKTtcbmNvbnN0IHBhc3Nwb3J0ID0gcmVxdWlyZSgncGFzc3BvcnQnKTtcbmNvbnN0IHsgc2VyaWFsaXplU3BlZWNoVXNlciwgZGVzZXJpYWxpemVTcGVlY2hVc2VyIH0gPSByZXF1aXJlKCcuL2hlbHBlcnMvYXV0aEhlbHBlcnMuanMnKTtcbmNvbnN0IGNvb2tpZVNlc3Npb24gPSByZXF1aXJlKCdjb29raWUtc2Vzc2lvbicpO1xuY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbi8vIGxvZ2dpbmcgZGVwZW5kZW5jaWVzXG5jb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG4vLyBjb25maWd1cmUgbG9nZ2VyXG5yZXF1aXJlKCcuL2hlbHBlcnMvY29uZmlndXJlTG9nZ2VyLmpzJykobG9nZ2VyKTtcbnJlcXVpcmUoJy4vaGVscGVycy9jb25maWd1cmVTbGFjay5qcycpKGxvZ2dlcik7XG5cbmNvbnN0IHthdXRoOiB7IHNlc3Npb25LZXkgfSwgZGV0YWlsczogeyBwb3J0OiBQT1JUIH19ID0gcmVxdWlyZSgnLi4vY29uZmlnL3NpdGVDb25maWcuanMnKTtcblxuLy8gY3JlYXRlIGFuIEV4cHJlc3MgYXBwbGljYXRpb25cbmNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcblxuLy8gdHJ1c3QgdGhlIHByb3h5IHRvIGdldCBpcCBhZGRyZXNzIGZvciB1c1xuYXBwLmVuYWJsZSgndHJ1c3QgcHJveHknKTtcblxuLy8gYWRkIG1pZGRsZXdhcmVcbmFwcC51c2UoaGVsbWV0KCkpOyAvLyBzZXQgSFRUUCBoZWFkZXJzIHRvIHByb3RlY3QgYWdhaW5zdCB3ZWxsLWtub3duIHdlYiB2dWxuZXJhYmlsdGllc1xuYXBwLnVzZShleHByZXNzLnN0YXRpYyhgJHtfX2Rpcm5hbWV9L3B1YmxpY2ApKTsgLy8gJ2V4cHJlc3Muc3RhdGljJyB0byBzZXJ2ZSBzdGF0aWMgZmlsZXMgZnJvbSBwdWJsaWMgZGlyZWN0b3J5XG5hcHAudXNlKGJvZHlQYXJzZXIuanNvbigpKTsgLy8gJ2JvZHkgcGFyc2VyJyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi9qc29uXG5hcHAudXNlKGJvZHlQYXJzZXIudXJsZW5jb2RlZCh7IGV4dGVuZGVkOiB0cnVlIH0pKTsgLy8gJ2JvZHkgcGFyc2VyJyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcbmFwcC51c2UoKHJlcSwgcmVzLCBuZXh0KSA9PiB7ICAvLyBjdXN0b20gbG9nZ2luZyBtaWRkbGV3YXJlIHRvIGxvZyBhbGwgaW5jb21pbmcgaHR0cCByZXF1ZXN0c1xuICBsb2dnZXIudmVyYm9zZShgUmVxdWVzdCBvbiAke3JlcS5vcmlnaW5hbFVybH0gZnJvbSAke3JlcS5pcH1gKTtcbiAgbmV4dCgpO1xufSk7XG5cbi8vIGNvbmZpZ3VyZSBwYXNzcG9ydFxucGFzc3BvcnQuc2VyaWFsaXplVXNlcihzZXJpYWxpemVTcGVlY2hVc2VyKTtcbnBhc3Nwb3J0LmRlc2VyaWFsaXplVXNlcihkZXNlcmlhbGl6ZVNwZWVjaFVzZXIpO1xuY29uc3QgbG9jYWxTaWdudXBTdHJhdGVneSA9IHJlcXVpcmUoJy4vcGFzc3BvcnQvbG9jYWwtc2lnbnVwLmpzJyk7XG5jb25zdCBsb2NhbExvZ2luU3RyYXRlZ3kgPSByZXF1aXJlKCcuL3Bhc3Nwb3J0L2xvY2FsLWxvZ2luLmpzJyk7XG5wYXNzcG9ydC51c2UoJ2xvY2FsLXNpZ251cCcsIGxvY2FsU2lnbnVwU3RyYXRlZ3kpO1xucGFzc3BvcnQudXNlKCdsb2NhbC1sb2dpbicsIGxvY2FsTG9naW5TdHJhdGVneSk7XG4vLyBpbml0aWFsaXplIHBhc3Nwb3J0XG5hcHAudXNlKGNvb2tpZVNlc3Npb24oe1xuICBuYW1lICA6ICdzZXNzaW9uJyxcbiAga2V5cyAgOiBbc2Vzc2lvbktleV0sXG4gIG1heEFnZTogMjQgKiA2MCAqIDYwICogMTAwMCwgLy8gaS5lLiAyNCBob3Vyc1xufSkpO1xuYXBwLnVzZShwYXNzcG9ydC5pbml0aWFsaXplKCkpO1xuYXBwLnVzZShwYXNzcG9ydC5zZXNzaW9uKCkpO1xuXG4vLyBjb25maWd1cmUgaGFuZGxlYmFycyAmIHJlZ2lzdGVyIGl0IHdpdGggZXhwcmVzcyBhcHBcbmNvbnN0IGhicyA9IGV4cHJlc3NIYW5kbGViYXJzLmNyZWF0ZSh7XG4gIGRlZmF1bHRMYXlvdXQ6ICdlbWJlZCcsXG4gIGhhbmRsZWJhcnMgICA6IEhhbmRsZWJhcnMsXG59KTtcbmFwcC5lbmdpbmUoJ2hhbmRsZWJhcnMnLCBoYnMuZW5naW5lKTtcbmFwcC5zZXQoJ3ZpZXcgZW5naW5lJywgJ2hhbmRsZWJhcnMnKTtcblxuLy8gc2V0IHRoZSByb3V0ZXMgb24gdGhlIGFwcFxucmVxdWlyZSgnLi9yb3V0ZXMvYXV0aC1yb3V0ZXMuanMnKShhcHApO1xucmVxdWlyZSgnLi9yb3V0ZXMvYXBpLXJvdXRlcy5qcycpKGFwcCk7XG5yZXF1aXJlKCcuL3JvdXRlcy9wYWdlLXJvdXRlcy5qcycpKGFwcCk7XG5yZXF1aXJlKCcuL3JvdXRlcy9hc3NldC1yb3V0ZXMuanMnKShhcHApO1xucmVxdWlyZSgnLi9yb3V0ZXMvZmFsbGJhY2stcm91dGVzLmpzJykoYXBwKTtcblxuLy8gY3JlYXRlIHNlcnZlclxuY29uc3Qgc2VydmVyID0gaHR0cC5TZXJ2ZXIoYXBwKTtcblxuLy8gc3luYyBzZXF1ZWxpemVcbmNvbnN0IGRiID0gcmVxdWlyZSgnLi9tb2RlbHMvaW5kZXgnKTtcbmRiLnNlcXVlbGl6ZS5zeW5jKClcbiAgLy8gc3RhcnQgdGhlIHNlcnZlclxuICAudGhlbigoKSA9PiB7XG4gICAgc2VydmVyLmxpc3RlbihQT1JULCAoKSA9PiB7XG4gICAgICBsb2dnZXIuaW5mbyhgU2VydmVyIGlzIGxpc3RlbmluZyBvbiBQT1JUICR7UE9SVH1gKTtcbiAgICB9KTtcbiAgfSlcbiAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGxvZ2dlci5lcnJvcihgU3RhcnR1cCBFcnJvcjpgLCBlcnJvcik7XG4gIH0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL3NlcnZlci5qcyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV4cHJlc3NcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJleHByZXNzXCJcbi8vIG1vZHVsZSBpZCA9IDQ5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJvZHktcGFyc2VyXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwiYm9keS1wYXJzZXJcIlxuLy8gbW9kdWxlIGlkID0gNTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZXhwcmVzcy1oYW5kbGViYXJzXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwiZXhwcmVzcy1oYW5kbGViYXJzXCJcbi8vIG1vZHVsZSBpZCA9IDUxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImhhbmRsZWJhcnNcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJoYW5kbGViYXJzXCJcbi8vIG1vZHVsZSBpZCA9IDUyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImhlbG1ldFwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcImhlbG1ldFwiXG4vLyBtb2R1bGUgaWQgPSA1M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJjb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXJpYWxpemVTcGVlY2hVc2VyICh1c2VyLCBkb25lKSB7ICAvLyByZXR1cm5zIHVzZXIgZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gc2Vzc2lvblxuICAgIGxvZ2dlci5kZWJ1Zygnc2VyaWFsaXppbmcgdXNlcicpO1xuICAgIGRvbmUobnVsbCwgdXNlcik7XG4gIH0sXG4gIGRlc2VyaWFsaXplU3BlZWNoVXNlciAodXNlciwgZG9uZSkgeyAgLy8gZGVzZXJpYWxpemVzIHNlc3Npb24gYW5kIHBvcHVsYXRlcyBhZGRpdGlvbmFsIGluZm8gdG8gcmVxLnVzZXJcbiAgICBsb2dnZXIuZGVidWcoJ2Rlc2VyaWFsaXppbmcgdXNlcicpO1xuICAgIGRvbmUobnVsbCwgdXNlcik7XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvYXV0aEhlbHBlcnMuanMiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb29raWUtc2Vzc2lvblwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcImNvb2tpZS1zZXNzaW9uXCJcbi8vIG1vZHVsZSBpZCA9IDU1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0dHBcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJodHRwXCJcbi8vIG1vZHVsZSBpZCA9IDU2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImNvbnN0IHsgbG9nTGV2ZWwgfSA9IHJlcXVpcmUoJy4uLy4uL2NvbmZpZy9sb2dnZXJDb25maWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAod2luc3RvbikgPT4ge1xuICAvLyBjb25maWd1cmVcbiAgd2luc3Rvbi5jb25maWd1cmUoe1xuICAgIHRyYW5zcG9ydHM6IFtcbiAgICAgIG5ldyAod2luc3Rvbi50cmFuc3BvcnRzLkNvbnNvbGUpKHtcbiAgICAgICAgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgIDogbG9nTGV2ZWwsXG4gICAgICAgIHRpbWVzdGFtcCAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICBjb2xvcml6ZSAgICAgICAgICAgICAgICAgICAgICAgOiB0cnVlLFxuICAgICAgICBwcmV0dHlQcmludCAgICAgICAgICAgICAgICAgICAgOiB0cnVlLFxuICAgICAgICBoYW5kbGVFeGNlcHRpb25zICAgICAgICAgICAgICAgOiB0cnVlLFxuICAgICAgICBodW1hblJlYWRhYmxlVW5oYW5kbGVkRXhjZXB0aW9uOiB0cnVlLFxuICAgICAgfSksXG4gICAgXSxcbiAgfSk7XG4gIC8vIHRlc3QgYWxsIHRoZSBsb2cgbGV2ZWxzXG4gIHdpbnN0b24uZXJyb3IoJ0xldmVsIDAnKTtcbiAgd2luc3Rvbi53YXJuKCdMZXZlbCAxJyk7XG4gIHdpbnN0b24uaW5mbygnTGV2ZWwgMicpO1xuICB3aW5zdG9uLnZlcmJvc2UoJ0xldmVsIDMnKTtcbiAgd2luc3Rvbi5kZWJ1ZygnTGV2ZWwgNCcpO1xuICB3aW5zdG9uLnNpbGx5KCdMZXZlbCA1Jyk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvY29uZmlndXJlTG9nZ2VyLmpzIiwiY29uc3QgbG9nZ2VyQ29uZmlnID0ge1xuICBsb2dMZXZlbDogJ2RlYnVnJywgIC8vIG9wdGlvbnM6IHNpbGx5LCBkZWJ1ZywgdmVyYm9zZSwgaW5mb1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBsb2dnZXJDb25maWc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb25maWcvbG9nZ2VyQ29uZmlnLmpzIiwiY29uc3Qgd2luc3RvblNsYWNrV2ViSG9vayA9IHJlcXVpcmUoJ3dpbnN0b24tc2xhY2std2ViaG9vaycpLlNsYWNrV2ViSG9vaztcbmNvbnN0IHNsYWNrQ29uZmlnID0gcmVxdWlyZSgnLi4vLi4vY29uZmlnL3NsYWNrQ29uZmlnLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKHdpbnN0b24pID0+IHtcbiAgY29uc3Qge3NsYWNrV2ViSG9vaywgc2xhY2tFcnJvckNoYW5uZWwsIHNsYWNrSW5mb0NoYW5uZWx9ID0gc2xhY2tDb25maWc7XG4gIGlmIChzbGFja1dlYkhvb2spIHtcbiAgICAvLyBhZGQgYSB0cmFuc3BvcnQgZm9yIGVycm9ycyB0byBzbGFja1xuICAgIGlmIChzbGFja0Vycm9yQ2hhbm5lbCkge1xuICAgICAgd2luc3Rvbi5hZGQod2luc3RvblNsYWNrV2ViSG9vaywge1xuICAgICAgICBuYW1lICAgICAgOiAnc2xhY2stZXJyb3JzLXRyYW5zcG9ydCcsXG4gICAgICAgIGxldmVsICAgICA6ICd3YXJuJyxcbiAgICAgICAgd2ViaG9va1VybDogc2xhY2tXZWJIb29rLFxuICAgICAgICBjaGFubmVsICAgOiBzbGFja0Vycm9yQ2hhbm5lbCxcbiAgICAgICAgdXNlcm5hbWUgIDogJ3NwZWUuY2gnLFxuICAgICAgICBpY29uRW1vamkgOiAnOmZhY2Vfd2l0aF9oZWFkX2JhbmRhZ2U6JyxcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKHNsYWNrSW5mb0NoYW5uZWwpIHtcbiAgICAgIHdpbnN0b24uYWRkKHdpbnN0b25TbGFja1dlYkhvb2ssIHtcbiAgICAgICAgbmFtZSAgICAgIDogJ3NsYWNrLWluZm8tdHJhbnNwb3J0JyxcbiAgICAgICAgbGV2ZWwgICAgIDogJ2luZm8nLFxuICAgICAgICB3ZWJob29rVXJsOiBzbGFja1dlYkhvb2ssXG4gICAgICAgIGNoYW5uZWwgICA6IHNsYWNrSW5mb0NoYW5uZWwsXG4gICAgICAgIHVzZXJuYW1lICA6ICdzcGVlLmNoJyxcbiAgICAgICAgaWNvbkVtb2ppIDogJzpuZXJkX2ZhY2U6JyxcbiAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gc2VuZCB0ZXN0IG1lc3NhZ2VcbiAgICB3aW5zdG9uLmVycm9yKCdTbGFjayBcImVycm9yXCIgbG9nZ2luZyBpcyBvbmxpbmUuJyk7XG4gICAgd2luc3Rvbi5pbmZvKCdTbGFjayBcImluZm9cIiBsb2dnaW5nIGlzIG9ubGluZS4nKTtcbiAgfSBlbHNlIHtcbiAgICB3aW5zdG9uLndhcm4oJ1NsYWNrIGxvZ2dpbmcgaXMgbm90IGVuYWJsZWQgYmVjYXVzZSBubyBzbGFja1dlYkhvb2sgY29uZmlnIHZhciBwcm92aWRlZC4nKTtcbiAgfVxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9oZWxwZXJzL2NvbmZpZ3VyZVNsYWNrLmpzIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwid2luc3Rvbi1zbGFjay13ZWJob29rXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwid2luc3Rvbi1zbGFjay13ZWJob29rXCJcbi8vIG1vZHVsZSBpZCA9IDYwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImZ1bmN0aW9uIFNsYWNrQ29uZmlnICgpIHtcbiAgdGhpcy5zbGFja1dlYkhvb2sgICAgICA9ICdkZWZhdWx0JztcbiAgdGhpcy5zbGFja0Vycm9yQ2hhbm5lbCA9ICdkZWZhdWx0JztcbiAgdGhpcy5zbGFja0luZm9DaGFubmVsICA9ICdkZWZhdWx0Jztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFNsYWNrQ29uZmlnKCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb25maWcvc2xhY2tDb25maWcuanMiLCJjb25zdCBQYXNzcG9ydExvY2FsU3RyYXRlZ3kgPSByZXF1aXJlKCdwYXNzcG9ydC1sb2NhbCcpLlN0cmF0ZWd5O1xuY29uc3QgbGJyeUFwaSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbGJyeUFwaS5qcycpO1xuY29uc3QgbG9nZ2VyID0gcmVxdWlyZSgnd2luc3RvbicpO1xuY29uc3QgZGIgPSByZXF1aXJlKCcuLi9tb2RlbHMvaW5kZXgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgUGFzc3BvcnRMb2NhbFN0cmF0ZWd5KFxuICB7XG4gICAgdXNlcm5hbWVGaWVsZDogJ3VzZXJuYW1lJyxcbiAgICBwYXNzd29yZEZpZWxkOiAncGFzc3dvcmQnLFxuICB9LFxuICAodXNlcm5hbWUsIHBhc3N3b3JkLCBkb25lKSA9PiB7XG4gICAgbG9nZ2VyLnZlcmJvc2UoYG5ldyBjaGFubmVsIHNpZ251cCByZXF1ZXN0LiB1c2VyOiAke3VzZXJuYW1lfSBwYXNzOiAke3Bhc3N3b3JkfSAuYCk7XG4gICAgbGV0IHVzZXJJbmZvID0ge307XG4gICAgLy8gc2VydmVyLXNpZGUgdmFsaWRhdG9uIG9mIGlucHV0cyAodXNlcm5hbWUsIHBhc3N3b3JkKVxuXG4gICAgLy8gY3JlYXRlIHRoZSBjaGFubmVsIGFuZCByZXRyaWV2ZSB0aGUgbWV0YWRhdGFcbiAgICByZXR1cm4gbGJyeUFwaS5jcmVhdGVDaGFubmVsKGBAJHt1c2VybmFtZX1gKVxuICAgICAgLnRoZW4odHggPT4ge1xuICAgICAgICAvLyBjcmVhdGUgdXNlciByZWNvcmRcbiAgICAgICAgY29uc3QgdXNlckRhdGEgPSB7XG4gICAgICAgICAgdXNlck5hbWU6IHVzZXJuYW1lLFxuICAgICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCxcbiAgICAgICAgfTtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoJ3VzZXJEYXRhID4nLCB1c2VyRGF0YSk7XG4gICAgICAgIC8vIGNyZWF0ZSB1c2VyIHJlY29yZFxuICAgICAgICBjb25zdCBjaGFubmVsRGF0YSA9IHtcbiAgICAgICAgICBjaGFubmVsTmFtZSAgIDogYEAke3VzZXJuYW1lfWAsXG4gICAgICAgICAgY2hhbm5lbENsYWltSWQ6IHR4LmNsYWltX2lkLFxuICAgICAgICB9O1xuICAgICAgICBsb2dnZXIudmVyYm9zZSgnY2hhbm5lbERhdGEgPicsIGNoYW5uZWxEYXRhKTtcbiAgICAgICAgLy8gY3JlYXRlIGNlcnRpZmljYXRlIHJlY29yZFxuICAgICAgICBjb25zdCBjZXJ0aWZpY2F0ZURhdGEgPSB7XG4gICAgICAgICAgY2xhaW1JZDogdHguY2xhaW1faWQsXG4gICAgICAgICAgbmFtZSAgIDogYEAke3VzZXJuYW1lfWAsXG4gICAgICAgICAgLy8gYWRkcmVzcyxcbiAgICAgICAgfTtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoJ2NlcnRpZmljYXRlRGF0YSA+JywgY2VydGlmaWNhdGVEYXRhKTtcbiAgICAgICAgLy8gc2F2ZSB1c2VyIGFuZCBjZXJ0aWZpY2F0ZSB0byBkYlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW2RiLlVzZXIuY3JlYXRlKHVzZXJEYXRhKSwgZGIuQ2hhbm5lbC5jcmVhdGUoY2hhbm5lbERhdGEpLCBkYi5DZXJ0aWZpY2F0ZS5jcmVhdGUoY2VydGlmaWNhdGVEYXRhKV0pO1xuICAgICAgfSlcbiAgICAgIC50aGVuKChbbmV3VXNlciwgbmV3Q2hhbm5lbCwgbmV3Q2VydGlmaWNhdGVdKSA9PiB7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKCd1c2VyIGFuZCBjZXJ0aWZpY2F0ZSBzdWNjZXNzZnVsbHkgY3JlYXRlZCcpO1xuICAgICAgICAvLyBzdG9yZSB0aGUgcmVsZXZhbnQgbmV3VXNlciBpbmZvIHRvIGJlIHBhc3NlZCBiYWNrIGZvciByZXEuVXNlclxuICAgICAgICB1c2VySW5mb1snaWQnXSA9IG5ld1VzZXIuaWQ7XG4gICAgICAgIHVzZXJJbmZvWyd1c2VyTmFtZSddID0gbmV3VXNlci51c2VyTmFtZTtcbiAgICAgICAgdXNlckluZm9bJ2NoYW5uZWxOYW1lJ10gPSBuZXdDaGFubmVsLmNoYW5uZWxOYW1lO1xuICAgICAgICB1c2VySW5mb1snY2hhbm5lbENsYWltSWQnXSA9IG5ld0NoYW5uZWwuY2hhbm5lbENsYWltSWQ7XG4gICAgICAgIC8vIGFzc29jaWF0ZSB0aGUgaW5zdGFuY2VzXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbbmV3Q2VydGlmaWNhdGUuc2V0Q2hhbm5lbChuZXdDaGFubmVsKSwgbmV3Q2hhbm5lbC5zZXRVc2VyKG5ld1VzZXIpXSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBsb2dnZXIudmVyYm9zZSgndXNlciBhbmQgY2VydGlmaWNhdGUgc3VjY2Vzc2Z1bGx5IGFzc29jaWF0ZWQnKTtcbiAgICAgICAgcmV0dXJuIGRiLkNlcnRpZmljYXRlLmdldFNob3J0Q2hhbm5lbElkRnJvbUxvbmdDaGFubmVsSWQodXNlckluZm8uY2hhbm5lbENsYWltSWQsIHVzZXJJbmZvLmNoYW5uZWxOYW1lKTtcbiAgICAgIH0pXG4gICAgICAudGhlbihzaG9ydENoYW5uZWxJZCA9PiB7XG4gICAgICAgIHVzZXJJbmZvWydzaG9ydENoYW5uZWxJZCddID0gc2hvcnRDaGFubmVsSWQ7XG4gICAgICAgIHJldHVybiBkb25lKG51bGwsIHVzZXJJbmZvKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ3NpZ251cCBlcnJvcicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIGRvbmUoZXJyb3IpO1xuICAgICAgfSk7XG4gIH1cbik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2ZXIvcGFzc3BvcnQvbG9jYWwtc2lnbnVwLmpzIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYXhpb3NcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJheGlvc1wiXG4vLyBtb2R1bGUgaWQgPSA2M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJjb25zdCBsYnJ5Q29uZmlnID0ge1xuICBhcGk6IHtcbiAgICBhcGlIb3N0OiAnbG9jYWxob3N0JyxcbiAgICBhcGlQb3J0OiAnNTI3OScsXG4gIH0sXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxicnlDb25maWc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb25maWcvbGJyeUNvbmZpZy5qcyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInVuaXZlcnNhbC1hbmFseXRpY3NcIik7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJ1bml2ZXJzYWwtYW5hbHl0aWNzXCJcbi8vIG1vZHVsZSBpZCA9IDY1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImZ1bmN0aW9uIE15c3FsQ29uZmlnICgpIHtcbiAgdGhpcy5kYXRhYmFzZSA9ICdkZWZhdWx0JztcbiAgdGhpcy51c2VybmFtZSA9ICdkZWZhdWx0JztcbiAgdGhpcy5wYXNzd29yZCA9ICdkZWZhdWx0Jztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IE15c3FsQ29uZmlnKCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jb25maWcvbXlzcWxDb25maWcuanMiLCJjb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5jb25zdCB7IHJldHVyblNob3J0SWQgfSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvc2VxdWVsaXplSGVscGVycy5qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChzZXF1ZWxpemUsIHsgU1RSSU5HLCBCT09MRUFOLCBJTlRFR0VSLCBURVhULCBERUNJTUFMIH0pID0+IHtcbiAgY29uc3QgQ2VydGlmaWNhdGUgPSBzZXF1ZWxpemUuZGVmaW5lKFxuICAgICdDZXJ0aWZpY2F0ZScsXG4gICAge1xuICAgICAgYWRkcmVzczoge1xuICAgICAgICB0eXBlICAgOiBTVFJJTkcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgYW1vdW50OiB7XG4gICAgICAgIHR5cGUgICA6IERFQ0lNQUwoMTksIDgpLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGNsYWltSWQ6IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGNsYWltU2VxdWVuY2U6IHtcbiAgICAgICAgdHlwZSAgIDogSU5URUdFUixcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBkZWNvZGVkQ2xhaW06IHtcbiAgICAgICAgdHlwZSAgIDogQk9PTEVBTixcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBkZXB0aDoge1xuICAgICAgICB0eXBlICAgOiBJTlRFR0VSLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGVmZmVjdGl2ZUFtb3VudDoge1xuICAgICAgICB0eXBlICAgOiBERUNJTUFMKDE5LCA4KSxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBoYXNTaWduYXR1cmU6IHtcbiAgICAgICAgdHlwZSAgIDogQk9PTEVBTixcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBoZWlnaHQ6IHtcbiAgICAgICAgdHlwZSAgIDogSU5URUdFUixcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBoZXg6IHtcbiAgICAgICAgdHlwZSAgIDogVEVYVCgnbG9uZycpLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIG5hbWU6IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIG5vdXQ6IHtcbiAgICAgICAgdHlwZSAgIDogSU5URUdFUixcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICB0eGlkOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICB2YWxpZEF0SGVpZ2h0OiB7XG4gICAgICAgIHR5cGUgICA6IElOVEVHRVIsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgb3V0cG9pbnQ6IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIHZhbHVlVmVyc2lvbjoge1xuICAgICAgICB0eXBlICAgOiBTVFJJTkcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgY2xhaW1UeXBlOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBjZXJ0aWZpY2F0ZVZlcnNpb246IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGtleVR5cGU6IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIHB1YmxpY0tleToge1xuICAgICAgICB0eXBlICAgOiBURVhUKCdsb25nJyksXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgZnJlZXplVGFibGVOYW1lOiB0cnVlLFxuICAgIH1cbiAgKTtcblxuICBDZXJ0aWZpY2F0ZS5hc3NvY2lhdGUgPSBkYiA9PiB7XG4gICAgQ2VydGlmaWNhdGUuYmVsb25nc1RvKGRiLkNoYW5uZWwsIHtcbiAgICAgIGZvcmVpZ25LZXk6IHtcbiAgICAgICAgYWxsb3dOdWxsOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcblxuICBDZXJ0aWZpY2F0ZS5nZXRTaG9ydENoYW5uZWxJZEZyb21Mb25nQ2hhbm5lbElkID0gZnVuY3Rpb24gKGxvbmdDaGFubmVsSWQsIGNoYW5uZWxOYW1lKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBnZXRTaG9ydENoYW5uZWxJZEZyb21Mb25nQ2hhbm5lbElkICR7Y2hhbm5lbE5hbWV9OiR7bG9uZ0NoYW5uZWxJZH1gKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpc1xuICAgICAgICAuZmluZEFsbCh7XG4gICAgICAgICAgd2hlcmU6IHtuYW1lOiBjaGFubmVsTmFtZX0sXG4gICAgICAgICAgb3JkZXI6IFtbJ2hlaWdodCcsICdBU0MnXV0sXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgc3dpdGNoIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY2hhbm5lbChzKSBmb3VuZCB3aXRoIHRoYXQgY2hhbm5lbCBuYW1lJyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXR1cm5TaG9ydElkKHJlc3VsdCwgbG9uZ0NoYW5uZWxJZCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBDZXJ0aWZpY2F0ZS5nZXRMb25nQ2hhbm5lbElkRnJvbVNob3J0Q2hhbm5lbElkID0gZnVuY3Rpb24gKGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgZ2V0TG9uZ0NoYW5uZWxJZEZyb21TaG9ydENoYW5uZWxJZCgke2NoYW5uZWxOYW1lfSwgJHtjaGFubmVsQ2xhaW1JZH0pYCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXNcbiAgICAgICAgLmZpbmRBbGwoe1xuICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICBuYW1lICAgOiBjaGFubmVsTmFtZSxcbiAgICAgICAgICAgIGNsYWltSWQ6IHtcbiAgICAgICAgICAgICAgJGxpa2U6IGAke2NoYW5uZWxDbGFpbUlkfSVgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9yZGVyOiBbWydoZWlnaHQnLCAnQVNDJ11dLFxuICAgICAgICB9KVxuICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIHN3aXRjaCAocmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIG5vdGUgcmVzdWx0cyBtdXN0IGJlIHNvcnRlZFxuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXN1bHRbMF0uY2xhaW1JZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIENlcnRpZmljYXRlLmdldExvbmdDaGFubmVsSWRGcm9tQ2hhbm5lbE5hbWUgPSBmdW5jdGlvbiAoY2hhbm5lbE5hbWUpIHtcbiAgICBsb2dnZXIuZGVidWcoYGdldExvbmdDaGFubmVsSWRGcm9tQ2hhbm5lbE5hbWUoJHtjaGFubmVsTmFtZX0pYCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXNcbiAgICAgICAgLmZpbmRBbGwoe1xuICAgICAgICAgIHdoZXJlOiB7IG5hbWU6IGNoYW5uZWxOYW1lIH0sXG4gICAgICAgICAgb3JkZXI6IFtbJ2VmZmVjdGl2ZUFtb3VudCcsICdERVNDJ10sIFsnaGVpZ2h0JywgJ0FTQyddXSxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXN1bHRbMF0uY2xhaW1JZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIENlcnRpZmljYXRlLnZhbGlkYXRlTG9uZ0NoYW5uZWxJZCA9IGZ1bmN0aW9uIChuYW1lLCBjbGFpbUlkKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGB2YWxpZGF0ZUxvbmdDaGFubmVsSWQoJHtuYW1lfSwgJHtjbGFpbUlkfSlgKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5maW5kT25lKHtcbiAgICAgICAgd2hlcmU6IHtuYW1lLCBjbGFpbUlkfSxcbiAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKG51bGwpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmVzb2x2ZShjbGFpbUlkKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBDZXJ0aWZpY2F0ZS5nZXRMb25nQ2hhbm5lbElkID0gZnVuY3Rpb24gKGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgZ2V0TG9uZ0NoYW5uZWxJZCgke2NoYW5uZWxOYW1lfSwgJHtjaGFubmVsQ2xhaW1JZH0pYCk7XG4gICAgaWYgKGNoYW5uZWxDbGFpbUlkICYmIChjaGFubmVsQ2xhaW1JZC5sZW5ndGggPT09IDQwKSkgeyAgLy8gaWYgYSBmdWxsIGNoYW5uZWwgaWQgaXMgcHJvdmlkZWRcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlTG9uZ0NoYW5uZWxJZChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQpO1xuICAgIH0gZWxzZSBpZiAoY2hhbm5lbENsYWltSWQgJiYgY2hhbm5lbENsYWltSWQubGVuZ3RoIDwgNDApIHsgIC8vIGlmIGEgc2hvcnQgY2hhbm5lbCBpZCBpcyBwcm92aWRlZFxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9uZ0NoYW5uZWxJZEZyb21TaG9ydENoYW5uZWxJZChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMb25nQ2hhbm5lbElkRnJvbUNoYW5uZWxOYW1lKGNoYW5uZWxOYW1lKTsgIC8vIGlmIG5vIGNoYW5uZWwgaWQgcHJvdmlkZWRcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENlcnRpZmljYXRlO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9tb2RlbHMvY2VydGlmaWNhdGUuanMiLCJtb2R1bGUuZXhwb3J0cyA9IChzZXF1ZWxpemUsIHsgU1RSSU5HIH0pID0+IHtcbiAgY29uc3QgQ2hhbm5lbCA9IHNlcXVlbGl6ZS5kZWZpbmUoXG4gICAgJ0NoYW5uZWwnLFxuICAgIHtcbiAgICAgIGNoYW5uZWxOYW1lOiB7XG4gICAgICAgIHR5cGUgICAgIDogU1RSSU5HLFxuICAgICAgICBhbGxvd051bGw6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGNoYW5uZWxDbGFpbUlkOiB7XG4gICAgICAgIHR5cGUgICAgIDogU1RSSU5HLFxuICAgICAgICBhbGxvd051bGw6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGZyZWV6ZVRhYmxlTmFtZTogdHJ1ZSxcbiAgICB9XG4gICk7XG5cbiAgQ2hhbm5lbC5hc3NvY2lhdGUgPSBkYiA9PiB7XG4gICAgQ2hhbm5lbC5iZWxvbmdzVG8oZGIuVXNlcik7XG4gICAgQ2hhbm5lbC5oYXNPbmUoZGIuQ2VydGlmaWNhdGUpO1xuICB9O1xuXG4gIHJldHVybiBDaGFubmVsO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9tb2RlbHMvY2hhbm5lbC5qcyIsImNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJ3dpbnN0b24nKTtcbmNvbnN0IHsgcmV0dXJuU2hvcnRJZCB9ID0gcmVxdWlyZSgnLi4vaGVscGVycy9zZXF1ZWxpemVIZWxwZXJzLmpzJyk7XG5jb25zdCB7IGFzc2V0RGVmYXVsdHM6IHsgdGh1bWJuYWlsOiBkZWZhdWx0VGh1bWJuYWlsIH0sIGRldGFpbHM6IHsgaG9zdCB9IH0gPSByZXF1aXJlKCcuLi8uLi9jb25maWcvc2l0ZUNvbmZpZy5qcycpO1xuXG5mdW5jdGlvbiBkZXRlcm1pbmVGaWxlRXh0ZW5zaW9uRnJvbUNvbnRlbnRUeXBlIChjb250ZW50VHlwZSkge1xuICBzd2l0Y2ggKGNvbnRlbnRUeXBlKSB7XG4gICAgY2FzZSAnaW1hZ2UvanBlZyc6XG4gICAgY2FzZSAnaW1hZ2UvanBnJzpcbiAgICAgIHJldHVybiAnanBlZyc7XG4gICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgIHJldHVybiAncG5nJztcbiAgICBjYXNlICdpbWFnZS9naWYnOlxuICAgICAgcmV0dXJuICdnaWYnO1xuICAgIGNhc2UgJ3ZpZGVvL21wNCc6XG4gICAgICByZXR1cm4gJ21wNCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIGxvZ2dlci5kZWJ1Zygnc2V0dGluZyB1bmtub3duIGZpbGUgdHlwZSBhcyBmaWxlIGV4dGVuc2lvbiBqcGVnJyk7XG4gICAgICByZXR1cm4gJ2pwZWcnO1xuICB9XG59O1xuXG5mdW5jdGlvbiBkZXRlcm1pbmVUaHVtYm5haWwgKHN0b3JlZFRodW1ibmFpbCwgZGVmYXVsdFRodW1ibmFpbCkge1xuICBpZiAoc3RvcmVkVGh1bWJuYWlsID09PSAnJykge1xuICAgIHJldHVybiBkZWZhdWx0VGh1bWJuYWlsO1xuICB9XG4gIHJldHVybiBzdG9yZWRUaHVtYm5haWw7XG59O1xuXG5mdW5jdGlvbiBwcmVwYXJlQ2xhaW1EYXRhIChjbGFpbSkge1xuICAvLyBsb2dnZXIuZGVidWcoJ3ByZXBhcmluZyBjbGFpbSBkYXRhIGJhc2VkIG9uIHJlc29sdmVkIGRhdGE6JywgY2xhaW0pO1xuICBjbGFpbVsndGh1bWJuYWlsJ10gPSBkZXRlcm1pbmVUaHVtYm5haWwoY2xhaW0udGh1bWJuYWlsLCBkZWZhdWx0VGh1bWJuYWlsKTtcbiAgY2xhaW1bJ2ZpbGVFeHQnXSA9IGRldGVybWluZUZpbGVFeHRlbnNpb25Gcm9tQ29udGVudFR5cGUoY2xhaW0uY29udGVudFR5cGUpO1xuICBjbGFpbVsnaG9zdCddID0gaG9zdDtcbiAgcmV0dXJuIGNsYWltO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSAoc2VxdWVsaXplLCB7IFNUUklORywgQk9PTEVBTiwgSU5URUdFUiwgVEVYVCwgREVDSU1BTCB9KSA9PiB7XG4gIGNvbnN0IENsYWltID0gc2VxdWVsaXplLmRlZmluZShcbiAgICAnQ2xhaW0nLFxuICAgIHtcbiAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGFtb3VudDoge1xuICAgICAgICB0eXBlICAgOiBERUNJTUFMKDE5LCA4KSxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBjbGFpbUlkOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBjbGFpbVNlcXVlbmNlOiB7XG4gICAgICAgIHR5cGUgICA6IElOVEVHRVIsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgZGVjb2RlZENsYWltOiB7XG4gICAgICAgIHR5cGUgICA6IEJPT0xFQU4sXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgZGVwdGg6IHtcbiAgICAgICAgdHlwZSAgIDogSU5URUdFUixcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBlZmZlY3RpdmVBbW91bnQ6IHtcbiAgICAgICAgdHlwZSAgIDogREVDSU1BTCgxOSwgOCksXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgaGFzU2lnbmF0dXJlOiB7XG4gICAgICAgIHR5cGUgICA6IEJPT0xFQU4sXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgaGVpZ2h0OiB7XG4gICAgICAgIHR5cGUgICA6IElOVEVHRVIsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgaGV4OiB7XG4gICAgICAgIHR5cGUgICA6IFRFWFQoJ2xvbmcnKSxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBuYW1lOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBub3V0OiB7XG4gICAgICAgIHR5cGUgICA6IElOVEVHRVIsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgdHhpZDoge1xuICAgICAgICB0eXBlICAgOiBTVFJJTkcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgdmFsaWRBdEhlaWdodDoge1xuICAgICAgICB0eXBlICAgOiBJTlRFR0VSLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIG91dHBvaW50OiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBjbGFpbVR5cGU6IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGNlcnRpZmljYXRlSWQ6IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGF1dGhvcjoge1xuICAgICAgICB0eXBlICAgOiBTVFJJTkcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZSAgIDogVEVYVCgnbG9uZycpLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBsaWNlbnNlOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBsaWNlbnNlVXJsOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBuc2Z3OiB7XG4gICAgICAgIHR5cGUgICA6IEJPT0xFQU4sXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgcHJldmlldzoge1xuICAgICAgICB0eXBlICAgOiBTVFJJTkcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgdGh1bWJuYWlsOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICB0aXRsZToge1xuICAgICAgICB0eXBlICAgOiBTVFJJTkcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgbWV0YWRhdGFWZXJzaW9uOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBjb250ZW50VHlwZToge1xuICAgICAgICB0eXBlICAgOiBTVFJJTkcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICB9LFxuICAgICAgc291cmNlOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBzb3VyY2VUeXBlOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBzb3VyY2VWZXJzaW9uOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICBzdHJlYW1WZXJzaW9uOiB7XG4gICAgICAgIHR5cGUgICA6IFNUUklORyxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0sXG4gICAgICB2YWx1ZVZlcnNpb246IHtcbiAgICAgICAgdHlwZSAgIDogU1RSSU5HLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSxcbiAgICAgIGNoYW5uZWxOYW1lOiB7XG4gICAgICAgIHR5cGUgICAgIDogU1RSSU5HLFxuICAgICAgICBhbGxvd051bGw6IHRydWUsXG4gICAgICAgIGRlZmF1bHQgIDogbnVsbCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBmcmVlemVUYWJsZU5hbWU6IHRydWUsXG4gICAgfVxuICApO1xuXG4gIENsYWltLmFzc29jaWF0ZSA9IGRiID0+IHtcbiAgICBDbGFpbS5iZWxvbmdzVG8oZGIuRmlsZSwge1xuICAgICAgZm9yZWlnbktleToge1xuICAgICAgICBhbGxvd051bGw6IHRydWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuXG4gIENsYWltLmdldFNob3J0Q2xhaW1JZEZyb21Mb25nQ2xhaW1JZCA9IGZ1bmN0aW9uIChjbGFpbUlkLCBjbGFpbU5hbWUpIHtcbiAgICBsb2dnZXIuZGVidWcoYENsYWltLmdldFNob3J0Q2xhaW1JZEZyb21Mb25nQ2xhaW1JZCBmb3IgJHtjbGFpbU5hbWV9IyR7Y2xhaW1JZH1gKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpc1xuICAgICAgICAuZmluZEFsbCh7XG4gICAgICAgICAgd2hlcmU6IHsgbmFtZTogY2xhaW1OYW1lIH0sXG4gICAgICAgICAgb3JkZXI6IFtbJ2hlaWdodCcsICdBU0MnXV0sXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgc3dpdGNoIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY2xhaW0ocykgZm91bmQgd2l0aCB0aGF0IGNsYWltIG5hbWUnKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJlc29sdmUocmV0dXJuU2hvcnRJZChyZXN1bHQsIGNsYWltSWQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgQ2xhaW0uZ2V0QWxsQ2hhbm5lbENsYWltcyA9IGZ1bmN0aW9uIChjaGFubmVsQ2xhaW1JZCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgQ2xhaW0uZ2V0QWxsQ2hhbm5lbENsYWltcyBmb3IgJHtjaGFubmVsQ2xhaW1JZH1gKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpc1xuICAgICAgICAuZmluZEFsbCh7XG4gICAgICAgICAgd2hlcmU6IHsgY2VydGlmaWNhdGVJZDogY2hhbm5lbENsYWltSWQgfSxcbiAgICAgICAgICBvcmRlcjogW1snaGVpZ2h0JywgJ0FTQyddXSxcbiAgICAgICAgICByYXcgIDogdHJ1ZSwgIC8vIHJldHVybnMgYW4gYXJyYXkgb2Ygb25seSBkYXRhLCBub3QgYW4gYXJyYXkgb2YgaW5zdGFuY2VzXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKGNoYW5uZWxDbGFpbXNBcnJheSA9PiB7XG4gICAgICAgICAgLy8gbG9nZ2VyLmRlYnVnKCdjaGFubmVsY2xhaW1zYXJyYXkgbGVuZ3RoOicsIGNoYW5uZWxDbGFpbXNBcnJheS5sZW5ndGgpO1xuICAgICAgICAgIHN3aXRjaCAoY2hhbm5lbENsYWltc0FycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNoYW5uZWxDbGFpbXNBcnJheS5mb3JFYWNoKGNsYWltID0+IHtcbiAgICAgICAgICAgICAgICBjbGFpbVsnZmlsZUV4dCddID0gZGV0ZXJtaW5lRmlsZUV4dGVuc2lvbkZyb21Db250ZW50VHlwZShjbGFpbS5jb250ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgY2xhaW1bJ3RodW1ibmFpbCddID0gZGV0ZXJtaW5lVGh1bWJuYWlsKGNsYWltLnRodW1ibmFpbCwgZGVmYXVsdFRodW1ibmFpbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoY2hhbm5lbENsYWltc0FycmF5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgQ2xhaW0uZ2V0Q2xhaW1JZEJ5TG9uZ0NoYW5uZWxJZCA9IGZ1bmN0aW9uIChjaGFubmVsQ2xhaW1JZCwgY2xhaW1OYW1lKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBmaW5kaW5nIGNsYWltIGlkIGZvciBjbGFpbSAke2NsYWltTmFtZX0gZnJvbSBjaGFubmVsICR7Y2hhbm5lbENsYWltSWR9YCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXNcbiAgICAgICAgLmZpbmRBbGwoe1xuICAgICAgICAgIHdoZXJlOiB7IG5hbWU6IGNsYWltTmFtZSwgY2VydGlmaWNhdGVJZDogY2hhbm5lbENsYWltSWQgfSxcbiAgICAgICAgICBvcmRlcjogW1snaWQnLCAnQVNDJ11dLFxuICAgICAgICB9KVxuICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIHN3aXRjaCAocmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0WzBdLmNsYWltSWQpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGAke3Jlc3VsdC5sZW5ndGh9IHJlY29yZHMgZm91bmQgZm9yIFwiJHtjbGFpbU5hbWV9XCIgaW4gY2hhbm5lbCBcIiR7Y2hhbm5lbENsYWltSWR9XCJgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0WzBdLmNsYWltSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBDbGFpbS5nZXRMb25nQ2xhaW1JZEZyb21TaG9ydENsYWltSWQgPSBmdW5jdGlvbiAobmFtZSwgc2hvcnRJZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzXG4gICAgICAgIC5maW5kQWxsKHtcbiAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNsYWltSWQ6IHtcbiAgICAgICAgICAgICAgJGxpa2U6IGAke3Nob3J0SWR9JWAsXG4gICAgICAgICAgICB9fSxcbiAgICAgICAgICBvcmRlcjogW1snaGVpZ2h0JywgJ0FTQyddXSxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICBkZWZhdWx0OiAvLyBub3RlIHJlc3VsdHMgbXVzdCBiZSBzb3J0ZWRcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0WzBdLmNsYWltSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBDbGFpbS5nZXRUb3BGcmVlQ2xhaW1JZEJ5Q2xhaW1OYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpc1xuICAgICAgICAuZmluZEFsbCh7XG4gICAgICAgICAgd2hlcmU6IHsgbmFtZSB9LFxuICAgICAgICAgIG9yZGVyOiBbWydlZmZlY3RpdmVBbW91bnQnLCAnREVTQyddLCBbJ2hlaWdodCcsICdBU0MnXV0sICAvLyBub3RlOiBtYXliZSBoZWlnaHQgYW5kIGVmZmVjdGl2ZSBhbW91bnQgbmVlZCB0byBzd2l0Y2g/XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKCdsZW5ndGggb2YgcmVzdWx0JywgcmVzdWx0Lmxlbmd0aCk7XG4gICAgICAgICAgc3dpdGNoIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0WzBdLmRhdGFWYWx1ZXMuY2xhaW1JZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIENsYWltLnZhbGlkYXRlTG9uZ0NsYWltSWQgPSBmdW5jdGlvbiAobmFtZSwgY2xhaW1JZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmZpbmRPbmUoe1xuICAgICAgICB3aGVyZToge25hbWUsIGNsYWltSWR9LFxuICAgICAgfSlcbiAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXNvbHZlKGNsYWltSWQpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIENsYWltLmdldExvbmdDbGFpbUlkID0gZnVuY3Rpb24gKGNsYWltTmFtZSwgY2xhaW1JZCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgZ2V0TG9uZ0NsYWltSWQoJHtjbGFpbU5hbWV9LCAke2NsYWltSWR9KWApO1xuICAgIGlmIChjbGFpbUlkICYmIChjbGFpbUlkLmxlbmd0aCA9PT0gNDApKSB7ICAvLyBpZiBhIGZ1bGwgY2xhaW0gaWQgaXMgcHJvdmlkZWRcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlTG9uZ0NsYWltSWQoY2xhaW1OYW1lLCBjbGFpbUlkKTtcbiAgICB9IGVsc2UgaWYgKGNsYWltSWQgJiYgY2xhaW1JZC5sZW5ndGggPCA0MCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9uZ0NsYWltSWRGcm9tU2hvcnRDbGFpbUlkKGNsYWltTmFtZSwgY2xhaW1JZCk7ICAvLyBpZiBhIHNob3J0IGNsYWltIGlkIGlzIHByb3ZpZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFRvcEZyZWVDbGFpbUlkQnlDbGFpbU5hbWUoY2xhaW1OYW1lKTsgIC8vIGlmIG5vIGNsYWltIGlkIGlzIHByb3ZpZGVkXG4gICAgfVxuICB9O1xuXG4gIENsYWltLnJlc29sdmVDbGFpbSA9IGZ1bmN0aW9uIChuYW1lLCBjbGFpbUlkKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBDbGFpbS5yZXNvbHZlQ2xhaW06ICR7bmFtZX0gJHtjbGFpbUlkfWApO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzXG4gICAgICAgIC5maW5kQWxsKHtcbiAgICAgICAgICB3aGVyZTogeyBuYW1lLCBjbGFpbUlkIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKGNsYWltQXJyYXkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoY2xhaW1BcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHByZXBhcmVDbGFpbURhdGEoY2xhaW1BcnJheVswXS5kYXRhVmFsdWVzKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYG1vcmUgdGhhbiBvbmUgcmVjb3JkIG1hdGNoZXMgJHtuYW1lfSMke2NsYWltSWR9IGluIGRiLkNsYWltYCk7XG4gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHByZXBhcmVDbGFpbURhdGEoY2xhaW1BcnJheVswXS5kYXRhVmFsdWVzKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBDbGFpbTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2ZXIvbW9kZWxzL2NsYWltLmpzIiwibW9kdWxlLmV4cG9ydHMgPSAoc2VxdWVsaXplLCB7IFNUUklORywgQk9PTEVBTiwgSU5URUdFUiB9KSA9PiB7XG4gIGNvbnN0IEZpbGUgPSBzZXF1ZWxpemUuZGVmaW5lKFxuICAgICdGaWxlJyxcbiAgICB7XG4gICAgICBuYW1lOiB7XG4gICAgICAgIHR5cGUgICAgIDogU1RSSU5HLFxuICAgICAgICBhbGxvd051bGw6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGNsYWltSWQ6IHtcbiAgICAgICAgdHlwZSAgICAgOiBTVFJJTkcsXG4gICAgICAgIGFsbG93TnVsbDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgYWRkcmVzczoge1xuICAgICAgICB0eXBlICAgICA6IFNUUklORyxcbiAgICAgICAgYWxsb3dOdWxsOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBvdXRwb2ludDoge1xuICAgICAgICB0eXBlICAgICA6IFNUUklORyxcbiAgICAgICAgYWxsb3dOdWxsOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBoZWlnaHQ6IHtcbiAgICAgICAgdHlwZSAgICAgOiBJTlRFR0VSLFxuICAgICAgICBhbGxvd051bGw6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0ICA6IDAsXG4gICAgICB9LFxuICAgICAgZmlsZU5hbWU6IHtcbiAgICAgICAgdHlwZSAgICAgOiBTVFJJTkcsXG4gICAgICAgIGFsbG93TnVsbDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZmlsZVBhdGg6IHtcbiAgICAgICAgdHlwZSAgICAgOiBTVFJJTkcsXG4gICAgICAgIGFsbG93TnVsbDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZmlsZVR5cGU6IHtcbiAgICAgICAgdHlwZTogU1RSSU5HLFxuICAgICAgfSxcbiAgICAgIG5zZnc6IHtcbiAgICAgICAgdHlwZSAgICAgICAgOiBCT09MRUFOLFxuICAgICAgICBhbGxvd051bGwgICA6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHRyZW5kaW5nRWxpZ2libGU6IHtcbiAgICAgICAgdHlwZSAgICAgICAgOiBCT09MRUFOLFxuICAgICAgICBhbGxvd051bGwgICA6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgZnJlZXplVGFibGVOYW1lOiB0cnVlLFxuICAgIH1cbiAgKTtcblxuICBGaWxlLmFzc29jaWF0ZSA9IGRiID0+IHtcbiAgICBGaWxlLmhhc01hbnkoZGIuUmVxdWVzdCk7XG4gICAgRmlsZS5oYXNPbmUoZGIuQ2xhaW0pO1xuICB9O1xuXG4gIEZpbGUuZ2V0UmVjZW50Q2xhaW1zID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmZpbmRBbGwoe1xuICAgICAgd2hlcmU6IHsgbnNmdzogZmFsc2UsIHRyZW5kaW5nRWxpZ2libGU6IHRydWUgfSxcbiAgICAgIG9yZGVyOiBbWydjcmVhdGVkQXQnLCAnREVTQyddXSxcbiAgICAgIGxpbWl0OiAyNSxcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gRmlsZTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2ZXIvbW9kZWxzL2ZpbGUuanMiLCJtb2R1bGUuZXhwb3J0cyA9IChzZXF1ZWxpemUsIHsgU1RSSU5HLCBCT09MRUFOLCBURVhUIH0pID0+IHtcbiAgY29uc3QgUmVxdWVzdCA9IHNlcXVlbGl6ZS5kZWZpbmUoXG4gICAgJ1JlcXVlc3QnLFxuICAgIHtcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICB0eXBlICAgICA6IFNUUklORyxcbiAgICAgICAgYWxsb3dOdWxsOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB1cmw6IHtcbiAgICAgICAgdHlwZSAgICAgOiBTVFJJTkcsXG4gICAgICAgIGFsbG93TnVsbDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgaXBBZGRyZXNzOiB7XG4gICAgICAgIHR5cGUgICAgIDogU1RSSU5HLFxuICAgICAgICBhbGxvd051bGw6IHRydWUsXG4gICAgICB9LFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHR5cGUgICAgIDogVEVYVCgnbG9uZycpLFxuICAgICAgICBhbGxvd051bGw6IHRydWUsXG4gICAgICAgIGRlZmF1bHQgIDogbnVsbCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBmcmVlemVUYWJsZU5hbWU6IHRydWUsXG4gICAgfVxuICApO1xuXG4gIFJlcXVlc3QuYXNzb2NpYXRlID0gZGIgPT4ge1xuICAgIFJlcXVlc3QuYmVsb25nc1RvKGRiLkZpbGUsIHtcbiAgICAgIGZvcmVpZ25LZXk6IHtcbiAgICAgICAgYWxsb3dOdWxsOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gUmVxdWVzdDtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2ZXIvbW9kZWxzL3JlcXVlc3QuanMiLCIndXNlIHN0cmljdCc7XG5jb25zdCBiY3J5cHQgPSByZXF1aXJlKCdiY3J5cHQnKTtcbmNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJ3dpbnN0b24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoc2VxdWVsaXplLCB7IFNUUklORyB9KSA9PiB7XG4gIGNvbnN0IFVzZXIgPSBzZXF1ZWxpemUuZGVmaW5lKFxuICAgICdVc2VyJyxcbiAgICB7XG4gICAgICB1c2VyTmFtZToge1xuICAgICAgICB0eXBlICAgICA6IFNUUklORyxcbiAgICAgICAgYWxsb3dOdWxsOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBwYXNzd29yZDoge1xuICAgICAgICB0eXBlICAgICA6IFNUUklORyxcbiAgICAgICAgYWxsb3dOdWxsOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBmcmVlemVUYWJsZU5hbWU6IHRydWUsXG4gICAgfVxuICApO1xuXG4gIFVzZXIuYXNzb2NpYXRlID0gZGIgPT4ge1xuICAgIFVzZXIuaGFzT25lKGRiLkNoYW5uZWwpO1xuICB9O1xuXG4gIFVzZXIucHJvdG90eXBlLmNvbXBhcmVQYXNzd29yZCA9IGZ1bmN0aW9uIChwYXNzd29yZCkge1xuICAgIHJldHVybiBiY3J5cHQuY29tcGFyZShwYXNzd29yZCwgdGhpcy5wYXNzd29yZCk7XG4gIH07XG5cbiAgVXNlci5wcm90b3R5cGUuY2hhbmdlUGFzc3dvcmQgPSBmdW5jdGlvbiAobmV3UGFzc3dvcmQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gZ2VuZXJhdGUgYSBzYWx0IHN0cmluZyB0byB1c2UgZm9yIGhhc2hpbmdcbiAgICAgIGJjcnlwdC5nZW5TYWx0KChzYWx0RXJyb3IsIHNhbHQpID0+IHtcbiAgICAgICAgaWYgKHNhbHRFcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignc2FsdCBlcnJvcicsIHNhbHRFcnJvcik7XG4gICAgICAgICAgcmVqZWN0KHNhbHRFcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdlbmVyYXRlIGEgaGFzaGVkIHZlcnNpb24gb2YgdGhlIHVzZXIncyBwYXNzd29yZFxuICAgICAgICBiY3J5cHQuaGFzaChuZXdQYXNzd29yZCwgc2FsdCwgKGhhc2hFcnJvciwgaGFzaCkgPT4ge1xuICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIGVycm9yIHdpdGggdGhlIGhhc2ggZ2VuZXJhdGlvbiByZXR1cm4gdGhlIGVycm9yXG4gICAgICAgICAgaWYgKGhhc2hFcnJvcikge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdoYXNoIGVycm9yJywgaGFzaEVycm9yKTtcbiAgICAgICAgICAgIHJlamVjdChoYXNoRXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyByZXBsYWNlIHRoZSBjdXJyZW50IHBhc3N3b3JkIHdpdGggdGhlIG5ldyBoYXNoXG4gICAgICAgICAgdGhpc1xuICAgICAgICAgICAgLnVwZGF0ZSh7cGFzc3dvcmQ6IGhhc2h9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIHByZS1zYXZlIGhvb2sgbWV0aG9kIHRvIGhhc2ggdGhlIHVzZXIncyBwYXNzd29yZCBiZWZvcmUgdGhlIHVzZXIncyBpbmZvIGlzIHNhdmVkIHRvIHRoZSBkYi5cbiAgVXNlci5ob29rKCdiZWZvcmVDcmVhdGUnLCAodXNlciwgb3B0aW9ucykgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZygnVXNlci5iZWZvcmVDcmVhdGUgaG9vay4uLicpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBnZW5lcmF0ZSBhIHNhbHQgc3RyaW5nIHRvIHVzZSBmb3IgaGFzaGluZ1xuICAgICAgYmNyeXB0LmdlblNhbHQoKHNhbHRFcnJvciwgc2FsdCkgPT4ge1xuICAgICAgICBpZiAoc2FsdEVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdzYWx0IGVycm9yJywgc2FsdEVycm9yKTtcbiAgICAgICAgICByZWplY3Qoc2FsdEVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2VuZXJhdGUgYSBoYXNoZWQgdmVyc2lvbiBvZiB0aGUgdXNlcidzIHBhc3N3b3JkXG4gICAgICAgIGJjcnlwdC5oYXNoKHVzZXIucGFzc3dvcmQsIHNhbHQsIChoYXNoRXJyb3IsIGhhc2gpID0+IHtcbiAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBlcnJvciB3aXRoIHRoZSBoYXNoIGdlbmVyYXRpb24gcmV0dXJuIHRoZSBlcnJvclxuICAgICAgICAgIGlmIChoYXNoRXJyb3IpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignaGFzaCBlcnJvcicsIGhhc2hFcnJvcik7XG4gICAgICAgICAgICByZWplY3QoaGFzaEVycm9yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVwbGFjZSB0aGUgcGFzc3dvcmQgc3RyaW5nIHdpdGggdGhlIGhhc2ggcGFzc3dvcmQgdmFsdWVcbiAgICAgICAgICB1c2VyLnBhc3N3b3JkID0gaGFzaDtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBVc2VyO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9tb2RlbHMvdXNlci5qcyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJjcnlwdFwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcImJjcnlwdFwiXG4vLyBtb2R1bGUgaWQgPSA3M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJjb25zdCBQYXNzcG9ydExvY2FsU3RyYXRlZ3kgPSByZXF1aXJlKCdwYXNzcG9ydC1sb2NhbCcpLlN0cmF0ZWd5O1xuY29uc3QgbG9nZ2VyID0gcmVxdWlyZSgnd2luc3RvbicpO1xuY29uc3QgZGIgPSByZXF1aXJlKCcuLi9tb2RlbHMvaW5kZXgnKTtcblxuY29uc3QgcmV0dXJuVXNlckFuZENoYW5uZWxJbmZvID0gKHVzZXJJbnN0YW5jZSkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCB1c2VySW5mbyA9IHt9O1xuICAgIHVzZXJJbmZvWydpZCddID0gdXNlckluc3RhbmNlLmlkO1xuICAgIHVzZXJJbmZvWyd1c2VyTmFtZSddID0gdXNlckluc3RhbmNlLnVzZXJOYW1lO1xuICAgIHVzZXJJbnN0YW5jZVxuICAgICAgLmdldENoYW5uZWwoKVxuICAgICAgLnRoZW4oKHtjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWR9KSA9PiB7XG4gICAgICAgIHVzZXJJbmZvWydjaGFubmVsTmFtZSddID0gY2hhbm5lbE5hbWU7XG4gICAgICAgIHVzZXJJbmZvWydjaGFubmVsQ2xhaW1JZCddID0gY2hhbm5lbENsYWltSWQ7XG4gICAgICAgIHJldHVybiBkYi5DZXJ0aWZpY2F0ZS5nZXRTaG9ydENoYW5uZWxJZEZyb21Mb25nQ2hhbm5lbElkKGNoYW5uZWxDbGFpbUlkLCBjaGFubmVsTmFtZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oc2hvcnRDaGFubmVsSWQgPT4ge1xuICAgICAgICB1c2VySW5mb1snc2hvcnRDaGFubmVsSWQnXSA9IHNob3J0Q2hhbm5lbElkO1xuICAgICAgICByZXNvbHZlKHVzZXJJbmZvKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgUGFzc3BvcnRMb2NhbFN0cmF0ZWd5KFxuICB7XG4gICAgdXNlcm5hbWVGaWVsZDogJ3VzZXJuYW1lJyxcbiAgICBwYXNzd29yZEZpZWxkOiAncGFzc3dvcmQnLFxuICB9LFxuICAodXNlcm5hbWUsIHBhc3N3b3JkLCBkb25lKSA9PiB7XG4gICAgcmV0dXJuIGRiLlVzZXJcbiAgICAgIC5maW5kT25lKHtcbiAgICAgICAgd2hlcmU6IHt1c2VyTmFtZTogdXNlcm5hbWV9LFxuICAgICAgfSlcbiAgICAgIC50aGVuKHVzZXIgPT4ge1xuICAgICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoJ25vIHVzZXIgZm91bmQnKTtcbiAgICAgICAgICByZXR1cm4gZG9uZShudWxsLCBmYWxzZSwge21lc3NhZ2U6ICdJbmNvcnJlY3QgdXNlcm5hbWUgb3IgcGFzc3dvcmQnfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVzZXIuY29tcGFyZVBhc3N3b3JkKHBhc3N3b3JkKVxuICAgICAgICAgIC50aGVuKGlzTWF0Y2ggPT4ge1xuICAgICAgICAgICAgaWYgKCFpc01hdGNoKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnaW5jb3JyZWN0IHBhc3N3b3JkJyk7XG4gICAgICAgICAgICAgIHJldHVybiBkb25lKG51bGwsIGZhbHNlLCB7bWVzc2FnZTogJ0luY29ycmVjdCB1c2VybmFtZSBvciBwYXNzd29yZCd9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnUGFzc3dvcmQgd2FzIGEgbWF0Y2gsIHJldHVybmluZyBVc2VyJyk7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVXNlckFuZENoYW5uZWxJbmZvKHVzZXIpXG4gICAgICAgICAgICAgIC50aGVuKHVzZXJJbmZvID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShudWxsLCB1c2VySW5mbyk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgcmV0dXJuIGRvbmUoZXJyb3IpO1xuICAgICAgfSk7XG4gIH0sXG4pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL3Bhc3Nwb3J0L2xvY2FsLWxvZ2luLmpzIiwiY29uc3QgbG9nZ2VyID0gcmVxdWlyZSgnd2luc3RvbicpO1xuY29uc3QgcGFzc3BvcnQgPSByZXF1aXJlKCdwYXNzcG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChhcHApID0+IHtcbiAgLy8gcm91dGUgZm9yIHNpZ24gdXBcbiAgYXBwLnBvc3QoJy9zaWdudXAnLCBwYXNzcG9ydC5hdXRoZW50aWNhdGUoJ2xvY2FsLXNpZ251cCcpLCAocmVxLCByZXMpID0+IHtcbiAgICBsb2dnZXIudmVyYm9zZShgc3VjY2Vzc2Z1bCBzaWdudXAgZm9yICR7cmVxLnVzZXIuY2hhbm5lbE5hbWV9YCk7XG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oe1xuICAgICAgc3VjY2VzcyAgICAgICA6IHRydWUsXG4gICAgICBjaGFubmVsTmFtZSAgIDogcmVxLnVzZXIuY2hhbm5lbE5hbWUsXG4gICAgICBjaGFubmVsQ2xhaW1JZDogcmVxLnVzZXIuY2hhbm5lbENsYWltSWQsXG4gICAgICBzaG9ydENoYW5uZWxJZDogcmVxLnVzZXIuc2hvcnRDaGFubmVsSWQsXG4gICAgfSk7XG4gIH0pO1xuICAvLyByb3V0ZSBmb3IgbG9nIGluXG4gIGFwcC5wb3N0KCcvbG9naW4nLCAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBwYXNzcG9ydC5hdXRoZW50aWNhdGUoJ2xvY2FsLWxvZ2luJywgKGVyciwgdXNlciwgaW5mbykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gbmV4dChlcnIpO1xuICAgICAgfVxuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbih7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgbWVzc2FnZTogaW5mby5tZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5kZWJ1Zygnc3VjY2Vzc2Z1bCBsb2dpbicpO1xuICAgICAgcmVxLmxvZ0luKHVzZXIsIChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBuZXh0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoMjAwKS5qc29uKHtcbiAgICAgICAgICBzdWNjZXNzICAgICAgIDogdHJ1ZSxcbiAgICAgICAgICBjaGFubmVsTmFtZSAgIDogcmVxLnVzZXIuY2hhbm5lbE5hbWUsXG4gICAgICAgICAgY2hhbm5lbENsYWltSWQ6IHJlcS51c2VyLmNoYW5uZWxDbGFpbUlkLFxuICAgICAgICAgIHNob3J0Q2hhbm5lbElkOiByZXEudXNlci5zaG9ydENoYW5uZWxJZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KShyZXEsIHJlcywgbmV4dCk7XG4gIH0pO1xuICAvLyByb3V0ZSB0byBsb2cgb3V0XG4gIGFwcC5nZXQoJy9sb2dvdXQnLCAocmVxLCByZXMpID0+IHtcbiAgICByZXEubG9nb3V0KCk7XG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oe3N1Y2Nlc3M6IHRydWUsIG1lc3NhZ2U6ICd5b3Ugc3VjY2Vzc2Z1bGx5IGxvZ2dlZCBvdXQnfSk7XG4gIH0pO1xuICAvLyBzZWUgaWYgdXNlciBpcyBhdXRoZW50aWNhdGVkLCBhbmQgcmV0dXJuIGNyZWRlbnRpYWxzIGlmIHNvXG4gIGFwcC5nZXQoJy91c2VyJywgKHJlcSwgcmVzKSA9PiB7XG4gICAgaWYgKHJlcS51c2VyKSB7XG4gICAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7c3VjY2VzczogdHJ1ZSwgZGF0YTogcmVxLnVzZXJ9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLnN0YXR1cyg0MDEpLmpzb24oe3N1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiAndXNlciBpcyBub3QgbG9nZ2VkIGluJ30pO1xuICAgIH1cbiAgfSk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL3JvdXRlcy9hdXRoLXJvdXRlcy5qcyIsImNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJ3dpbnN0b24nKTtcbmNvbnN0IG11bHRpcGFydCA9IHJlcXVpcmUoJ2Nvbm5lY3QtbXVsdGlwYXJ0eScpO1xuY29uc3QgeyBwdWJsaXNoaW5nOiB7IHVwbG9hZERpcmVjdG9yeSB9LCBkZXRhaWxzOiB7IGhvc3QgfSB9ID0gcmVxdWlyZSgnLi4vLi4vY29uZmlnL3NpdGVDb25maWcuanMnKTtcbmNvbnN0IG11bHRpcGFydE1pZGRsZXdhcmUgPSBtdWx0aXBhcnQoe3VwbG9hZERpcjogdXBsb2FkRGlyZWN0b3J5fSk7XG5jb25zdCBkYiA9IHJlcXVpcmUoJy4uL21vZGVscy9pbmRleCcpO1xuY29uc3QgeyBjbGFpbU5hbWVJc0F2YWlsYWJsZSwgY2hlY2tDaGFubmVsQXZhaWxhYmlsaXR5LCBwdWJsaXNoIH0gPSByZXF1aXJlKCcuLi9jb250cm9sbGVycy9wdWJsaXNoQ29udHJvbGxlci5qcycpO1xuY29uc3QgeyBnZXRDbGFpbUxpc3QsIHJlc29sdmVVcmksIGdldENsYWltIH0gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2xicnlBcGkuanMnKTtcbmNvbnN0IHsgYWRkR2V0UmVzdWx0c1RvRmlsZURhdGEsIGNyZWF0ZUJhc2ljUHVibGlzaFBhcmFtcywgY3JlYXRlVGh1bWJuYWlsUHVibGlzaFBhcmFtcywgcGFyc2VQdWJsaXNoQXBpUmVxdWVzdEJvZHksIHBhcnNlUHVibGlzaEFwaVJlcXVlc3RGaWxlcywgY3JlYXRlRmlsZURhdGEgfSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcHVibGlzaEhlbHBlcnMuanMnKTtcbmNvbnN0IGVycm9ySGFuZGxlcnMgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Vycm9ySGFuZGxlcnMuanMnKTtcbmNvbnN0IHsgc2VuZEdBVGltaW5nRXZlbnQgfSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvZ29vZ2xlQW5hbHl0aWNzLmpzJyk7XG5jb25zdCB7IGF1dGhlbnRpY2F0ZVVzZXIgfSA9IHJlcXVpcmUoJy4uL2F1dGgvYXV0aGVudGljYXRpb24uanMnKTtcbmNvbnN0IHsgZ2V0Q2hhbm5lbERhdGEsIGdldENoYW5uZWxDbGFpbXMsIGdldENsYWltSWQgfSA9IHJlcXVpcmUoJy4uL2NvbnRyb2xsZXJzL3NlcnZlQ29udHJvbGxlci5qcycpO1xuXG5jb25zdCBOT19DSEFOTkVMID0gJ05PX0NIQU5ORUwnO1xuY29uc3QgTk9fQ0xBSU0gPSAnTk9fQ0xBSU0nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChhcHApID0+IHtcbiAgLy8gcm91dGUgdG8gY2hlY2sgd2hldGhlciBzaXRlIGhhcyBwdWJsaXNoZWQgdG8gYSBjaGFubmVsXG4gIGFwcC5nZXQoJy9hcGkvY2hhbm5lbC9hdmFpbGFiaWxpdHkvOm5hbWUnLCAoeyBpcCwgb3JpZ2luYWxVcmwsIHBhcmFtczogeyBuYW1lIH0gfSwgcmVzKSA9PiB7XG4gICAgY29uc3QgZ2FTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNoZWNrQ2hhbm5lbEF2YWlsYWJpbGl0eShuYW1lKVxuICAgICAgLnRoZW4oYXZhaWxhYmxlTmFtZSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKGF2YWlsYWJsZU5hbWUpO1xuICAgICAgICBzZW5kR0FUaW1pbmdFdmVudCgnZW5kLXRvLWVuZCcsICdjbGFpbSBuYW1lIGF2YWlsYWJpbGl0eScsIG5hbWUsIGdhU3RhcnRUaW1lLCBEYXRlLm5vdygpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBlcnJvckhhbmRsZXJzLmhhbmRsZUVycm9yUmVzcG9uc2Uob3JpZ2luYWxVcmwsIGlwLCBlcnJvciwgcmVzKTtcbiAgICAgIH0pO1xuICB9KTtcbiAgLy8gcm91dGUgdG8gZ2V0IGEgc2hvcnQgY2hhbm5lbCBpZCBmcm9tIGxvbmcgY2hhbm5lbCBJZFxuICBhcHAuZ2V0KCcvYXBpL2NoYW5uZWwvc2hvcnQtaWQvOmxvbmdJZC86bmFtZScsICh7IGlwLCBvcmlnaW5hbFVybCwgcGFyYW1zIH0sIHJlcykgPT4ge1xuICAgIGRiLkNlcnRpZmljYXRlLmdldFNob3J0Q2hhbm5lbElkRnJvbUxvbmdDaGFubmVsSWQocGFyYW1zLmxvbmdJZCwgcGFyYW1zLm5hbWUpXG4gICAgICAudGhlbihzaG9ydElkID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cygyMDApLmpzb24oc2hvcnRJZCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgZXJyb3JIYW5kbGVycy5oYW5kbGVFcnJvclJlc3BvbnNlKG9yaWdpbmFsVXJsLCBpcCwgZXJyb3IsIHJlcyk7XG4gICAgICB9KTtcbiAgfSk7XG4gIGFwcC5nZXQoJy9hcGkvY2hhbm5lbC9kYXRhLzpjaGFubmVsTmFtZS86Y2hhbm5lbENsYWltSWQnLCAoeyBpcCwgb3JpZ2luYWxVcmwsIGJvZHksIHBhcmFtcyB9LCByZXMpID0+IHtcbiAgICBjb25zdCBjaGFubmVsTmFtZSA9IHBhcmFtcy5jaGFubmVsTmFtZTtcbiAgICBsZXQgY2hhbm5lbENsYWltSWQgPSBwYXJhbXMuY2hhbm5lbENsYWltSWQ7XG4gICAgaWYgKGNoYW5uZWxDbGFpbUlkID09PSAnbm9uZScpIGNoYW5uZWxDbGFpbUlkID0gbnVsbDtcbiAgICBnZXRDaGFubmVsRGF0YShjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIDApXG4gICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgaWYgKGRhdGEgPT09IE5PX0NIQU5ORUwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDQpLmpzb24oe3N1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiAnTm8gbWF0Y2hpbmcgY2hhbm5lbCB3YXMgZm91bmQnfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzLnN0YXR1cygyMDApLmpzb24oe3N1Y2Nlc3M6IHRydWUsIGRhdGF9KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBlcnJvckhhbmRsZXJzLmhhbmRsZUVycm9yUmVzcG9uc2Uob3JpZ2luYWxVcmwsIGlwLCBlcnJvciwgcmVzKTtcbiAgICAgIH0pO1xuICB9KTtcbiAgYXBwLmdldCgnL2FwaS9jaGFubmVsL2NsYWltcy86Y2hhbm5lbE5hbWUvOmNoYW5uZWxDbGFpbUlkLzpwYWdlJywgKHsgaXAsIG9yaWdpbmFsVXJsLCBib2R5LCBwYXJhbXMgfSwgcmVzKSA9PiB7XG4gICAgY29uc3QgY2hhbm5lbE5hbWUgPSBwYXJhbXMuY2hhbm5lbE5hbWU7XG4gICAgbGV0IGNoYW5uZWxDbGFpbUlkID0gcGFyYW1zLmNoYW5uZWxDbGFpbUlkO1xuICAgIGlmIChjaGFubmVsQ2xhaW1JZCA9PT0gJ25vbmUnKSBjaGFubmVsQ2xhaW1JZCA9IG51bGw7XG4gICAgY29uc3QgcGFnZSA9IHBhcmFtcy5wYWdlO1xuICAgIGdldENoYW5uZWxDbGFpbXMoY2hhbm5lbE5hbWUsIGNoYW5uZWxDbGFpbUlkLCBwYWdlKVxuICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgIGlmIChkYXRhID09PSBOT19DSEFOTkVMKSB7XG4gICAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDA0KS5qc29uKHtzdWNjZXNzOiBmYWxzZSwgbWVzc2FnZTogJ05vIG1hdGNoaW5nIGNoYW5uZWwgd2FzIGZvdW5kJ30pO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHtzdWNjZXNzOiB0cnVlLCBkYXRhfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgZXJyb3JIYW5kbGVycy5oYW5kbGVFcnJvclJlc3BvbnNlKG9yaWdpbmFsVXJsLCBpcCwgZXJyb3IsIHJlcyk7XG4gICAgICB9KTtcbiAgfSk7XG4gIC8vIHJvdXRlIHRvIHJ1biBhIGNsYWltX2xpc3QgcmVxdWVzdCBvbiB0aGUgZGFlbW9uXG4gIGFwcC5nZXQoJy9hcGkvY2xhaW0vbGlzdC86bmFtZScsICh7IGlwLCBvcmlnaW5hbFVybCwgcGFyYW1zIH0sIHJlcykgPT4ge1xuICAgIGdldENsYWltTGlzdChwYXJhbXMubmFtZSlcbiAgICAgIC50aGVuKGNsYWltc0xpc3QgPT4ge1xuICAgICAgICByZXMuc3RhdHVzKDIwMCkuanNvbihjbGFpbXNMaXN0KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBlcnJvckhhbmRsZXJzLmhhbmRsZUVycm9yUmVzcG9uc2Uob3JpZ2luYWxVcmwsIGlwLCBlcnJvciwgcmVzKTtcbiAgICAgIH0pO1xuICB9KTtcbiAgLy8gcm91dGUgdG8gZ2V0IGFuIGFzc2V0XG4gIGFwcC5nZXQoJy9hcGkvY2xhaW0vZ2V0LzpuYW1lLzpjbGFpbUlkJywgKHsgaXAsIG9yaWdpbmFsVXJsLCBwYXJhbXMgfSwgcmVzKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IHBhcmFtcy5uYW1lO1xuICAgIGNvbnN0IGNsYWltSWQgPSBwYXJhbXMuY2xhaW1JZDtcbiAgICAvLyByZXNvbHZlIHRoZSBjbGFpbVxuICAgIGRiLkNsYWltLnJlc29sdmVDbGFpbShuYW1lLCBjbGFpbUlkKVxuICAgICAgLnRoZW4ocmVzb2x2ZVJlc3VsdCA9PiB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBhIGNsYWltIGFjdHVhbGx5IGV4aXN0cyBhdCB0aGF0IHVyaVxuICAgICAgICBpZiAoIXJlc29sdmVSZXN1bHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG1hdGNoaW5nIHVyaSBmb3VuZCBpbiBDbGFpbSB0YWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWxlRGF0YSA9IGNyZWF0ZUZpbGVEYXRhKHJlc29sdmVSZXN1bHQpO1xuICAgICAgICAvLyBnZXQgdGhlIGNsYWltXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbZmlsZURhdGEsIGdldENsYWltKGAke25hbWV9IyR7Y2xhaW1JZH1gKV0pO1xuICAgICAgfSlcbiAgICAgIC50aGVuKChbIGZpbGVEYXRhLCBnZXRSZXN1bHQgXSkgPT4ge1xuICAgICAgICBmaWxlRGF0YSA9IGFkZEdldFJlc3VsdHNUb0ZpbGVEYXRhKGZpbGVEYXRhLCBnZXRSZXN1bHQpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW2RiLnVwc2VydChkYi5GaWxlLCBmaWxlRGF0YSwge25hbWUsIGNsYWltSWR9LCAnRmlsZScpLCBnZXRSZXN1bHRdKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoWyBmaWxlUmVjb3JkLCB7bWVzc2FnZSwgY29tcGxldGVkfSBdKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3VjY2VzczogdHJ1ZSwgbWVzc2FnZSwgY29tcGxldGVkIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGVycm9ySGFuZGxlcnMuaGFuZGxlRXJyb3JSZXNwb25zZShvcmlnaW5hbFVybCwgaXAsIGVycm9yLCByZXMpO1xuICAgICAgfSk7XG4gIH0pO1xuICAvLyByb3V0ZSB0byBjaGVjayB3aGV0aGVyIHRoaXMgc2l0ZSBwdWJsaXNoZWQgdG8gYSBjbGFpbVxuICBhcHAuZ2V0KCcvYXBpL2NsYWltL2F2YWlsYWJpbGl0eS86bmFtZScsICh7IGlwLCBvcmlnaW5hbFVybCwgcGFyYW1zOiB7IG5hbWUgfSB9LCByZXMpID0+IHtcbiAgICBjb25zdCBnYVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgY2xhaW1OYW1lSXNBdmFpbGFibGUobmFtZSlcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHJlc3VsdCk7XG4gICAgICAgIHNlbmRHQVRpbWluZ0V2ZW50KCdlbmQtdG8tZW5kJywgJ2NsYWltIG5hbWUgYXZhaWxhYmlsaXR5JywgbmFtZSwgZ2FTdGFydFRpbWUsIERhdGUubm93KCkpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGVycm9ySGFuZGxlcnMuaGFuZGxlRXJyb3JSZXNwb25zZShvcmlnaW5hbFVybCwgaXAsIGVycm9yLCByZXMpO1xuICAgICAgfSk7XG4gIH0pO1xuICAvLyByb3V0ZSB0byBydW4gYSByZXNvbHZlIHJlcXVlc3Qgb24gdGhlIGRhZW1vblxuICBhcHAuZ2V0KCcvYXBpL2NsYWltL3Jlc29sdmUvOm5hbWUvOmNsYWltSWQnLCAoeyBoZWFkZXJzLCBpcCwgb3JpZ2luYWxVcmwsIHBhcmFtcyB9LCByZXMpID0+IHtcbiAgICByZXNvbHZlVXJpKGAke3BhcmFtcy5uYW1lfSMke3BhcmFtcy5jbGFpbUlkfWApXG4gICAgICAudGhlbihyZXNvbHZlZFVyaSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHJlc29sdmVkVXJpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBlcnJvckhhbmRsZXJzLmhhbmRsZUVycm9yUmVzcG9uc2Uob3JpZ2luYWxVcmwsIGlwLCBlcnJvciwgcmVzKTtcbiAgICAgIH0pO1xuICB9KTtcbiAgLy8gcm91dGUgdG8gcnVuIGEgcHVibGlzaCByZXF1ZXN0IG9uIHRoZSBkYWVtb25cbiAgYXBwLnBvc3QoJy9hcGkvY2xhaW0vcHVibGlzaCcsIG11bHRpcGFydE1pZGRsZXdhcmUsICh7IGJvZHksIGZpbGVzLCBoZWFkZXJzLCBpcCwgb3JpZ2luYWxVcmwsIHVzZXIgfSwgcmVzKSA9PiB7XG4gICAgLy8gZGVmaW5lIHZhcmlhYmxlc1xuICAgIGxldCAgY2hhbm5lbE5hbWUsIGNoYW5uZWxJZCwgY2hhbm5lbFBhc3N3b3JkLCBkZXNjcmlwdGlvbiwgZmlsZU5hbWUsIGZpbGVQYXRoLCBmaWxlVHlwZSwgZ2FTdGFydFRpbWUsIGxpY2Vuc2UsIG5hbWUsIG5zZncsIHRodW1ibmFpbCwgdGh1bWJuYWlsRmlsZU5hbWUsIHRodW1ibmFpbEZpbGVQYXRoLCB0aHVtYm5haWxGaWxlVHlwZSwgdGl0bGU7XG4gICAgLy8gcmVjb3JkIHRoZSBzdGFydCB0aW1lIG9mIHRoZSByZXF1ZXN0XG4gICAgZ2FTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIC8vIHZhbGlkYXRlIHRoZSBib2R5IGFuZCBmaWxlcyBvZiB0aGUgcmVxdWVzdFxuICAgIHRyeSB7XG4gICAgICAvLyB2YWxpZGF0ZUFwaVB1Ymxpc2hSZXF1ZXN0KGJvZHksIGZpbGVzKTtcbiAgICAgICh7bmFtZSwgbnNmdywgbGljZW5zZSwgdGl0bGUsIGRlc2NyaXB0aW9uLCB0aHVtYm5haWx9ID0gcGFyc2VQdWJsaXNoQXBpUmVxdWVzdEJvZHkoYm9keSkpO1xuICAgICAgKHtmaWxlTmFtZSwgZmlsZVBhdGgsIGZpbGVUeXBlLCB0aHVtYm5haWxGaWxlTmFtZSwgdGh1bWJuYWlsRmlsZVBhdGgsIHRodW1ibmFpbEZpbGVUeXBlfSA9IHBhcnNlUHVibGlzaEFwaVJlcXVlc3RGaWxlcyhmaWxlcykpO1xuICAgICAgKHtjaGFubmVsTmFtZSwgY2hhbm5lbElkLCBjaGFubmVsUGFzc3dvcmR9ID0gYm9keSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbih7c3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2V9KTtcbiAgICB9XG4gICAgLy8gY2hlY2sgY2hhbm5lbCBhdXRob3JpemF0aW9uXG4gICAgUHJvbWlzZS5hbGwoW1xuICAgICAgYXV0aGVudGljYXRlVXNlcihjaGFubmVsTmFtZSwgY2hhbm5lbElkLCBjaGFubmVsUGFzc3dvcmQsIHVzZXIpLFxuICAgICAgY2xhaW1OYW1lSXNBdmFpbGFibGUobmFtZSksXG4gICAgICBjcmVhdGVCYXNpY1B1Ymxpc2hQYXJhbXMoZmlsZVBhdGgsIG5hbWUsIHRpdGxlLCBkZXNjcmlwdGlvbiwgbGljZW5zZSwgbnNmdywgdGh1bWJuYWlsKSxcbiAgICAgIGNyZWF0ZVRodW1ibmFpbFB1Ymxpc2hQYXJhbXModGh1bWJuYWlsRmlsZVBhdGgsIG5hbWUsIGxpY2Vuc2UsIG5zZncpLFxuICAgIF0pXG4gICAgICAudGhlbigoW3tjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWR9LCB2YWxpZGF0ZWRDbGFpbU5hbWUsIHB1Ymxpc2hQYXJhbXMsIHRodW1ibmFpbFB1Ymxpc2hQYXJhbXNdKSA9PiB7XG4gICAgICAgIC8vIGFkZCBjaGFubmVsIGRldGFpbHMgdG8gdGhlIHB1Ymxpc2ggcGFyYW1zXG4gICAgICAgIGlmIChjaGFubmVsTmFtZSAmJiBjaGFubmVsQ2xhaW1JZCkge1xuICAgICAgICAgIHB1Ymxpc2hQYXJhbXNbJ2NoYW5uZWxfbmFtZSddID0gY2hhbm5lbE5hbWU7XG4gICAgICAgICAgcHVibGlzaFBhcmFtc1snY2hhbm5lbF9pZCddID0gY2hhbm5lbENsYWltSWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHVibGlzaCB0aGUgdGh1bWJuYWlsXG4gICAgICAgIGlmICh0aHVtYm5haWxQdWJsaXNoUGFyYW1zKSB7XG4gICAgICAgICAgcHVibGlzaCh0aHVtYm5haWxQdWJsaXNoUGFyYW1zLCB0aHVtYm5haWxGaWxlTmFtZSwgdGh1bWJuYWlsRmlsZVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHB1Ymxpc2ggdGhlIGFzc2V0XG4gICAgICAgIHJldHVybiBwdWJsaXNoKHB1Ymxpc2hQYXJhbXMsIGZpbGVOYW1lLCBmaWxlVHlwZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cygyMDApLmpzb24oe1xuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogJ3B1Ymxpc2ggY29tcGxldGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICAgICAgZGF0YSAgIDoge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNsYWltSWQ6IHJlc3VsdC5jbGFpbV9pZCxcbiAgICAgICAgICAgIHVybCAgICA6IGAke2hvc3R9LyR7cmVzdWx0LmNsYWltX2lkfS8ke25hbWV9YCxcbiAgICAgICAgICAgIGxicnlUeCA6IHJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gcmVjb3JkIHRoZSBwdWJsaXNoIGVuZCB0aW1lIGFuZCBzZW5kIHRvIGdvb2dsZSBhbmFseXRpY3NcbiAgICAgICAgc2VuZEdBVGltaW5nRXZlbnQoJ2VuZC10by1lbmQnLCAncHVibGlzaCcsIGZpbGVUeXBlLCBnYVN0YXJ0VGltZSwgRGF0ZS5ub3coKSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgZXJyb3JIYW5kbGVycy5oYW5kbGVFcnJvclJlc3BvbnNlKG9yaWdpbmFsVXJsLCBpcCwgZXJyb3IsIHJlcyk7XG4gICAgICB9KTtcbiAgfSk7XG4gIC8vIHJvdXRlIHRvIGdldCBhIHNob3J0IGNsYWltIGlkIGZyb20gbG9uZyBjbGFpbSBJZFxuICBhcHAuZ2V0KCcvYXBpL2NsYWltL3Nob3J0LWlkLzpsb25nSWQvOm5hbWUnLCAoeyBpcCwgb3JpZ2luYWxVcmwsIGJvZHksIHBhcmFtcyB9LCByZXMpID0+IHtcbiAgICBkYi5DbGFpbS5nZXRTaG9ydENsYWltSWRGcm9tTG9uZ0NsYWltSWQocGFyYW1zLmxvbmdJZCwgcGFyYW1zLm5hbWUpXG4gICAgICAudGhlbihzaG9ydElkID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cygyMDApLmpzb24oe3N1Y2Nlc3M6IHRydWUsIGRhdGE6IHNob3J0SWR9KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBlcnJvckhhbmRsZXJzLmhhbmRsZUVycm9yUmVzcG9uc2Uob3JpZ2luYWxVcmwsIGlwLCBlcnJvciwgcmVzKTtcbiAgICAgIH0pO1xuICB9KTtcbiAgYXBwLnBvc3QoJy9hcGkvY2xhaW0vbG9uZy1pZCcsICh7IGlwLCBvcmlnaW5hbFVybCwgYm9keSwgcGFyYW1zIH0sIHJlcykgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZygnYm9keTonLCBib2R5KTtcbiAgICBjb25zdCBjaGFubmVsTmFtZSA9IGJvZHkuY2hhbm5lbE5hbWU7XG4gICAgY29uc3QgY2hhbm5lbENsYWltSWQgPSBib2R5LmNoYW5uZWxDbGFpbUlkO1xuICAgIGNvbnN0IGNsYWltTmFtZSA9IGJvZHkuY2xhaW1OYW1lO1xuICAgIGNvbnN0IGNsYWltSWQgPSBib2R5LmNsYWltSWQ7XG4gICAgZ2V0Q2xhaW1JZChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIGNsYWltTmFtZSwgY2xhaW1JZClcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IE5PX0NIQU5ORUwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDQpLmpzb24oe3N1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiAnTm8gbWF0Y2hpbmcgY2hhbm5lbCBjb3VsZCBiZSBmb3VuZCd9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09PSBOT19DTEFJTSkge1xuICAgICAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwNCkuanNvbih7c3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6ICdObyBtYXRjaGluZyBjbGFpbSBpZCBjb3VsZCBiZSBmb3VuZCd9KTtcbiAgICAgICAgfVxuICAgICAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7c3VjY2VzczogdHJ1ZSwgZGF0YTogcmVzdWx0fSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgZXJyb3JIYW5kbGVycy5oYW5kbGVFcnJvclJlc3BvbnNlKG9yaWdpbmFsVXJsLCBpcCwgZXJyb3IsIHJlcyk7XG4gICAgICB9KTtcbiAgfSk7XG4gIGFwcC5nZXQoJy9hcGkvY2xhaW0vZGF0YS86Y2xhaW1OYW1lLzpjbGFpbUlkJywgKHsgaXAsIG9yaWdpbmFsVXJsLCBib2R5LCBwYXJhbXMgfSwgcmVzKSA9PiB7XG4gICAgY29uc3QgY2xhaW1OYW1lID0gcGFyYW1zLmNsYWltTmFtZTtcbiAgICBsZXQgY2xhaW1JZCA9IHBhcmFtcy5jbGFpbUlkO1xuICAgIGlmIChjbGFpbUlkID09PSAnbm9uZScpIGNsYWltSWQgPSBudWxsO1xuICAgIGRiLkNsYWltLnJlc29sdmVDbGFpbShjbGFpbU5hbWUsIGNsYWltSWQpXG4gICAgICAudGhlbihjbGFpbUluZm8gPT4ge1xuICAgICAgICBpZiAoIWNsYWltSW5mbykge1xuICAgICAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwNCkuanNvbih7c3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6ICdObyBjbGFpbSBjb3VsZCBiZSBmb3VuZCd9KTtcbiAgICAgICAgfVxuICAgICAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7c3VjY2VzczogdHJ1ZSwgZGF0YTogY2xhaW1JbmZvfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgZXJyb3JIYW5kbGVycy5oYW5kbGVFcnJvclJlc3BvbnNlKG9yaWdpbmFsVXJsLCBpcCwgZXJyb3IsIHJlcyk7XG4gICAgICB9KTtcbiAgfSk7XG4gIC8vIHJvdXRlIHRvIHNlZSBpZiBhc3NldCBpcyBhdmFpbGFibGUgbG9jYWxseVxuICBhcHAuZ2V0KCcvYXBpL2ZpbGUvYXZhaWxhYmlsaXR5LzpuYW1lLzpjbGFpbUlkJywgKHsgaXAsIG9yaWdpbmFsVXJsLCBwYXJhbXMgfSwgcmVzKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IHBhcmFtcy5uYW1lO1xuICAgIGNvbnN0IGNsYWltSWQgPSBwYXJhbXMuY2xhaW1JZDtcbiAgICBkYi5GaWxlLmZpbmRPbmUoe3doZXJlOiB7bmFtZSwgY2xhaW1JZH19KVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXMuc3RhdHVzKDIwMCkuanNvbih7c3VjY2VzczogdHJ1ZSwgZGF0YTogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHtzdWNjZXNzOiB0cnVlLCBkYXRhOiBmYWxzZX0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGVycm9ySGFuZGxlcnMuaGFuZGxlRXJyb3JSZXNwb25zZShvcmlnaW5hbFVybCwgaXAsIGVycm9yLCByZXMpO1xuICAgICAgfSk7XG4gIH0pO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9yb3V0ZXMvYXBpLXJvdXRlcy5qcyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvbm5lY3QtbXVsdGlwYXJ0eVwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcImNvbm5lY3QtbXVsdGlwYXJ0eVwiXG4vLyBtb2R1bGUgaWQgPSA3N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJjb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5jb25zdCBkYiA9IHJlcXVpcmUoJy4uL21vZGVscy9pbmRleCcpO1xuY29uc3QgbGJyeUFwaSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbGJyeUFwaS5qcycpO1xuY29uc3QgcHVibGlzaEhlbHBlcnMgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3B1Ymxpc2hIZWxwZXJzLmpzJyk7XG5jb25zdCB7IHB1Ymxpc2hpbmc6IHsgcHJpbWFyeUNsYWltQWRkcmVzcywgYWRkaXRpb25hbENsYWltQWRkcmVzc2VzIH0gfSA9IHJlcXVpcmUoJy4uLy4uL2NvbmZpZy9zaXRlQ29uZmlnLmpzJyk7XG5jb25zdCBTZXF1ZWxpemUgPSByZXF1aXJlKCdzZXF1ZWxpemUnKTtcbmNvbnN0IE9wID0gU2VxdWVsaXplLk9wO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcHVibGlzaCAocHVibGlzaFBhcmFtcywgZmlsZU5hbWUsIGZpbGVUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBwdWJsaXNoUmVzdWx0cywgY2VydGlmaWNhdGVJZCwgY2hhbm5lbE5hbWU7XG4gICAgICAvLyBwdWJsaXNoIHRoZSBmaWxlXG4gICAgICByZXR1cm4gbGJyeUFwaS5wdWJsaXNoQ2xhaW0ocHVibGlzaFBhcmFtcylcbiAgICAgICAgLnRoZW4odHggPT4ge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBTdWNjZXNzZnVsbHkgcHVibGlzaGVkICR7cHVibGlzaFBhcmFtcy5uYW1lfSAke2ZpbGVOYW1lfWAsIHR4KTtcbiAgICAgICAgICBwdWJsaXNoUmVzdWx0cyA9IHR4O1xuICAgICAgICAgIC8vIGdldCB0aGUgY2hhbm5lbCBpbmZvcm1hdGlvblxuICAgICAgICAgIGlmIChwdWJsaXNoUGFyYW1zLmNoYW5uZWxfbmFtZSkge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGB0aGlzIGNsYWltIHdhcyBwdWJsaXNoZWQgaW4gY2hhbm5lbDogJHtwdWJsaXNoUGFyYW1zLmNoYW5uZWxfbmFtZX1gKTtcbiAgICAgICAgICAgIHJldHVybiBkYi5DaGFubmVsLmZpbmRPbmUoe3doZXJlOiB7Y2hhbm5lbE5hbWU6IHB1Ymxpc2hQYXJhbXMuY2hhbm5lbF9uYW1lfX0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoJ3RoaXMgY2xhaW0gd2FzIG5vdCBwdWJsaXNoZWQgaW4gYSBjaGFubmVsJyk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKGNoYW5uZWwgPT4ge1xuICAgICAgICAvLyBzZXQgY2hhbm5lbCBpbmZvcm1hdGlvblxuICAgICAgICAgIGNlcnRpZmljYXRlSWQgPSBudWxsO1xuICAgICAgICAgIGNoYW5uZWxOYW1lID0gbnVsbDtcbiAgICAgICAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgICAgICAgY2VydGlmaWNhdGVJZCA9IGNoYW5uZWwuY2hhbm5lbENsYWltSWQ7XG4gICAgICAgICAgICBjaGFubmVsTmFtZSA9IGNoYW5uZWwuY2hhbm5lbE5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgY2VydGlmaWNhdGVJZDogJHtjZXJ0aWZpY2F0ZUlkfWApO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIC8vIGNyZWF0ZSB0aGUgRmlsZSByZWNvcmRcbiAgICAgICAgICBjb25zdCBmaWxlUmVjb3JkID0ge1xuICAgICAgICAgICAgbmFtZSAgICAgICA6IHB1Ymxpc2hQYXJhbXMubmFtZSxcbiAgICAgICAgICAgIGNsYWltSWQgICAgOiBwdWJsaXNoUmVzdWx0cy5jbGFpbV9pZCxcbiAgICAgICAgICAgIHRpdGxlICAgICAgOiBwdWJsaXNoUGFyYW1zLm1ldGFkYXRhLnRpdGxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHB1Ymxpc2hQYXJhbXMubWV0YWRhdGEuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBhZGRyZXNzICAgIDogcHVibGlzaFBhcmFtcy5jbGFpbV9hZGRyZXNzLFxuICAgICAgICAgICAgb3V0cG9pbnQgICA6IGAke3B1Ymxpc2hSZXN1bHRzLnR4aWR9OiR7cHVibGlzaFJlc3VsdHMubm91dH1gLFxuICAgICAgICAgICAgaGVpZ2h0ICAgICA6IDAsXG4gICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgIGZpbGVQYXRoICAgOiBwdWJsaXNoUGFyYW1zLmZpbGVfcGF0aCxcbiAgICAgICAgICAgIGZpbGVUeXBlLFxuICAgICAgICAgICAgbnNmdyAgICAgICA6IHB1Ymxpc2hQYXJhbXMubWV0YWRhdGEubnNmdyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgQ2xhaW0gcmVjb3JkXG4gICAgICAgICAgY29uc3QgY2xhaW1SZWNvcmQgPSB7XG4gICAgICAgICAgICBuYW1lICAgICAgIDogcHVibGlzaFBhcmFtcy5uYW1lLFxuICAgICAgICAgICAgY2xhaW1JZCAgICA6IHB1Ymxpc2hSZXN1bHRzLmNsYWltX2lkLFxuICAgICAgICAgICAgdGl0bGUgICAgICA6IHB1Ymxpc2hQYXJhbXMubWV0YWRhdGEudGl0bGUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcHVibGlzaFBhcmFtcy5tZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGFkZHJlc3MgICAgOiBwdWJsaXNoUGFyYW1zLmNsYWltX2FkZHJlc3MsXG4gICAgICAgICAgICB0aHVtYm5haWwgIDogcHVibGlzaFBhcmFtcy5tZXRhZGF0YS50aHVtYm5haWwsXG4gICAgICAgICAgICBvdXRwb2ludCAgIDogYCR7cHVibGlzaFJlc3VsdHMudHhpZH06JHtwdWJsaXNoUmVzdWx0cy5ub3V0fWAsXG4gICAgICAgICAgICBoZWlnaHQgICAgIDogMCxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBmaWxlVHlwZSxcbiAgICAgICAgICAgIG5zZncgICAgICAgOiBwdWJsaXNoUGFyYW1zLm1ldGFkYXRhLm5zZncsXG4gICAgICAgICAgICBhbW91bnQgICAgIDogcHVibGlzaFBhcmFtcy5iaWQsXG4gICAgICAgICAgICBjZXJ0aWZpY2F0ZUlkLFxuICAgICAgICAgICAgY2hhbm5lbE5hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyB1cHNlcnQgY3JpdGVyaWFcbiAgICAgICAgICBjb25zdCB1cHNlcnRDcml0ZXJpYSA9IHtcbiAgICAgICAgICAgIG5hbWUgICA6IHB1Ymxpc2hQYXJhbXMubmFtZSxcbiAgICAgICAgICAgIGNsYWltSWQ6IHB1Ymxpc2hSZXN1bHRzLmNsYWltX2lkLFxuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gdXBzZXJ0IHRoZSByZWNvcmRzXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtkYi51cHNlcnQoZGIuRmlsZSwgZmlsZVJlY29yZCwgdXBzZXJ0Q3JpdGVyaWEsICdGaWxlJyksIGRiLnVwc2VydChkYi5DbGFpbSwgY2xhaW1SZWNvcmQsIHVwc2VydENyaXRlcmlhLCAnQ2xhaW0nKV0pO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoW2ZpbGUsIGNsYWltXSkgPT4ge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnRmlsZSBhbmQgQ2xhaW0gcmVjb3JkcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCcpO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbZmlsZS5zZXRDbGFpbShjbGFpbSksIGNsYWltLnNldEZpbGUoZmlsZSldKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnRmlsZSBhbmQgQ2xhaW0gcmVjb3JkcyBzdWNjZXNzZnVsbHkgYXNzb2NpYXRlZCcpO1xuICAgICAgICAgIHJlc29sdmUocHVibGlzaFJlc3VsdHMpOyAvLyByZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIHJlc3VsdCBmcm9tIGxicnlBcGkucHVibGlzaENsYWltO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignUFVCTElTSCBFUlJPUicsIGVycm9yKTtcbiAgICAgICAgICBwdWJsaXNoSGVscGVycy5kZWxldGVUZW1wb3JhcnlGaWxlKHB1Ymxpc2hQYXJhbXMuZmlsZV9wYXRoKTsgLy8gZGVsZXRlIHRoZSBsb2NhbCBmaWxlXG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG4gIGNsYWltTmFtZUlzQXZhaWxhYmxlIChuYW1lKSB7XG4gICAgY29uc3QgY2xhaW1BZGRyZXNzZXMgPSBhZGRpdGlvbmFsQ2xhaW1BZGRyZXNzZXMgfHwgW107XG4gICAgY2xhaW1BZGRyZXNzZXMucHVzaChwcmltYXJ5Q2xhaW1BZGRyZXNzKTtcbiAgICAvLyBmaW5kIGFueSByZWNvcmRzIHdoZXJlIHRoZSBuYW1lIGlzIHVzZWRcbiAgICByZXR1cm4gZGIuQ2xhaW1cbiAgICAgIC5maW5kQWxsKHtcbiAgICAgICAgYXR0cmlidXRlczogWydhZGRyZXNzJ10sXG4gICAgICAgIHdoZXJlICAgICA6IHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgIFtPcC5vcl06IGNsYWltQWRkcmVzc2VzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPj0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhhdCBjbGFpbSBpcyBhbHJlYWR5IGluIHVzZScpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICB9LFxuICBjaGVja0NoYW5uZWxBdmFpbGFiaWxpdHkgKG5hbWUpIHtcbiAgICByZXR1cm4gZGIuQ2hhbm5lbFxuICAgICAgLmZpbmRBbGwoe1xuICAgICAgICB3aGVyZTogeyBjaGFubmVsTmFtZTogbmFtZSB9LFxuICAgICAgfSlcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoYXQgY2hhbm5lbCBoYXMgYWxyZWFkeSBiZWVuIGNsYWltZWQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICB9LFxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9jb250cm9sbGVycy9wdWJsaXNoQ29udHJvbGxlci5qcyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZzXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwiZnNcIlxuLy8gbW9kdWxlIGlkID0gNzlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiY29uc3QgZGIgPSByZXF1aXJlKCcuLi9tb2RlbHMvaW5kZXgnKTtcbmNvbnN0IGxvZ2dlciA9IHJlcXVpcmUoJ3dpbnN0b24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGF1dGhlbnRpY2F0ZVVzZXIgKGNoYW5uZWxOYW1lLCBjaGFubmVsSWQsIGNoYW5uZWxQYXNzd29yZCwgdXNlcikge1xuICAgIC8vIGNhc2U6IG5vIGNoYW5uZWxOYW1lIG9yIGNoYW5uZWwgSWQgYXJlIHByb3ZpZGVkIChhbm9ueW1vdXMpLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdXNlciB0b2tlbiBpcyBwcm92aWRlZFxuICAgIGlmICghY2hhbm5lbE5hbWUgJiYgIWNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hhbm5lbE5hbWUgICA6IG51bGwsXG4gICAgICAgIGNoYW5uZWxDbGFpbUlkOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gY2FzZTogY2hhbm5lbE5hbWUgb3IgY2hhbm5lbCBJZCBhcmUgcHJvdmlkZWQgd2l0aCB1c2VyIHRva2VuXG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIGlmIChjaGFubmVsTmFtZSAmJiBjaGFubmVsTmFtZSAhPT0gdXNlci5jaGFubmVsTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBwcm92aWRlZCBjaGFubmVsIG5hbWUgZG9lcyBub3QgbWF0Y2ggdXNlciBjcmVkZW50aWFscycpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5uZWxJZCAmJiBjaGFubmVsSWQgIT09IHVzZXIuY2hhbm5lbENsYWltSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgcHJvdmlkZWQgY2hhbm5lbCBpZCBkb2VzIG5vdCBtYXRjaCB1c2VyIGNyZWRlbnRpYWxzJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjaGFubmVsTmFtZSAgIDogdXNlci5jaGFubmVsTmFtZSxcbiAgICAgICAgY2hhbm5lbENsYWltSWQ6IHVzZXIuY2hhbm5lbENsYWltSWQsXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBjYXNlOiBjaGFubmVsTmFtZSBvciBjaGFubmVsIElkIGFyZSBwcm92aWRlZCB3aXRoIHBhc3N3b3JkIGluc3RlYWQgb2YgdXNlciB0b2tlblxuICAgIGlmICghY2hhbm5lbFBhc3N3b3JkKSB0aHJvdyBuZXcgRXJyb3IoJ25vIGNoYW5uZWwgcGFzc3dvcmQgcHJvdmlkZWQnKTtcbiAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHMuYXV0aGVudGljYXRlQ2hhbm5lbENyZWRlbnRpYWxzKGNoYW5uZWxOYW1lLCBjaGFubmVsSWQsIGNoYW5uZWxQYXNzd29yZCk7XG4gIH0sXG4gIGF1dGhlbnRpY2F0ZUNoYW5uZWxDcmVkZW50aWFscyAoY2hhbm5lbE5hbWUsIGNoYW5uZWxJZCwgdXNlclBhc3N3b3JkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGhvaXN0ZWQgdmFyaWFibGVzXG4gICAgICBsZXQgY2hhbm5lbERhdGE7XG4gICAgICAvLyBidWlsZCB0aGUgcGFyYW1zIGZvciBmaW5kaW5nIHRoZSBjaGFubmVsXG4gICAgICBsZXQgY2hhbm5lbEZpbmRQYXJhbXMgPSB7fTtcbiAgICAgIGlmIChjaGFubmVsTmFtZSkgY2hhbm5lbEZpbmRQYXJhbXNbJ2NoYW5uZWxOYW1lJ10gPSBjaGFubmVsTmFtZTtcbiAgICAgIGlmIChjaGFubmVsSWQpIGNoYW5uZWxGaW5kUGFyYW1zWydjaGFubmVsQ2xhaW1JZCddID0gY2hhbm5lbElkO1xuICAgICAgLy8gZmluZCB0aGUgY2hhbm5lbFxuICAgICAgZGIuQ2hhbm5lbFxuICAgICAgICAuZmluZE9uZSh7XG4gICAgICAgICAgd2hlcmU6IGNoYW5uZWxGaW5kUGFyYW1zLFxuICAgICAgICB9KVxuICAgICAgICAudGhlbihjaGFubmVsID0+IHtcbiAgICAgICAgICBpZiAoIWNoYW5uZWwpIHtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zygnbm8gY2hhbm5lbCBmb3VuZCcpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiBmYWlsZWQsIHlvdSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhhdCBjaGFubmVsJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoYW5uZWxEYXRhID0gY2hhbm5lbC5nZXQoKTtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoJ2NoYW5uZWwgZGF0YTonLCBjaGFubmVsRGF0YSk7XG4gICAgICAgICAgcmV0dXJuIGRiLlVzZXIuZmluZE9uZSh7XG4gICAgICAgICAgICB3aGVyZTogeyB1c2VyTmFtZTogY2hhbm5lbERhdGEuY2hhbm5lbE5hbWUuc3Vic3RyaW5nKDEpIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKHVzZXIgPT4ge1xuICAgICAgICAgIGlmICghdXNlcikge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdubyB1c2VyIGZvdW5kJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCwgeW91IGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGF0IGNoYW5uZWwnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHVzZXIuY29tcGFyZVBhc3N3b3JkKHVzZXJQYXNzd29yZCk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKGlzTWF0Y2ggPT4ge1xuICAgICAgICAgIGlmICghaXNNYXRjaCkge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdpbmNvcnJlY3QgcGFzc3dvcmQnKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gZmFpbGVkLCB5b3UgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRoYXQgY2hhbm5lbCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2dnZXIuZGVidWcoJy4uLnBhc3N3b3JkIHdhcyBhIG1hdGNoLi4uJyk7XG4gICAgICAgICAgcmVzb2x2ZShjaGFubmVsRGF0YSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2F1dGgvYXV0aGVudGljYXRpb24uanMiLCJjb25zdCBDTEFJTVNfUEVSX1BBR0UgPSAxMjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJldHVyblBhZ2luYXRlZENoYW5uZWxDbGFpbXMgKGNoYW5uZWxOYW1lLCBsb25nQ2hhbm5lbENsYWltSWQsIGNsYWltcywgcGFnZSkge1xuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBtb2R1bGUuZXhwb3J0cy5kZXRlcm1pbmVUb3RhbFBhZ2VzKGNsYWltcyk7XG4gICAgY29uc3QgcGFnaW5hdGlvblBhZ2UgPSBtb2R1bGUuZXhwb3J0cy5nZXRQYWdlRnJvbVF1ZXJ5KHBhZ2UpO1xuICAgIGNvbnN0IHZpZXdEYXRhID0ge1xuICAgICAgY2hhbm5lbE5hbWUgICAgICAgOiBjaGFubmVsTmFtZSxcbiAgICAgIGxvbmdDaGFubmVsQ2xhaW1JZDogbG9uZ0NoYW5uZWxDbGFpbUlkLFxuICAgICAgY2xhaW1zICAgICAgICAgICAgOiBtb2R1bGUuZXhwb3J0cy5leHRyYWN0UGFnZUZyb21DbGFpbXMoY2xhaW1zLCBwYWdpbmF0aW9uUGFnZSksXG4gICAgICBwcmV2aW91c1BhZ2UgICAgICA6IG1vZHVsZS5leHBvcnRzLmRldGVybWluZVByZXZpb3VzUGFnZShwYWdpbmF0aW9uUGFnZSksXG4gICAgICBjdXJyZW50UGFnZSAgICAgICA6IHBhZ2luYXRpb25QYWdlLFxuICAgICAgbmV4dFBhZ2UgICAgICAgICAgOiBtb2R1bGUuZXhwb3J0cy5kZXRlcm1pbmVOZXh0UGFnZSh0b3RhbFBhZ2VzLCBwYWdpbmF0aW9uUGFnZSksXG4gICAgICB0b3RhbFBhZ2VzICAgICAgICA6IHRvdGFsUGFnZXMsXG4gICAgICB0b3RhbFJlc3VsdHMgICAgICA6IG1vZHVsZS5leHBvcnRzLmRldGVybWluZVRvdGFsQ2xhaW1zKGNsYWltcyksXG4gICAgfTtcbiAgICByZXR1cm4gdmlld0RhdGE7XG4gIH0sXG4gIGdldFBhZ2VGcm9tUXVlcnkgKHBhZ2UpIHtcbiAgICBpZiAocGFnZSkge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KHBhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gMTtcbiAgfSxcbiAgZXh0cmFjdFBhZ2VGcm9tQ2xhaW1zIChjbGFpbXMsIHBhZ2VOdW1iZXIpIHtcbiAgICBpZiAoIWNsYWltcykge1xuICAgICAgcmV0dXJuIFtdOyAgLy8gaWYgbm8gY2xhaW1zLCByZXR1cm4gdGhpcyBkZWZhdWx0XG4gICAgfVxuICAgIC8vIGxvZ2dlci5kZWJ1ZygnY2xhaW1zIGlzIGFycmF5PycsIEFycmF5LmlzQXJyYXkoY2xhaW1zKSk7XG4gICAgLy8gbG9nZ2VyLmRlYnVnKGBwYWdlTnVtYmVyICR7cGFnZU51bWJlcn0gaXMgbnVtYmVyP2AsIE51bWJlci5pc0ludGVnZXIocGFnZU51bWJlcikpO1xuICAgIGNvbnN0IGNsYWltU3RhcnRJbmRleCA9IChwYWdlTnVtYmVyIC0gMSkgKiBDTEFJTVNfUEVSX1BBR0U7XG4gICAgY29uc3QgY2xhaW1FbmRJbmRleCA9IGNsYWltU3RhcnRJbmRleCArIENMQUlNU19QRVJfUEFHRTtcbiAgICBjb25zdCBwYWdlT2ZDbGFpbXMgPSBjbGFpbXMuc2xpY2UoY2xhaW1TdGFydEluZGV4LCBjbGFpbUVuZEluZGV4KTtcbiAgICByZXR1cm4gcGFnZU9mQ2xhaW1zO1xuICB9LFxuICBkZXRlcm1pbmVUb3RhbFBhZ2VzIChjbGFpbXMpIHtcbiAgICBpZiAoIWNsYWltcykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRvdGFsQ2xhaW1zID0gY2xhaW1zLmxlbmd0aDtcbiAgICAgIGlmICh0b3RhbENsYWltcyA8IENMQUlNU19QRVJfUEFHRSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZ1bGxQYWdlcyA9IE1hdGguZmxvb3IodG90YWxDbGFpbXMgLyBDTEFJTVNfUEVSX1BBR0UpO1xuICAgICAgY29uc3QgcmVtYWluZGVyID0gdG90YWxDbGFpbXMgJSBDTEFJTVNfUEVSX1BBR0U7XG4gICAgICBpZiAocmVtYWluZGVyID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmdWxsUGFnZXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVsbFBhZ2VzICsgMTtcbiAgICB9XG4gIH0sXG4gIGRldGVybWluZVByZXZpb3VzUGFnZSAoY3VycmVudFBhZ2UpIHtcbiAgICBpZiAoY3VycmVudFBhZ2UgPT09IDEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudFBhZ2UgLSAxO1xuICB9LFxuICBkZXRlcm1pbmVOZXh0UGFnZSAodG90YWxQYWdlcywgY3VycmVudFBhZ2UpIHtcbiAgICBpZiAoY3VycmVudFBhZ2UgPT09IHRvdGFsUGFnZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudFBhZ2UgKyAxO1xuICB9LFxuICBkZXRlcm1pbmVUb3RhbENsYWltcyAoY2xhaW1zKSB7XG4gICAgaWYgKCFjbGFpbXMpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gY2xhaW1zLmxlbmd0aDtcbiAgfSxcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2ZXIvaGVscGVycy9jaGFubmVsUGFnaW5hdGlvbi5qcyIsImNvbnN0IHsgZGV0YWlsczogaG9zdCB9ID0gcmVxdWlyZSgnLi4vLi4vY29uZmlnL3NpdGVDb25maWcuanMnKTtcbmNvbnN0IGhhbmRsZVBhZ2VSZW5kZXIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2hhbmRsZVBhZ2VSZW5kZXIuanN4Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKGFwcCkgPT4ge1xuICAvLyByb3V0ZSBmb3IgdGhlIGhvbWUgcGFnZVxuICBhcHAuZ2V0KCcvJywgKHJlcSwgcmVzKSA9PiB7XG4gICAgaGFuZGxlUGFnZVJlbmRlcihyZXEsIHJlcyk7XG4gIH0pO1xuICAvLyByb3V0ZSB0byBkaXNwbGF5IGxvZ2luIHBhZ2VcbiAgYXBwLmdldCgnL2xvZ2luJywgKHJlcSwgcmVzKSA9PiB7XG4gICAgaGFuZGxlUGFnZVJlbmRlcihyZXEsIHJlcyk7XG4gIH0pO1xuICAvLyByb3V0ZSB0byBzaG93ICdhYm91dCcgcGFnZVxuICBhcHAuZ2V0KCcvYWJvdXQnLCAocmVxLCByZXMpID0+IHtcbiAgICBoYW5kbGVQYWdlUmVuZGVyKHJlcSwgcmVzKTtcbiAgfSk7XG4gIC8vIHJvdXRlIHRvIGRpc3BsYXkgYSBsaXN0IG9mIHRoZSB0cmVuZGluZyBpbWFnZXNcbiAgYXBwLmdldCgnL3RyZW5kaW5nJywgKHJlcSwgcmVzKSA9PiB7XG4gICAgcmVzLnN0YXR1cygzMDEpLnJlZGlyZWN0KCcvcG9wdWxhcicpO1xuICB9KTtcbiAgYXBwLmdldCgnL3BvcHVsYXInLCAocmVxLCByZXMpID0+IHtcbiAgICBoYW5kbGVQYWdlUmVuZGVyKHJlcSwgcmVzKTtcbiAgfSk7XG4gIC8vIHJvdXRlIHRvIGRpc3BsYXkgYSBsaXN0IG9mIHRoZSB0cmVuZGluZyBpbWFnZXNcbiAgYXBwLmdldCgnL25ldycsIChyZXEsIHJlcykgPT4ge1xuICAgIGhhbmRsZVBhZ2VSZW5kZXIocmVxLCByZXMpO1xuICB9KTtcbiAgLy8gcm91dGUgdG8gc2VuZCBlbWJlZGFibGUgdmlkZW8gcGxheWVyIChmb3IgdHdpdHRlcilcbiAgYXBwLmdldCgnL2VtYmVkLzpjbGFpbUlkLzpuYW1lJywgKHsgcGFyYW1zIH0sIHJlcykgPT4ge1xuICAgIGNvbnN0IGNsYWltSWQgPSBwYXJhbXMuY2xhaW1JZDtcbiAgICBjb25zdCBuYW1lID0gcGFyYW1zLm5hbWU7XG4gICAgLy8gZ2V0IGFuZCByZW5kZXIgdGhlIGNvbnRlbnRcbiAgICByZXMuc3RhdHVzKDIwMCkucmVuZGVyKCdlbWJlZCcsIHsgbGF5b3V0OiAnZW1iZWQnLCBob3N0LCBjbGFpbUlkLCBuYW1lIH0pO1xuICB9KTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zZXJ2ZXIvcm91dGVzL3BhZ2Utcm91dGVzLmpzIiwiaW1wb3J0ICogYXMgYWN0aW9ucyBmcm9tICdjb25zdGFudHMvcHVibGlzaF9hY3Rpb25fdHlwZXMnO1xuaW1wb3J0IHsgTE9HSU4gfSBmcm9tICdjb25zdGFudHMvcHVibGlzaF9jaGFubmVsX3NlbGVjdF9zdGF0ZXMnO1xuY29uc3QgeyBwdWJsaXNoaW5nIH0gPSByZXF1aXJlKCcuLi8uLi9jb25maWcvc2l0ZUNvbmZpZy5qcycpO1xuXG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGRpc2FibGVkICAgICAgICAgIDogcHVibGlzaGluZy5kaXNhYmxlZCxcbiAgZGlzYWJsZWRNZXNzYWdlICAgOiBwdWJsaXNoaW5nLmRpc2FibGVkTWVzc2FnZSxcbiAgcHVibGlzaEluQ2hhbm5lbCAgOiBmYWxzZSxcbiAgc2VsZWN0ZWRDaGFubmVsICAgOiBMT0dJTixcbiAgc2hvd01ldGFkYXRhSW5wdXRzOiBmYWxzZSxcbiAgc3RhdHVzICAgICAgICAgICAgOiB7XG4gICAgc3RhdHVzIDogbnVsbCxcbiAgICBtZXNzYWdlOiBudWxsLFxuICB9LFxuICBlcnJvcjoge1xuICAgIGZpbGUgICAgICAgICA6IG51bGwsXG4gICAgdXJsICAgICAgICAgIDogbnVsbCxcbiAgICBjaGFubmVsICAgICAgOiBudWxsLFxuICAgIHB1Ymxpc2hTdWJtaXQ6IG51bGwsXG4gIH0sXG4gIGZpbGUgICAgOiBudWxsLFxuICBjbGFpbSAgIDogJycsXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGUgICAgICA6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICBsaWNlbnNlICAgIDogJycsXG4gICAgbnNmdyAgICAgICA6IGZhbHNlLFxuICB9LFxuICB0aHVtYm5haWw6IG51bGwsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBhY3Rpb25zLkZJTEVfU0VMRUNURUQ6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgaW5pdGlhbFN0YXRlLCB7ICAvLyBub3RlOiBjbGVhcnMgdG8gaW5pdGlhbCBzdGF0ZVxuICAgICAgICBmaWxlOiBhY3Rpb24uZGF0YSxcbiAgICAgIH0pO1xuICAgIGNhc2UgYWN0aW9ucy5GSUxFX0NMRUFSOlxuICAgICAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbiAgICBjYXNlIGFjdGlvbnMuTUVUQURBVEFfVVBEQVRFOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIG1ldGFkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5tZXRhZGF0YSwge1xuICAgICAgICAgIFthY3Rpb24uZGF0YS5uYW1lXTogYWN0aW9uLmRhdGEudmFsdWUsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgY2FzZSBhY3Rpb25zLkNMQUlNX1VQREFURTpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICBjbGFpbTogYWN0aW9uLmRhdGEsXG4gICAgICB9KTtcbiAgICBjYXNlIGFjdGlvbnMuU0VUX1BVQkxJU0hfSU5fQ0hBTk5FTDpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICBwdWJsaXNoSW5DaGFubmVsOiBhY3Rpb24uY2hhbm5lbCxcbiAgICAgIH0pO1xuICAgIGNhc2UgYWN0aW9ucy5QVUJMSVNIX1NUQVRVU19VUERBVEU6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgc3RhdHVzOiBhY3Rpb24uZGF0YSxcbiAgICAgIH0pO1xuICAgIGNhc2UgYWN0aW9ucy5FUlJPUl9VUERBVEU6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgZXJyb3I6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmVycm9yLCB7XG4gICAgICAgICAgW2FjdGlvbi5kYXRhLm5hbWVdOiBhY3Rpb24uZGF0YS52YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICBjYXNlIGFjdGlvbnMuU0VMRUNURURfQ0hBTk5FTF9VUERBVEU6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgc2VsZWN0ZWRDaGFubmVsOiBhY3Rpb24uZGF0YSxcbiAgICAgIH0pO1xuICAgIGNhc2UgYWN0aW9ucy5UT0dHTEVfTUVUQURBVEFfSU5QVVRTOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIHNob3dNZXRhZGF0YUlucHV0czogYWN0aW9uLmRhdGEsXG4gICAgICB9KTtcbiAgICBjYXNlIGFjdGlvbnMuVEhVTUJOQUlMX05FVzpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICB0aHVtYm5haWw6IGFjdGlvbi5kYXRhLFxuICAgICAgfSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3JlZHVjZXJzL3B1Ymxpc2guanMiLCJpbXBvcnQgKiBhcyBhY3Rpb25zIGZyb20gJ2NvbnN0YW50cy9jaGFubmVsX2FjdGlvbl90eXBlcyc7XG5cbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgbG9nZ2VkSW5DaGFubmVsOiB7XG4gICAgbmFtZSAgIDogbnVsbCxcbiAgICBzaG9ydElkOiBudWxsLFxuICAgIGxvbmdJZCA6IG51bGwsXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBhY3Rpb25zLkNIQU5ORUxfVVBEQVRFOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIGxvZ2dlZEluQ2hhbm5lbDogYWN0aW9uLmRhdGEsXG4gICAgICB9KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvcmVkdWNlcnMvY2hhbm5lbC5qcyIsImltcG9ydCAqIGFzIGFjdGlvbnMgZnJvbSAnY29uc3RhbnRzL3Nob3dfYWN0aW9uX3R5cGVzJztcbmltcG9ydCB7IExPQ0FMX0NIRUNLLCBFUlJPUiB9IGZyb20gJ2NvbnN0YW50cy9hc3NldF9kaXNwbGF5X3N0YXRlcyc7XG5cbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgcmVxdWVzdDoge1xuICAgIGVycm9yOiBudWxsLFxuICAgIHR5cGUgOiBudWxsLFxuICAgIGlkICAgOiBudWxsLFxuICB9LFxuICByZXF1ZXN0TGlzdCA6IHt9LFxuICBjaGFubmVsTGlzdCA6IHt9LFxuICBhc3NldExpc3QgICA6IHt9LFxuICBkaXNwbGF5QXNzZXQ6IHtcbiAgICBlcnJvciA6IG51bGwsXG4gICAgc3RhdHVzOiBMT0NBTF9DSEVDSyxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChzdGF0ZSA9IGluaXRpYWxTdGF0ZSwgYWN0aW9uKSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAvLyBoYW5kbGUgcmVxdWVzdFxuICAgIGNhc2UgYWN0aW9ucy5SRVFVRVNUX0VSUk9SOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlcXVlc3QsIHtcbiAgICAgICAgICBlcnJvcjogYWN0aW9uLmRhdGEsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgY2FzZSBhY3Rpb25zLlJFUVVFU1RfVVBEQVRFOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlcXVlc3QsIHtcbiAgICAgICAgICB0eXBlOiBhY3Rpb24uZGF0YS5yZXF1ZXN0VHlwZSxcbiAgICAgICAgICBpZCAgOiBhY3Rpb24uZGF0YS5yZXF1ZXN0SWQsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgLy8gc3RvcmUgcmVxdWVzdHNcbiAgICBjYXNlIGFjdGlvbnMuUkVRVUVTVF9MSVNUX0FERDpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICByZXF1ZXN0TGlzdDogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVxdWVzdExpc3QsIHtcbiAgICAgICAgICBbYWN0aW9uLmRhdGEuaWRdOiB7XG4gICAgICAgICAgICBlcnJvcjogYWN0aW9uLmRhdGEuZXJyb3IsXG4gICAgICAgICAgICBrZXkgIDogYWN0aW9uLmRhdGEua2V5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgLy8gYXNzZXQgZGF0YVxuICAgIGNhc2UgYWN0aW9ucy5BU1NFVF9BREQ6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgYXNzZXRMaXN0OiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hc3NldExpc3QsIHtcbiAgICAgICAgICBbYWN0aW9uLmRhdGEuaWRdOiB7XG4gICAgICAgICAgICBlcnJvciAgICA6IGFjdGlvbi5kYXRhLmVycm9yLFxuICAgICAgICAgICAgbmFtZSAgICAgOiBhY3Rpb24uZGF0YS5uYW1lLFxuICAgICAgICAgICAgY2xhaW1JZCAgOiBhY3Rpb24uZGF0YS5jbGFpbUlkLFxuICAgICAgICAgICAgc2hvcnRJZCAgOiBhY3Rpb24uZGF0YS5zaG9ydElkLFxuICAgICAgICAgICAgY2xhaW1EYXRhOiBhY3Rpb24uZGF0YS5jbGFpbURhdGEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICAvLyBjaGFubmVsIGRhdGFcbiAgICBjYXNlIGFjdGlvbnMuQ0hBTk5FTF9BREQ6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgY2hhbm5lbExpc3Q6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmNoYW5uZWxMaXN0LCB7XG4gICAgICAgICAgW2FjdGlvbi5kYXRhLmlkXToge1xuICAgICAgICAgICAgbmFtZSAgICAgIDogYWN0aW9uLmRhdGEubmFtZSxcbiAgICAgICAgICAgIGxvbmdJZCAgICA6IGFjdGlvbi5kYXRhLmxvbmdJZCxcbiAgICAgICAgICAgIHNob3J0SWQgICA6IGFjdGlvbi5kYXRhLnNob3J0SWQsXG4gICAgICAgICAgICBjbGFpbXNEYXRhOiBhY3Rpb24uZGF0YS5jbGFpbXNEYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgY2FzZSBhY3Rpb25zLkNIQU5ORUxfQ0xBSU1TX1VQREFURV9TVUNDRVNTOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIGNoYW5uZWxMaXN0OiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5jaGFubmVsTGlzdCwge1xuICAgICAgICAgIFthY3Rpb24uZGF0YS5jaGFubmVsTGlzdElkXTogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuY2hhbm5lbExpc3RbYWN0aW9uLmRhdGEuY2hhbm5lbExpc3RJZF0sIHtcbiAgICAgICAgICAgIGNsYWltc0RhdGE6IGFjdGlvbi5kYXRhLmNsYWltc0RhdGEsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgLy8gZGlzcGxheSBhbiBhc3NldFxuICAgIGNhc2UgYWN0aW9ucy5GSUxFX0FWQUlMQUJJTElUWV9VUERBVEU6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgZGlzcGxheUFzc2V0OiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5kaXNwbGF5QXNzZXQsIHtcbiAgICAgICAgICBzdGF0dXM6IGFjdGlvbi5kYXRhLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIGNhc2UgYWN0aW9ucy5ESVNQTEFZX0FTU0VUX0VSUk9SOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIGRpc3BsYXlBc3NldDogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZGlzcGxheUFzc2V0LCB7XG4gICAgICAgICAgZXJyb3IgOiBhY3Rpb24uZGF0YSxcbiAgICAgICAgICBzdGF0dXM6IEVSUk9SLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9yZWR1Y2Vycy9zaG93LmpzIiwiY29uc3Qgc2l0ZUNvbmZpZyA9IHJlcXVpcmUoJy4uLy4uL2NvbmZpZy9zaXRlQ29uZmlnLmpzJyk7XG5cbmNvbnN0IHtcbiAgYW5hbHl0aWNzOiB7XG4gICAgZ29vZ2xlSWQ6IGdvb2dsZUFuYWx5dGljc0lkLFxuICB9LFxuICBhc3NldERlZmF1bHRzOiB7XG4gICAgdGh1bWJuYWlsOiBkZWZhdWx0VGh1bWJuYWlsLFxuICAgIGRlc2NyaXB0aW9uOiBkZWZhdWx0RGVzY3JpcHRpb24sXG4gIH0sXG4gIGRldGFpbHM6IHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBob3N0LFxuICAgIHRpdGxlLFxuICAgIHR3aXR0ZXIsXG4gIH0sXG59ID0gc2l0ZUNvbmZpZztcblxuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBkZXNjcmlwdGlvbixcbiAgZ29vZ2xlQW5hbHl0aWNzSWQsXG4gIGhvc3QsXG4gIHRpdGxlLFxuICB0d2l0dGVyLFxuICBkZWZhdWx0RGVzY3JpcHRpb24sXG4gIGRlZmF1bHRUaHVtYm5haWwsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3JlZHVjZXJzL3NpdGUuanMiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1nYVwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInJlYWN0LWdhXCJcbi8vIG1vZHVsZSBpZCA9IDg3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU0VPIGZyb20gJ2NvbXBvbmVudHMvU0VPJztcbmltcG9ydCBOYXZCYXIgZnJvbSAnY29udGFpbmVycy9OYXZCYXInO1xuaW1wb3J0IFB1Ymxpc2hUb29sIGZyb20gJ2NvbnRhaW5lcnMvUHVibGlzaFRvb2wnO1xuXG5jbGFzcyBIb21lUGFnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlciAoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXsncm93IHJvdy0tdGFsbCBmbGV4LWNvbnRhaW5lci0tY29sdW1uJ30+XG4gICAgICAgIDxTRU8gLz5cbiAgICAgICAgPE5hdkJhciAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J3JvdyByb3ctLXRhbGwgcm93LS1wYWRkZWQgZmxleC1jb250YWluZXItLWNvbHVtbid9PlxuICAgICAgICAgIDxQdWJsaXNoVG9vbCAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEhvbWVQYWdlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3BhZ2VzL0hvbWVQYWdlL2luZGV4LmpzeCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgSGVsbWV0IGZyb20gJ3JlYWN0LWhlbG1ldCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgeyBjcmVhdGVQYWdlVGl0bGUgfSBmcm9tICd1dGlscy9wYWdlVGl0bGUnO1xuaW1wb3J0IHsgY3JlYXRlTWV0YVRhZ3MgfSBmcm9tICd1dGlscy9tZXRhVGFncyc7XG5pbXBvcnQgeyBjcmVhdGVDYW5vbmljYWxMaW5rIH0gZnJvbSAndXRpbHMvY2Fub25pY2FsTGluayc7XG5cbmNsYXNzIFNFTyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlciAoKSB7XG4gICAgLy8gcHJvcHMgZnJvbSBzdGF0ZVxuICAgIGNvbnN0IHsgZGVmYXVsdERlc2NyaXB0aW9uLCBkZWZhdWx0VGh1bWJuYWlsLCBzaXRlRGVzY3JpcHRpb24sIHNpdGVIb3N0LCBzaXRlVGl0bGUsIHNpdGVUd2l0dGVyIH0gPSB0aGlzLnByb3BzO1xuICAgIC8vIHByb3BzIGZyb20gcGFyZW50XG4gICAgY29uc3QgeyBhc3NldCwgY2hhbm5lbCwgcGFnZVVyaSB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgeyBwYWdlVGl0bGUgfSA9IHRoaXMucHJvcHM7XG4gICAgLy8gY3JlYXRlIHBhZ2UgdGl0bGUsIHRhZ3MsIGFuZCBjYW5vbmljYWwgbGlua1xuICAgIHBhZ2VUaXRsZSA9IGNyZWF0ZVBhZ2VUaXRsZShzaXRlVGl0bGUsIHBhZ2VUaXRsZSk7XG4gICAgY29uc3QgbWV0YVRhZ3MgPSBjcmVhdGVNZXRhVGFncyhzaXRlRGVzY3JpcHRpb24sIHNpdGVIb3N0LCBzaXRlVGl0bGUsIHNpdGVUd2l0dGVyLCBhc3NldCwgY2hhbm5lbCwgZGVmYXVsdERlc2NyaXB0aW9uLCBkZWZhdWx0VGh1bWJuYWlsKTtcbiAgICBjb25zdCBjYW5vbmljYWxMaW5rID0gY3JlYXRlQ2Fub25pY2FsTGluayhhc3NldCwgY2hhbm5lbCwgcGFnZVVyaSwgc2l0ZUhvc3QpO1xuICAgIC8vIHJlbmRlciByZXN1bHRzXG4gICAgcmV0dXJuIChcbiAgICAgIDxIZWxtZXRcbiAgICAgICAgdGl0bGU9e3BhZ2VUaXRsZX1cbiAgICAgICAgbWV0YT17bWV0YVRhZ3N9XG4gICAgICAgIGxpbms9e1t7cmVsOiAnY2Fub25pY2FsJywgaHJlZjogY2Fub25pY2FsTGlua31dfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59O1xuXG5TRU8ucHJvcFR5cGVzID0ge1xuICBwYWdlVGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHBhZ2VVcmkgIDogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2hhbm5lbCAgOiBQcm9wVHlwZXMub2JqZWN0LFxuICBhc3NldCAgICA6IFByb3BUeXBlcy5vYmplY3QsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBTRU87XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29tcG9uZW50cy9TRU8vdmlldy5qc3giLCJleHBvcnQgY29uc3QgY3JlYXRlUGFnZVRpdGxlID0gKHNpdGVUaXRsZSwgcGFnZVRpdGxlKSA9PiB7XG4gIGlmICghcGFnZVRpdGxlKSB7XG4gICAgcmV0dXJuIGAke3NpdGVUaXRsZX1gO1xuICB9XG4gIHJldHVybiBgJHtzaXRlVGl0bGV9IC0gJHtwYWdlVGl0bGV9YDtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvdXRpbHMvcGFnZVRpdGxlLmpzIiwiY29uc3QgZGV0ZXJtaW5lT2dUaHVtYm5haWxDb250ZW50VHlwZSA9ICh0aHVtYm5haWwpID0+IHtcbiAgaWYgKHRodW1ibmFpbCkge1xuICAgIGNvbnN0IGZpbGVFeHQgPSB0aHVtYm5haWwuc3Vic3RyaW5nKHRodW1ibmFpbC5sYXN0SW5kZXhPZignLicpKTtcbiAgICBzd2l0Y2ggKGZpbGVFeHQpIHtcbiAgICAgIGNhc2UgJ2pwZWcnOlxuICAgICAgY2FzZSAnanBnJzpcbiAgICAgICAgcmV0dXJuICdpbWFnZS9qcGVnJztcbiAgICAgIGNhc2UgJ3BuZyc6XG4gICAgICAgIHJldHVybiAnaW1hZ2UvcG5nJztcbiAgICAgIGNhc2UgJ2dpZic6XG4gICAgICAgIHJldHVybiAnaW1hZ2UvZ2lmJztcbiAgICAgIGNhc2UgJ21wNCc6XG4gICAgICAgIHJldHVybiAndmlkZW8vbXA0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnaW1hZ2UvanBlZyc7XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn07XG5cbmNvbnN0IGNyZWF0ZUJhc2ljTWV0YVRhZ3MgPSAoc2l0ZUhvc3QsIHNpdGVEZXNjcmlwdGlvbiwgc2l0ZVRpdGxlLCBzaXRlVHdpdHRlcikgPT4ge1xuICByZXR1cm4gW1xuICAgIHtwcm9wZXJ0eTogJ29nOnRpdGxlJywgY29udGVudDogc2l0ZVRpdGxlfSxcbiAgICB7cHJvcGVydHk6ICdvZzp1cmwnLCBjb250ZW50OiBzaXRlSG9zdH0sXG4gICAge3Byb3BlcnR5OiAnb2c6c2l0ZV9uYW1lJywgY29udGVudDogc2l0ZVRpdGxlfSxcbiAgICB7cHJvcGVydHk6ICdvZzpkZXNjcmlwdGlvbicsIGNvbnRlbnQ6IHNpdGVEZXNjcmlwdGlvbn0sXG4gICAge3Byb3BlcnR5OiAndHdpdHRlcjpzaXRlJywgY29udGVudDogc2l0ZVR3aXR0ZXJ9LFxuICAgIHtwcm9wZXJ0eTogJ3R3aXR0ZXI6Y2FyZCcsIGNvbnRlbnQ6ICdzdW1tYXJ5J30sXG4gIF07XG59O1xuXG5jb25zdCBjcmVhdGVDaGFubmVsTWV0YVRhZ3MgPSAoc2l0ZVRpdGxlLCBzaXRlSG9zdCwgc2l0ZVR3aXR0ZXIsIGNoYW5uZWwpID0+IHtcbiAgY29uc3QgeyBuYW1lLCBsb25nSWQgfSA9IGNoYW5uZWw7XG4gIHJldHVybiBbXG4gICAge3Byb3BlcnR5OiAnb2c6dGl0bGUnLCBjb250ZW50OiBgJHtuYW1lfSBvbiAke3NpdGVUaXRsZX1gfSxcbiAgICB7cHJvcGVydHk6ICdvZzp1cmwnLCBjb250ZW50OiBgJHtzaXRlSG9zdH0vJHtuYW1lfToke2xvbmdJZH1gfSxcbiAgICB7cHJvcGVydHk6ICdvZzpzaXRlX25hbWUnLCBjb250ZW50OiBzaXRlVGl0bGV9LFxuICAgIHtwcm9wZXJ0eTogJ29nOmRlc2NyaXB0aW9uJywgY29udGVudDogYCR7bmFtZX0sIGEgY2hhbm5lbCBvbiAke3NpdGVUaXRsZX1gfSxcbiAgICB7cHJvcGVydHk6ICd0d2l0dGVyOnNpdGUnLCBjb250ZW50OiBzaXRlVHdpdHRlcn0sXG4gICAge3Byb3BlcnR5OiAndHdpdHRlcjpjYXJkJywgY29udGVudDogJ3N1bW1hcnknfSxcbiAgXTtcbn07XG5cbmNvbnN0IGNyZWF0ZUFzc2V0TWV0YVRhZ3MgPSAoc2l0ZUhvc3QsIHNpdGVUaXRsZSwgc2l0ZVR3aXR0ZXIsIGFzc2V0LCBkZWZhdWx0RGVzY3JpcHRpb24sIGRlZmF1bHRUaHVtYm5haWwpID0+IHtcbiAgY29uc3QgeyBjbGFpbURhdGEgfSA9IGFzc2V0O1xuICBjb25zdCB7IGNvbnRlbnRUeXBlIH0gPSBjbGFpbURhdGE7XG4gIGNvbnN0IGVtYmVkVXJsID0gYCR7c2l0ZUhvc3R9LyR7Y2xhaW1EYXRhLmNsYWltSWR9LyR7Y2xhaW1EYXRhLm5hbWV9YDtcbiAgY29uc3Qgc2hvd1VybCA9IGAke3NpdGVIb3N0fS8ke2NsYWltRGF0YS5jbGFpbUlkfS8ke2NsYWltRGF0YS5uYW1lfWA7XG4gIGNvbnN0IHNvdXJjZSA9IGAke3NpdGVIb3N0fS8ke2NsYWltRGF0YS5jbGFpbUlkfS8ke2NsYWltRGF0YS5uYW1lfS4ke2NsYWltRGF0YS5maWxlRXh0fWA7XG4gIGNvbnN0IG9nVGl0bGUgPSBjbGFpbURhdGEudGl0bGUgfHwgY2xhaW1EYXRhLm5hbWU7XG4gIGNvbnN0IG9nRGVzY3JpcHRpb24gPSBjbGFpbURhdGEuZGVzY3JpcHRpb24gfHwgZGVmYXVsdERlc2NyaXB0aW9uO1xuICBjb25zdCBvZ1RodW1ibmFpbENvbnRlbnRUeXBlID0gZGV0ZXJtaW5lT2dUaHVtYm5haWxDb250ZW50VHlwZShjbGFpbURhdGEudGh1bWJuYWlsKTtcbiAgY29uc3Qgb2dUaHVtYm5haWwgPSBjbGFpbURhdGEudGh1bWJuYWlsIHx8IGRlZmF1bHRUaHVtYm5haWw7XG4gIGNvbnN0IG1ldGFUYWdzID0gW1xuICAgIHtwcm9wZXJ0eTogJ29nOnRpdGxlJywgY29udGVudDogb2dUaXRsZX0sXG4gICAge3Byb3BlcnR5OiAnb2c6dXJsJywgY29udGVudDogc2hvd1VybH0sXG4gICAge3Byb3BlcnR5OiAnb2c6c2l0ZV9uYW1lJywgY29udGVudDogc2l0ZVRpdGxlfSxcbiAgICB7cHJvcGVydHk6ICdvZzpkZXNjcmlwdGlvbicsIGNvbnRlbnQ6IG9nRGVzY3JpcHRpb259LFxuICAgIHtwcm9wZXJ0eTogJ29nOmltYWdlOndpZHRoJywgY29udGVudDogNjAwfSxcbiAgICB7cHJvcGVydHk6ICdvZzppbWFnZTpoZWlnaHQnLCBjb250ZW50OiAzMTV9LFxuICAgIHtwcm9wZXJ0eTogJ3R3aXR0ZXI6c2l0ZScsIGNvbnRlbnQ6IHNpdGVUd2l0dGVyfSxcbiAgXTtcbiAgaWYgKGNvbnRlbnRUeXBlID09PSAndmlkZW8vbXA0JyB8fCBjb250ZW50VHlwZSA9PT0gJ3ZpZGVvL3dlYm0nKSB7XG4gICAgbWV0YVRhZ3MucHVzaCh7cHJvcGVydHk6ICdvZzp2aWRlbycsIGNvbnRlbnQ6IHNvdXJjZX0pO1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAnb2c6dmlkZW86c2VjdXJlX3VybCcsIGNvbnRlbnQ6IHNvdXJjZX0pO1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAnb2c6dmlkZW86dHlwZScsIGNvbnRlbnQ6IGNvbnRlbnRUeXBlfSk7XG4gICAgbWV0YVRhZ3MucHVzaCh7cHJvcGVydHk6ICdvZzppbWFnZScsIGNvbnRlbnQ6IG9nVGh1bWJuYWlsfSk7XG4gICAgbWV0YVRhZ3MucHVzaCh7cHJvcGVydHk6ICdvZzppbWFnZTp0eXBlJywgY29udGVudDogb2dUaHVtYm5haWxDb250ZW50VHlwZX0pO1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAnb2c6dHlwZScsIGNvbnRlbnQ6ICd2aWRlbyd9KTtcbiAgICBtZXRhVGFncy5wdXNoKHtwcm9wZXJ0eTogJ3R3aXR0ZXI6Y2FyZCcsIGNvbnRlbnQ6ICdwbGF5ZXInfSk7XG4gICAgbWV0YVRhZ3MucHVzaCh7cHJvcGVydHk6ICd0d2l0dGVyOnBsYXllcicsIGNvbnRlbnQ6IGVtYmVkVXJsfSk7XG4gICAgbWV0YVRhZ3MucHVzaCh7cHJvcGVydHk6ICd0d2l0dGVyOnBsYXllcjp3aWR0aCcsIGNvbnRlbnQ6IDYwMH0pO1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAndHdpdHRlcjp0ZXh0OnBsYXllcl93aWR0aCcsIGNvbnRlbnQ6IDYwMH0pO1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAndHdpdHRlcjpwbGF5ZXI6aGVpZ2h0JywgY29udGVudDogMzM3fSk7XG4gICAgbWV0YVRhZ3MucHVzaCh7cHJvcGVydHk6ICd0d2l0dGVyOnBsYXllcjpzdHJlYW0nLCBjb250ZW50OiBzb3VyY2V9KTtcbiAgICBtZXRhVGFncy5wdXNoKHtwcm9wZXJ0eTogJ3R3aXR0ZXI6cGxheWVyOnN0cmVhbTpjb250ZW50X3R5cGUnLCBjb250ZW50OiBjb250ZW50VHlwZX0pO1xuICB9IGVsc2Uge1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAnb2c6aW1hZ2UnLCBjb250ZW50OiBzb3VyY2V9KTtcbiAgICBtZXRhVGFncy5wdXNoKHtwcm9wZXJ0eTogJ29nOmltYWdlOnR5cGUnLCBjb250ZW50OiBjb250ZW50VHlwZX0pO1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAnb2c6dHlwZScsIGNvbnRlbnQ6ICdhcnRpY2xlJ30pO1xuICAgIG1ldGFUYWdzLnB1c2goe3Byb3BlcnR5OiAndHdpdHRlcjpjYXJkJywgY29udGVudDogJ3N1bW1hcnlfbGFyZ2VfaW1hZ2UnfSk7XG4gIH1cbiAgcmV0dXJuIG1ldGFUYWdzO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1ldGFUYWdzID0gKHNpdGVEZXNjcmlwdGlvbiwgc2l0ZUhvc3QsIHNpdGVUaXRsZSwgc2l0ZVR3aXR0ZXIsIGFzc2V0LCBjaGFubmVsLCBkZWZhdWx0RGVzY3JpcHRpb24sIGRlZmF1bHRUaHVtYm5haWwpID0+IHtcbiAgaWYgKGFzc2V0KSB7XG4gICAgcmV0dXJuIGNyZWF0ZUFzc2V0TWV0YVRhZ3Moc2l0ZUhvc3QsIHNpdGVUaXRsZSwgc2l0ZVR3aXR0ZXIsIGFzc2V0LCBkZWZhdWx0RGVzY3JpcHRpb24sIGRlZmF1bHRUaHVtYm5haWwpO1xuICB9O1xuICBpZiAoY2hhbm5lbCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFubmVsTWV0YVRhZ3Moc2l0ZUhvc3QsIHNpdGVUaXRsZSwgc2l0ZVR3aXR0ZXIsIGNoYW5uZWwpO1xuICB9O1xuICByZXR1cm4gY3JlYXRlQmFzaWNNZXRhVGFncyhzaXRlRGVzY3JpcHRpb24sIHNpdGVIb3N0LCBzaXRlVGl0bGUsIHNpdGVUd2l0dGVyKTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvdXRpbHMvbWV0YVRhZ3MuanMiLCJjb25zdCBjcmVhdGVCYXNpY0Nhbm9uaWNhbExpbmsgPSAocGFnZSwgc2l0ZUhvc3QpID0+IHtcbiAgcmV0dXJuIGAke3NpdGVIb3N0fS8ke3BhZ2V9YDtcbn07XG5cbmNvbnN0IGNyZWF0ZUFzc2V0Q2Fub25pY2FsTGluayA9IChhc3NldCwgc2l0ZUhvc3QpID0+IHtcbiAgbGV0IGNoYW5uZWxOYW1lLCBjZXJ0aWZpY2F0ZUlkLCBuYW1lLCBjbGFpbUlkO1xuICBpZiAoYXNzZXQuY2xhaW1EYXRhKSB7XG4gICAgKHsgY2hhbm5lbE5hbWUsIGNlcnRpZmljYXRlSWQsIG5hbWUsIGNsYWltSWQgfSA9IGFzc2V0LmNsYWltRGF0YSk7XG4gIH07XG4gIGlmIChjaGFubmVsTmFtZSkge1xuICAgIHJldHVybiBgJHtzaXRlSG9zdH0vJHtjaGFubmVsTmFtZX06JHtjZXJ0aWZpY2F0ZUlkfS8ke25hbWV9YDtcbiAgfTtcbiAgcmV0dXJuIGAke3NpdGVIb3N0fS8ke2NsYWltSWR9LyR7bmFtZX1gO1xufTtcblxuY29uc3QgY3JlYXRlQ2hhbm5lbENhbm9uaWNhbExpbmsgPSAoY2hhbm5lbCwgc2l0ZUhvc3QpID0+IHtcbiAgY29uc3QgeyBuYW1lLCBsb25nSWQgfSA9IGNoYW5uZWw7XG4gIHJldHVybiBgJHtzaXRlSG9zdH0vJHtuYW1lfToke2xvbmdJZH1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNhbm9uaWNhbExpbmsgPSAoYXNzZXQsIGNoYW5uZWwsIHBhZ2UsIHNpdGVIb3N0KSA9PiB7XG4gIGlmIChhc3NldCkge1xuICAgIHJldHVybiBjcmVhdGVBc3NldENhbm9uaWNhbExpbmsoYXNzZXQsIHNpdGVIb3N0KTtcbiAgfVxuICBpZiAoY2hhbm5lbCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFubmVsQ2Fub25pY2FsTGluayhjaGFubmVsLCBzaXRlSG9zdCk7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJhc2ljQ2Fub25pY2FsTGluayhwYWdlLCBzaXRlSG9zdCk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3V0aWxzL2Nhbm9uaWNhbExpbmsuanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTmF2TGluaywgd2l0aFJvdXRlciB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IExvZ28gZnJvbSAnY29tcG9uZW50cy9Mb2dvJztcbmltcG9ydCBOYXZCYXJDaGFubmVsRHJvcGRvd24gZnJvbSAnY29tcG9uZW50cy9OYXZCYXJDaGFubmVsT3B0aW9uc0Ryb3Bkb3duJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJ3V0aWxzL3JlcXVlc3QnO1xuXG5jb25zdCBWSUVXID0gJ1ZJRVcnO1xuY29uc3QgTE9HT1VUID0gJ0xPR09VVCc7XG5cbmNsYXNzIE5hdkJhciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNoZWNrRm9yTG9nZ2VkSW5Vc2VyID0gdGhpcy5jaGVja0ZvckxvZ2dlZEluVXNlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMubG9nb3V0VXNlciA9IHRoaXMubG9nb3V0VXNlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlU2VsZWN0aW9uID0gdGhpcy5oYW5kbGVTZWxlY3Rpb24uYmluZCh0aGlzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgLy8gY2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIGlzIGFscmVhZHkgbG9nZ2VkIGluXG4gICAgdGhpcy5jaGVja0ZvckxvZ2dlZEluVXNlcigpO1xuICB9XG4gIGNoZWNrRm9yTG9nZ2VkSW5Vc2VyICgpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7Y3JlZGVudGlhbHM6ICdpbmNsdWRlJ307XG4gICAgcmVxdWVzdCgnL3VzZXInLCBwYXJhbXMpXG4gICAgICAudGhlbigoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5uZWxMb2dpbihkYXRhLmNoYW5uZWxOYW1lLCBkYXRhLnNob3J0Q2hhbm5lbElkLCBkYXRhLmNoYW5uZWxDbGFpbUlkKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnL3VzZXIgZXJyb3I6JywgZXJyb3IubWVzc2FnZSk7XG4gICAgICB9KTtcbiAgfVxuICBsb2dvdXRVc2VyICgpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7Y3JlZGVudGlhbHM6ICdpbmNsdWRlJ307XG4gICAgcmVxdWVzdCgnL2xvZ291dCcsIHBhcmFtcylcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5uZWxMb2dvdXQoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnL2xvZ291dCBlcnJvcicsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfSk7XG4gIH1cbiAgaGFuZGxlU2VsZWN0aW9uIChldmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnNlbGVjdGVkT3B0aW9uc1swXS52YWx1ZTtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlIExPR09VVDpcbiAgICAgICAgdGhpcy5sb2dvdXRVc2VyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWSUVXOlxuICAgICAgICAvLyByZWRpcmVjdCB0byBjaGFubmVsIHBhZ2VcbiAgICAgICAgdGhpcy5wcm9wcy5oaXN0b3J5LnB1c2goYC8ke3RoaXMucHJvcHMuY2hhbm5lbE5hbWV9OiR7dGhpcy5wcm9wcy5jaGFubmVsTG9uZ0lkfWApO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHsgc2l0ZURlc2NyaXB0aW9uIH0gPSAgdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXdpZGUgbmF2LWJhcic+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS1wYWRkZWQgcm93LS1zaG9ydCBmbGV4LWNvbnRhaW5lci0tcm93IGZsZXgtY29udGFpbmVyLS1zcGFjZS1iZXR3ZWVuLWNlbnRlcic+XG4gICAgICAgICAgPExvZ28gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbmF2LWJhci0tY2VudGVyJz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nbmF2LWJhci10YWdsaW5lJz57c2l0ZURlc2NyaXB0aW9ufTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbmF2LWJhci0tcmlnaHQnPlxuICAgICAgICAgICAgPE5hdkxpbmsgY2xhc3NOYW1lPSduYXYtYmFyLWxpbmsgbGluay0tbmF2JyBhY3RpdmVDbGFzc05hbWU9J2xpbmstLW5hdi1hY3RpdmUnIHRvPScvJyBleGFjdD5QdWJsaXNoPC9OYXZMaW5rPlxuICAgICAgICAgICAgPE5hdkxpbmsgY2xhc3NOYW1lPSduYXYtYmFyLWxpbmsgbGluay0tbmF2JyAgYWN0aXZlQ2xhc3NOYW1lPSdsaW5rLS1uYXYtYWN0aXZlJyB0bz0nL2Fib3V0Jz5BYm91dDwvTmF2TGluaz5cbiAgICAgICAgICAgIHsgdGhpcy5wcm9wcy5jaGFubmVsTmFtZSA/IChcbiAgICAgICAgICAgICAgPE5hdkJhckNoYW5uZWxEcm9wZG93blxuICAgICAgICAgICAgICAgIGNoYW5uZWxOYW1lPXt0aGlzLnByb3BzLmNoYW5uZWxOYW1lfVxuICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdGlvbj17dGhpcy5oYW5kbGVTZWxlY3Rpb259XG4gICAgICAgICAgICAgICAgZGVmYXVsdFNlbGVjdGlvbj17dGhpcy5wcm9wcy5jaGFubmVsTmFtZX1cbiAgICAgICAgICAgICAgICBWSUVXPXtWSUVXfVxuICAgICAgICAgICAgICAgIExPR09VVD17TE9HT1VUfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPE5hdkxpbmsgaWQ9J25hdi1iYXItbG9naW4tbGluaycgY2xhc3NOYW1lPSduYXYtYmFyLWxpbmsgbGluay0tbmF2JyBhY3RpdmVDbGFzc05hbWU9J2xpbmstLW5hdi1hY3RpdmUnIHRvPScvbG9naW4nPkNoYW5uZWw8L05hdkxpbms+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFJvdXRlcihOYXZCYXIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvTmF2QmFyL3ZpZXcuanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcblxuZnVuY3Rpb24gTG9nbyAoKSB7XG4gIHJldHVybiAoXG4gICAgPHN2ZyB2ZXJzaW9uPScxLjEnIGlkPSdMYXllcl8xJyB4PScwcHgnIHk9JzBweCcgaGVpZ2h0PScyNHB4JyB2aWV3Qm94PScwIDAgODAgMzEnIGVuYWJsZUJhY2tncm91bmQ9J25ldyAwIDAgODAgMzEnIGNsYXNzTmFtZT0nbmF2LWJhci1sb2dvJz5cbiAgICAgIDxMaW5rIHRvPScvJz5cbiAgICAgICAgPHRpdGxlPkxvZ288L3RpdGxlPlxuICAgICAgICA8ZGVzYz5TcGVlLmNoIGxvZ288L2Rlc2M+XG4gICAgICAgIDxnIGlkPSdBYm91dCc+XG4gICAgICAgICAgPGcgaWQ9J1B1Ymxpc2gtRm9ybS1WMi1feDI4X2ZpbGxlZF94MjlfJyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgtNDIuMDAwMDAwLCAtMjMuMDAwMDAwKSc+XG4gICAgICAgICAgICA8ZyBpZD0nR3JvdXAtMTcnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKDQyLjAwMDAwMCwgMjIuMDAwMDAwKSc+XG4gICAgICAgICAgICAgIDx0ZXh0IHRyYW5zZm9ybT0nbWF0cml4KDEgMCAwIDEgMCAyMCknIGZvbnRTaXplPScyNScgZm9udEZhbWlseT0nUm9ib3RvJz5TcGVlJmx0O2g8L3RleHQ+XG4gICAgICAgICAgICAgIDxnIGlkPSdHcm91cC0xNicgdHJhbnNmb3JtPSd0cmFuc2xhdGUoMC4wMDAwMDAsIDMwLjAwMDAwMCknPlxuICAgICAgICAgICAgICAgIDxwYXRoIGlkPSdMaW5lLTgnIGZpbGw9J25vbmUnIHN0cm9rZT0nIzA5RjkxMScgc3Ryb2tlV2lkdGg9JzEnIHN0cm9rZUxpbmVjYXA9J3NxdWFyZScgZD0nTTAuNSwxLjVoMTUnIC8+XG4gICAgICAgICAgICAgICAgPHBhdGggaWQ9J0xpbmUtOC1Db3B5JyBmaWxsPSdub25lJyBzdHJva2U9JyMwMjlENzQnIHN0cm9rZVdpZHRoPScxJyBzdHJva2VMaW5lY2FwPSdzcXVhcmUnIGQ9J00xNi41LDEuNWgxNScgLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBpZD0nTGluZS04LUNvcHktMicgZmlsbD0nbm9uZScgc3Ryb2tlPScjRTM1QkQ4JyBzdHJva2VXaWR0aD0nMScgc3Ryb2tlTGluZWNhcD0nc3F1YXJlJyBkPSdNMzIuNSwxLjVoMTUnIC8+XG4gICAgICAgICAgICAgICAgPHBhdGggaWQ9J0xpbmUtOC1Db3B5LTMnIGZpbGw9J25vbmUnIHN0cm9rZT0nIzQxNTZDNScgc3Ryb2tlV2lkdGg9JzEnIHN0cm9rZUxpbmVjYXA9J3NxdWFyZScgZD0nTTQ4LjUsMS41aDE1JyAvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGlkPSdMaW5lLTgtQ29weS00JyBmaWxsPSdub25lJyBzdHJva2U9JyM2MzU2ODgnIHN0cm9rZVdpZHRoPScxJyBzdHJva2VMaW5lY2FwPSdzcXVhcmUnIGQ9J002NC41LDEuNWgxNScgLz5cbiAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgPC9nPlxuICAgICAgICAgIDwvZz5cbiAgICAgICAgPC9nPlxuICAgICAgPC9MaW5rPlxuICAgIDwvc3ZnPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTG9nbztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb21wb25lbnRzL0xvZ28vaW5kZXguanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gTmF2QmFyQ2hhbm5lbERyb3Bkb3duICh7IGNoYW5uZWxOYW1lLCBoYW5kbGVTZWxlY3Rpb24sIGRlZmF1bHRTZWxlY3Rpb24sIFZJRVcsIExPR09VVCB9KSB7XG4gIHJldHVybiAoXG4gICAgPHNlbGVjdCB0eXBlPSd0ZXh0JyBpZD0nbmF2LWJhci1jaGFubmVsLXNlbGVjdCcgY2xhc3NOYW1lPSdzZWxlY3Qgc2VsZWN0LS1hcnJvdyBsaW5rLS1uYXYnIG9uQ2hhbmdlPXtoYW5kbGVTZWxlY3Rpb259IHZhbHVlPXtkZWZhdWx0U2VsZWN0aW9ufT5cbiAgICAgIDxvcHRpb24gaWQ9J25hdi1iYXItY2hhbm5lbC1zZWxlY3QtY2hhbm5lbC1vcHRpb24nPntjaGFubmVsTmFtZX08L29wdGlvbj5cbiAgICAgIDxvcHRpb24gdmFsdWU9e1ZJRVd9PlZpZXc8L29wdGlvbj5cbiAgICAgIDxvcHRpb24gdmFsdWU9e0xPR09VVH0+TG9nb3V0PC9vcHRpb24+XG4gICAgPC9zZWxlY3Q+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBOYXZCYXJDaGFubmVsRHJvcGRvd247XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29tcG9uZW50cy9OYXZCYXJDaGFubmVsT3B0aW9uc0Ryb3Bkb3duL2luZGV4LmpzeCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNyb3NzLWZldGNoL3BvbHlmaWxsXCIpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwiY3Jvc3MtZmV0Y2gvcG9seWZpbGxcIlxuLy8gbW9kdWxlIGlkID0gOTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBwdWJsaXNoIH0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBkaXNhYmxlZDogcHVibGlzaC5kaXNhYmxlZCxcbiAgICBmaWxlICAgIDogcHVibGlzaC5maWxlLFxuICAgIHN0YXR1cyAgOiBwdWJsaXNoLnN0YXR1cy5zdGF0dXMsXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbnVsbCkoVmlldyk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoVG9vbC9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRHJvcHpvbmUgZnJvbSAnY29udGFpbmVycy9Ecm9wem9uZSc7XG5pbXBvcnQgUHVibGlzaERldGFpbHMgZnJvbSAnY29udGFpbmVycy9QdWJsaXNoRGV0YWlscyc7XG5pbXBvcnQgUHVibGlzaFN0YXR1cyBmcm9tICdjb250YWluZXJzL1B1Ymxpc2hTdGF0dXMnO1xuaW1wb3J0IFB1Ymxpc2hEaXNhYmxlZE1lc3NhZ2UgZnJvbSAnY29udGFpbmVycy9QdWJsaXNoRGlzYWJsZWRNZXNzYWdlJztcblxuY2xhc3MgUHVibGlzaFRvb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBjb25zb2xlLmxvZygncHVibGlzaCBpcyBkaXNhYmxlZCcpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFB1Ymxpc2hEaXNhYmxlZE1lc3NhZ2UgLz5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdwdWJsaXNoIGlzIG5vdCBkaXNhYmxlZCcpO1xuICAgICAgaWYgKHRoaXMucHJvcHMuZmlsZSkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5zdGF0dXMpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFB1Ymxpc2hTdGF0dXMgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiA8UHVibGlzaERldGFpbHMgLz47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiA8RHJvcHpvbmUgLz47XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQdWJsaXNoVG9vbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hUb29sL3ZpZXcuanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHZhbGlkYXRlRmlsZSB9IGZyb20gJ3V0aWxzL2ZpbGUnO1xuaW1wb3J0IFB1Ymxpc2hQcmV2aWV3IGZyb20gJ2NvbXBvbmVudHMvUHVibGlzaFByZXZpZXcnO1xuXG5jbGFzcyBEcm9wem9uZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZHJhZ092ZXIgIDogZmFsc2UsXG4gICAgICBtb3VzZU92ZXIgOiBmYWxzZSxcbiAgICAgIGRpbVByZXZpZXc6IGZhbHNlLFxuICAgIH07XG4gICAgdGhpcy5oYW5kbGVEcm9wID0gdGhpcy5oYW5kbGVEcm9wLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVEcmFnT3ZlciA9IHRoaXMuaGFuZGxlRHJhZ092ZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZURyYWdFbmQgPSB0aGlzLmhhbmRsZURyYWdFbmQuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZURyYWdFbnRlciA9IHRoaXMuaGFuZGxlRHJhZ0VudGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVEcmFnTGVhdmUgPSB0aGlzLmhhbmRsZURyYWdMZWF2ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlTW91c2VFbnRlciA9IHRoaXMuaGFuZGxlTW91c2VFbnRlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlTW91c2VMZWF2ZSA9IHRoaXMuaGFuZGxlTW91c2VMZWF2ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQgPSB0aGlzLmhhbmRsZUZpbGVJbnB1dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY2hvb3NlRmlsZSA9IHRoaXMuY2hvb3NlRmlsZS5iaW5kKHRoaXMpO1xuICB9XG4gIGhhbmRsZURyb3AgKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtkcmFnT3ZlcjogZmFsc2V9KTtcbiAgICAvLyBpZiBkcm9wcGVkIGl0ZW1zIGFyZW4ndCBmaWxlcywgcmVqZWN0IHRoZW1cbiAgICBjb25zdCBkdCA9IGV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICBpZiAoZHQuaXRlbXMpIHtcbiAgICAgIGlmIChkdC5pdGVtc1swXS5raW5kID09PSAnZmlsZScpIHtcbiAgICAgICAgY29uc3QgZHJvcHBlZEZpbGUgPSBkdC5pdGVtc1swXS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgdGhpcy5jaG9vc2VGaWxlKGRyb3BwZWRGaWxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaGFuZGxlRHJhZ092ZXIgKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBoYW5kbGVEcmFnRW5kIChldmVudCkge1xuICAgIHZhciBkdCA9IGV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICBpZiAoZHQuaXRlbXMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZHQuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZHQuaXRlbXMucmVtb3ZlKGkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuY2xlYXJEYXRhKCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZURyYWdFbnRlciAoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7ZHJhZ092ZXI6IHRydWUsIGRpbVByZXZpZXc6IHRydWV9KTtcbiAgfVxuICBoYW5kbGVEcmFnTGVhdmUgKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoe2RyYWdPdmVyOiBmYWxzZSwgZGltUHJldmlldzogZmFsc2V9KTtcbiAgfVxuICBoYW5kbGVNb3VzZUVudGVyICgpIHtcbiAgICB0aGlzLnNldFN0YXRlKHttb3VzZU92ZXI6IHRydWUsIGRpbVByZXZpZXc6IHRydWV9KTtcbiAgfVxuICBoYW5kbGVNb3VzZUxlYXZlICgpIHtcbiAgICB0aGlzLnNldFN0YXRlKHttb3VzZU92ZXI6IGZhbHNlLCBkaW1QcmV2aWV3OiBmYWxzZX0pO1xuICB9XG4gIGhhbmRsZUNsaWNrIChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVfaW5wdXQnKS5jbGljaygpO1xuICB9XG4gIGhhbmRsZUZpbGVJbnB1dCAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGZpbGVMaXN0ID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xuICAgIHRoaXMuY2hvb3NlRmlsZShmaWxlTGlzdFswXSk7XG4gIH1cbiAgY2hvb3NlRmlsZSAoZmlsZSkge1xuICAgIGlmIChmaWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWxpZGF0ZUZpbGUoZmlsZSk7IC8vIHZhbGlkYXRlIHRoZSBmaWxlJ3MgbmFtZSwgdHlwZSwgYW5kIHNpemVcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnNldEZpbGVFcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIC8vIHN0YWdlIGl0IHNvIGl0IHdpbGwgYmUgcmVhZHkgd2hlbiB0aGUgcHVibGlzaCBidXR0b24gaXMgY2xpY2tlZFxuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RGaWxlKGZpbGUpO1xuICAgIH1cbiAgfVxuICByZW5kZXIgKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tdGFsbCBmbGV4LWNvbnRhaW5lci0tY29sdW1uJz5cbiAgICAgICAgPGZvcm0+XG4gICAgICAgICAgPGlucHV0IGNsYXNzTmFtZT0naW5wdXQtZmlsZScgdHlwZT0nZmlsZScgaWQ9J2ZpbGVfaW5wdXQnIG5hbWU9J2ZpbGVfaW5wdXQnIGFjY2VwdD0ndmlkZW8vKixpbWFnZS8qJyBvbkNoYW5nZT17dGhpcy5oYW5kbGVGaWxlSW5wdXR9IGVuY1R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnIC8+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgICAgPGRpdiBpZD0ncHJldmlldy1kcm9wem9uZScgY2xhc3NOYW1lPXsncm93IHJvdy0tcGFkZGVkIHJvdy0tdGFsbCBkcm9wem9uZScgKyAodGhpcy5zdGF0ZS5kcmFnT3ZlciA/ICcgZHJvcHpvbmUtLWRyYWctb3ZlcicgOiAnJyl9IG9uRHJvcD17dGhpcy5oYW5kbGVEcm9wfSBvbkRyYWdPdmVyPXt0aGlzLmhhbmRsZURyYWdPdmVyfSBvbkRyYWdFbmQ9e3RoaXMuaGFuZGxlRHJhZ0VuZH0gb25EcmFnRW50ZXI9e3RoaXMuaGFuZGxlRHJhZ0VudGVyfSBvbkRyYWdMZWF2ZT17dGhpcy5oYW5kbGVEcmFnTGVhdmV9IG9uTW91c2VFbnRlcj17dGhpcy5oYW5kbGVNb3VzZUVudGVyfSBvbk1vdXNlTGVhdmU9e3RoaXMuaGFuZGxlTW91c2VMZWF2ZX0gb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30+XG4gICAgICAgICAge3RoaXMucHJvcHMuZmlsZSA/IChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxQdWJsaXNoUHJldmlld1xuICAgICAgICAgICAgICAgIGRpbVByZXZpZXc9e3RoaXMuc3RhdGUuZGltUHJldmlld31cbiAgICAgICAgICAgICAgICBmaWxlPXt0aGlzLnByb3BzLmZpbGV9XG4gICAgICAgICAgICAgICAgdGh1bWJuYWlsPXt0aGlzLnByb3BzLnRodW1ibmFpbH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGRpdiBpZD0nZHJvcHpvbmUtdGV4dC1ob2xkZXInIGNsYXNzTmFtZT17J2ZsZXgtY29udGFpbmVyLS1jb2x1bW4gZmxleC1jb250YWluZXItLWNlbnRlci1jZW50ZXInfT5cbiAgICAgICAgICAgICAgICB7IHRoaXMuc3RhdGUuZHJhZ092ZXIgPyAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGlkPSdkcm9wem9uZS1kcmFnb3Zlcic+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0nYmx1ZSc+RHJvcCBpdC48L3A+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgeyB0aGlzLnN0YXRlLm1vdXNlT3ZlciA/IChcbiAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9J2Ryb3B6b25lLWluc3RydWN0aW9ucyc+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0naW5mby1tZXNzYWdlLXBsYWNlaG9sZGVyIGluZm8tbWVzc2FnZS0tZmFpbHVyZScgaWQ9J2lucHV0LWVycm9yLWZpbGUtc2VsZWN0aW9uJz57dGhpcy5wcm9wcy5maWxlRXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5EcmFnICYgZHJvcCBpbWFnZSBvciB2aWRlbyBoZXJlIHRvIHB1Ymxpc2g8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0nZmluZS1wcmludCc+T1I8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0nYmx1ZS0tdW5kZXJsaW5lZCc+Q0hPT1NFIEZJTEU8L3A+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxkaXYgaWQ9J2Ryb3B6b25lLXRleHQtaG9sZGVyJyBjbGFzc05hbWU9eydmbGV4LWNvbnRhaW5lci0tY29sdW1uIGZsZXgtY29udGFpbmVyLS1jZW50ZXItY2VudGVyJ30+XG4gICAgICAgICAgICAgIHsgdGhpcy5zdGF0ZS5kcmFnT3ZlciA/IChcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPSdkcm9wem9uZS1kcmFnb3Zlcic+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9J2JsdWUnPkRyb3AgaXQuPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9J2Ryb3B6b25lLWluc3RydWN0aW9ucyc+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9J2luZm8tbWVzc2FnZS1wbGFjZWhvbGRlciBpbmZvLW1lc3NhZ2UtLWZhaWx1cmUnIGlkPSdpbnB1dC1lcnJvci1maWxlLXNlbGVjdGlvbic+e3RoaXMucHJvcHMuZmlsZUVycm9yfTwvcD5cbiAgICAgICAgICAgICAgICAgIDxwPkRyYWcgJiBkcm9wIGltYWdlIG9yIHZpZGVvIGhlcmUgdG8gcHVibGlzaDwvcD5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0nZmluZS1wcmludCc+T1I8L3A+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9J2JsdWUtLXVuZGVybGluZWQnPkNIT09TRSBGSUxFPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBEcm9wem9uZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0Ryb3B6b25lL3ZpZXcuanN4IiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIHZhbGlkYXRlRmlsZSAoZmlsZSkge1xuICAgIGlmICghZmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBmaWxlIHByb3ZpZGVkJyk7XG4gICAgfVxuICAgIGlmICgvJy8udGVzdChmaWxlLm5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Fwb3N0cm9waGVzIGFyZSBub3QgYWxsb3dlZCBpbiB0aGUgZmlsZSBuYW1lJyk7XG4gICAgfVxuICAgIC8vIHZhbGlkYXRlIHNpemUgYW5kIHR5cGVcbiAgICBzd2l0Y2ggKGZpbGUudHlwZSkge1xuICAgICAgY2FzZSAnaW1hZ2UvanBlZyc6XG4gICAgICBjYXNlICdpbWFnZS9qcGcnOlxuICAgICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IDEwMDAwMDAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb3JyeSwgaW1hZ2VzIGFyZSBsaW1pdGVkIHRvIDEwIG1lZ2FieXRlcy4nKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2ltYWdlL2dpZic6XG4gICAgICAgIGlmIChmaWxlLnNpemUgPiA1MDAwMDAwMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU29ycnksIEdJRnMgYXJlIGxpbWl0ZWQgdG8gNTAgbWVnYWJ5dGVzLicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndmlkZW8vbXA0JzpcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IDUwMDAwMDAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb3JyeSwgdmlkZW9zIGFyZSBsaW1pdGVkIHRvIDUwIG1lZ2FieXRlcy4nKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihmaWxlLnR5cGUgKyAnIGlzIG5vdCBhIHN1cHBvcnRlZCBmaWxlIHR5cGUuIE9ubHksIC5qcGVnLCAucG5nLCAuZ2lmLCBhbmQgLm1wNCBmaWxlcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4nKTtcbiAgICB9XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3V0aWxzL2ZpbGUuanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuY2xhc3MgUHVibGlzaFByZXZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGltZ1NvdXJjZSAgICAgICA6ICcnLFxuICAgICAgZGVmYXVsdFRodW1ibmFpbDogJy9hc3NldHMvaW1nL3ZpZGVvX3RodW1iX2RlZmF1bHQucG5nJyxcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICB0aGlzLnNldFByZXZpZXdJbWFnZVNvdXJjZSh0aGlzLnByb3BzLmZpbGUpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgKG5ld1Byb3BzKSB7XG4gICAgaWYgKG5ld1Byb3BzLmZpbGUgIT09IHRoaXMucHJvcHMuZmlsZSkge1xuICAgICAgdGhpcy5zZXRQcmV2aWV3SW1hZ2VTb3VyY2UobmV3UHJvcHMuZmlsZSk7XG4gICAgfVxuICAgIGlmIChuZXdQcm9wcy50aHVtYm5haWwgIT09IHRoaXMucHJvcHMudGh1bWJuYWlsKSB7XG4gICAgICBpZiAobmV3UHJvcHMudGh1bWJuYWlsKSB7XG4gICAgICAgIHRoaXMuc2V0UHJldmlld0ltYWdlU291cmNlRnJvbUZpbGUobmV3UHJvcHMudGh1bWJuYWlsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2ltZ1NvdXJjZTogdGhpcy5zdGF0ZS5kZWZhdWx0VGh1bWJuYWlsfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHNldFByZXZpZXdJbWFnZVNvdXJjZUZyb21GaWxlIChmaWxlKSB7XG4gICAgY29uc3QgcHJldmlld1JlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcHJldmlld1JlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIHByZXZpZXdSZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7aW1nU291cmNlOiBwcmV2aWV3UmVhZGVyLnJlc3VsdH0pO1xuICAgIH07XG4gIH1cbiAgc2V0UHJldmlld0ltYWdlU291cmNlIChmaWxlKSB7XG4gICAgaWYgKGZpbGUudHlwZSAhPT0gJ3ZpZGVvL21wNCcpIHtcbiAgICAgIHRoaXMuc2V0UHJldmlld0ltYWdlU291cmNlRnJvbUZpbGUoZmlsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLnRodW1ibmFpbCkge1xuICAgICAgICB0aGlzLnNldFByZXZpZXdJbWFnZVNvdXJjZUZyb21GaWxlKHRoaXMucHJvcHMudGh1bWJuYWlsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe2ltZ1NvdXJjZTogdGhpcy5zdGF0ZS5kZWZhdWx0VGh1bWJuYWlsfSk7XG4gICAgfVxuICB9XG4gIHJlbmRlciAoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbWdcbiAgICAgICAgaWQ9J2Ryb3B6b25lLXByZXZpZXcnXG4gICAgICAgIHNyYz17dGhpcy5zdGF0ZS5pbWdTb3VyY2V9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5kaW1QcmV2aWV3ID8gJ2RpbScgOiAnJ31cbiAgICAgICAgYWx0PSdwdWJsaXNoIHByZXZpZXcnXG4gICAgICAvPlxuICAgICk7XG4gIH1cbn07XG5cblB1Ymxpc2hQcmV2aWV3LnByb3BUeXBlcyA9IHtcbiAgZGltUHJldmlldzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgZmlsZSAgICAgIDogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICB0aHVtYm5haWwgOiBQcm9wVHlwZXMub2JqZWN0LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUHVibGlzaFByZXZpZXc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29tcG9uZW50cy9QdWJsaXNoUHJldmlldy9pbmRleC5qc3giLCJpbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7Y2xlYXJGaWxlLCBzdGFydFB1Ymxpc2h9IGZyb20gJ2FjdGlvbnMvcHVibGlzaCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBjaGFubmVsLCBwdWJsaXNoIH0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmaWxlOiBwdWJsaXNoLmZpbGUsXG4gIH07XG59O1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSB7XG4gIGNsZWFyRmlsZSxcbiAgc3RhcnRQdWJsaXNoLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcykoVmlldyk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoRGV0YWlscy9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgRHJvcHpvbmUgZnJvbSAnY29udGFpbmVycy9Ecm9wem9uZSc7XG5pbXBvcnQgUHVibGlzaFRpdGxlSW5wdXQgZnJvbSAnY29udGFpbmVycy9QdWJsaXNoVGl0bGVJbnB1dCc7XG5pbXBvcnQgUHVibGlzaFVybElucHV0IGZyb20gJ2NvbnRhaW5lcnMvUHVibGlzaFVybElucHV0JztcbmltcG9ydCBQdWJsaXNoVGh1bWJuYWlsSW5wdXQgZnJvbSAnY29udGFpbmVycy9QdWJsaXNoVGh1bWJuYWlsSW5wdXQnO1xuaW1wb3J0IFB1Ymxpc2hNZXRhZGF0YUlucHV0cyBmcm9tICdjb250YWluZXJzL1B1Ymxpc2hNZXRhZGF0YUlucHV0cyc7XG5pbXBvcnQgQ2hhbm5lbFNlbGVjdCBmcm9tICdjb250YWluZXJzL0NoYW5uZWxTZWxlY3QnO1xuXG5jbGFzcyBQdWJsaXNoRGV0YWlscyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKVxuICAgIHRoaXMub25QdWJsaXNoU3VibWl0ID0gdGhpcy5vblB1Ymxpc2hTdWJtaXQuYmluZCh0aGlzKTtcbiAgfVxuICBvblB1Ymxpc2hTdWJtaXQgKCkge1xuICAgIHRoaXMucHJvcHMuc3RhcnRQdWJsaXNoKHRoaXMucHJvcHMuaGlzdG9yeSk7XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLW5vLWJvdHRvbSc+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0xMCc+XG4gICAgICAgICAgPFB1Ymxpc2hUaXRsZUlucHV0IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7LyogbGVmdCBjb2x1bW4gKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS01IGNvbHVtbi0tc21sLTEwJyA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCc+XG4gICAgICAgICAgICA8RHJvcHpvbmUgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsvKiByaWdodCBjb2x1bW4gKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS01IGNvbHVtbi0tc21sLTEwIGFsaWduLWNvbnRlbnQtdG9wJz5cbiAgICAgICAgICA8ZGl2IGlkPSdwdWJsaXNoLWFjdGl2ZS1hcmVhJyBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tcGFkZGVkIHJvdy0tbm8tdG9wIHJvdy0td2lkZSc+XG4gICAgICAgICAgICAgIDxQdWJsaXNoVXJsSW5wdXQgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCByb3ctLW5vLXRvcCByb3ctLXdpZGUnPlxuICAgICAgICAgICAgICA8Q2hhbm5lbFNlbGVjdCAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7ICh0aGlzLnByb3BzLmZpbGUudHlwZSA9PT0gJ3ZpZGVvL21wNCcpICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCByb3ctLW5vLXRvcCByb3ctLXdpZGUgJz5cbiAgICAgICAgICAgICAgICA8UHVibGlzaFRodW1ibmFpbElucHV0IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS1wYWRkZWQgcm93LS1uby10b3Agcm93LS1uby1ib3R0b20gcm93LS13aWRlJz5cbiAgICAgICAgICAgICAgPFB1Ymxpc2hNZXRhZGF0YUlucHV0cyAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0td2lkZSBhbGlnbi1jb250ZW50LWNlbnRlcic+XG4gICAgICAgICAgICAgIDxidXR0b24gaWQ9J3B1Ymxpc2gtc3VibWl0JyBjbGFzc05hbWU9J2J1dHRvbi0tcHJpbWFyeSBidXR0b24tLWxhcmdlJyBvbkNsaWNrPXt0aGlzLm9uUHVibGlzaFN1Ym1pdH0+UHVibGlzaDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tcGFkZGVkIHJvdy0tbm8tYm90dG9tIGFsaWduLWNvbnRlbnQtY2VudGVyJz5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9J2J1dHRvbi0tY2FuY2VsJyBvbkNsaWNrPXt0aGlzLnByb3BzLmNsZWFyRmlsZX0+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS1zaG9ydCBhbGlnbi1jb250ZW50LWNlbnRlcic+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0nZmluZS1wcmludCc+QnkgY2xpY2tpbmcgJ1B1Ymxpc2gnLCB5b3UgYWZmaXJtIHRoYXQgeW91IGhhdmUgdGhlIHJpZ2h0cyB0byBwdWJsaXNoIHRoaXMgY29udGVudCB0byB0aGUgTEJSWSBuZXR3b3JrLCBhbmQgdGhhdCB5b3UgdW5kZXJzdGFuZCB0aGUgcHJvcGVydGllcyBvZiBwdWJsaXNoaW5nIGl0IHRvIGEgZGVjZW50cmFsaXplZCwgdXNlci1jb250cm9sbGVkIG5ldHdvcmsuIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2h0dHBzOi8vbGJyeS5pby9sZWFybic+UmVhZCBtb3JlLjwvYT48L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKFB1Ymxpc2hEZXRhaWxzKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hEZXRhaWxzL3ZpZXcuanN4IiwiaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge3VwZGF0ZU1ldGFkYXRhfSBmcm9tICdhY3Rpb25zL3B1Ymxpc2gnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgcHVibGlzaCB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgdGl0bGU6IHB1Ymxpc2gubWV0YWRhdGEudGl0bGUsXG4gIH07XG59O1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSBkaXNwYXRjaCA9PiB7XG4gIHJldHVybiB7XG4gICAgb25NZXRhZGF0YUNoYW5nZTogKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVNZXRhZGF0YShuYW1lLCB2YWx1ZSkpO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hUaXRsZUlucHV0L2luZGV4LmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY2xhc3MgUHVibGlzaFRpdGxlSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVJbnB1dCA9IHRoaXMuaGFuZGxlSW5wdXQuYmluZCh0aGlzKTtcbiAgfVxuICBoYW5kbGVJbnB1dCAoZSkge1xuICAgIGNvbnN0IG5hbWUgPSBlLnRhcmdldC5uYW1lO1xuICAgIGNvbnN0IHZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgdGhpcy5wcm9wcy5vbk1ldGFkYXRhQ2hhbmdlKG5hbWUsIHZhbHVlKTtcbiAgfVxuICByZW5kZXIgKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J3B1Ymxpc2gtdGl0bGUnIGNsYXNzTmFtZT0naW5wdXQtdGV4dCB0ZXh0LS1sYXJnZSBpbnB1dC10ZXh0LS1mdWxsLXdpZHRoJyBuYW1lPSd0aXRsZScgcGxhY2Vob2xkZXI9J0dpdmUgeW91ciBwb3N0IGEgdGl0bGUuLi4nIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUlucHV0fSB2YWx1ZT17dGhpcy5wcm9wcy50aXRsZX0gLz5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1Ymxpc2hUaXRsZUlucHV0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvUHVibGlzaFRpdGxlSW5wdXQvdmlldy5qc3giLCJpbXBvcnQge3VwZGF0ZUNsYWltLCB1cGRhdGVFcnJvcn0gZnJvbSAnYWN0aW9ucy9wdWJsaXNoJztcbmltcG9ydCB7Y29ubmVjdH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgY2hhbm5lbCwgcHVibGlzaCB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgbG9nZ2VkSW5DaGFubmVsTmFtZSAgIDogY2hhbm5lbC5sb2dnZWRJbkNoYW5uZWwubmFtZSxcbiAgICBsb2dnZWRJbkNoYW5uZWxTaG9ydElkOiBjaGFubmVsLmxvZ2dlZEluQ2hhbm5lbC5zaG9ydElkLFxuICAgIGZpbGVOYW1lICAgICAgICAgICAgICA6IHB1Ymxpc2guZmlsZS5uYW1lLFxuICAgIHB1Ymxpc2hJbkNoYW5uZWwgICAgICA6IHB1Ymxpc2gucHVibGlzaEluQ2hhbm5lbCxcbiAgICBzZWxlY3RlZENoYW5uZWwgICAgICAgOiBwdWJsaXNoLnNlbGVjdGVkQ2hhbm5lbCxcbiAgICBjbGFpbSAgICAgICAgICAgICAgICAgOiBwdWJsaXNoLmNsYWltLFxuICAgIHVybEVycm9yICAgICAgICAgICAgICA6IHB1Ymxpc2guZXJyb3IudXJsLFxuICB9O1xufTtcblxuY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gZGlzcGF0Y2ggPT4ge1xuICByZXR1cm4ge1xuICAgIG9uQ2xhaW1DaGFuZ2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgZGlzcGF0Y2godXBkYXRlQ2xhaW0odmFsdWUpKTtcbiAgICAgIGRpc3BhdGNoKHVwZGF0ZUVycm9yKCdwdWJsaXNoU3VibWl0JywgbnVsbCkpO1xuICAgIH0sXG4gICAgb25VcmxFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVFcnJvcigndXJsJywgdmFsdWUpKTtcbiAgICB9LFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcykoVmlldyk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoVXJsSW5wdXQvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAndXRpbHMvcmVxdWVzdCc7XG5pbXBvcnQgVXJsTWlkZGxlIGZyb20gJ2NvbXBvbmVudHMvUHVibGlzaFVybE1pZGRsZURpc3BsYXknO1xuXG5jbGFzcyBQdWJsaXNoVXJsSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVJbnB1dCA9IHRoaXMuaGFuZGxlSW5wdXQuYmluZCh0aGlzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgY29uc3QgeyBjbGFpbSwgZmlsZU5hbWUgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCFjbGFpbSkge1xuICAgICAgdGhpcy5zZXRDbGFpbU5hbWUoZmlsZU5hbWUpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICh7IGNsYWltLCBmaWxlTmFtZSB9KSB7XG4gICAgLy8gaWYgYSBuZXcgZmlsZSB3YXMgY2hvc2VuLCB1cGRhdGUgdGhlIGNsYWltIG5hbWVcbiAgICBpZiAoZmlsZU5hbWUgIT09IHRoaXMucHJvcHMuZmlsZU5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldENsYWltTmFtZShmaWxlTmFtZSk7XG4gICAgfVxuICAgIC8vIGlmIHRoZSBjbGFpbSBoYXMgdXBkYXRlZCwgY2hlY2sgaXRzIGF2YWlsYWJpbGl0eVxuICAgIGlmIChjbGFpbSAhPT0gdGhpcy5wcm9wcy5jbGFpbSkge1xuICAgICAgdGhpcy52YWxpZGF0ZUNsYWltKGNsYWltKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlSW5wdXQgKGV2ZW50KSB7XG4gICAgbGV0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHZhbHVlID0gdGhpcy5jbGVhbnNlSW5wdXQodmFsdWUpO1xuICAgIC8vIHVwZGF0ZSB0aGUgc3RhdGVcbiAgICB0aGlzLnByb3BzLm9uQ2xhaW1DaGFuZ2UodmFsdWUpO1xuICB9XG4gIGNsZWFuc2VJbnB1dCAoaW5wdXQpIHtcbiAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL1xccysvZywgJy0nKTsgLy8gcmVwbGFjZSBzcGFjZXMgd2l0aCBkYXNoZXNcbiAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL1teQS1aYS16MC05LV0vZywgJycpOyAgLy8gcmVtb3ZlIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBBLVosIGEteiwgMC05LCBvciAnLSdcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgc2V0Q2xhaW1OYW1lIChmaWxlTmFtZSkge1xuICAgIGNvbnN0IGZpbGVOYW1lV2l0aG91dEVuZGluZyA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpKTtcbiAgICBjb25zdCBjbGVhbkNsYWltTmFtZSA9IHRoaXMuY2xlYW5zZUlucHV0KGZpbGVOYW1lV2l0aG91dEVuZGluZyk7XG4gICAgdGhpcy5wcm9wcy5vbkNsYWltQ2hhbmdlKGNsZWFuQ2xhaW1OYW1lKTtcbiAgfVxuICB2YWxpZGF0ZUNsYWltIChjbGFpbSkge1xuICAgIGlmICghY2xhaW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLm9uVXJsRXJyb3IoJ0VudGVyIGEgdXJsIGFib3ZlJyk7XG4gICAgfVxuICAgIHJlcXVlc3QoYC9hcGkvY2xhaW0vYXZhaWxhYmlsaXR5LyR7Y2xhaW19YClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5vblVybEVycm9yKG51bGwpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5vblVybEVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfSk7XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7IGNsYWltLCBsb2dnZWRJbkNoYW5uZWxOYW1lLCBsb2dnZWRJbkNoYW5uZWxTaG9ydElkLCBwdWJsaXNoSW5DaGFubmVsLCBzZWxlY3RlZENoYW5uZWwsIHVybEVycm9yIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tMTAgY29sdW1uLS1zbWwtMTAnPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0naW5wdXQtdGV4dC0tcHJpbWFyeSBzcGFuLS1yZWxhdGl2ZSc+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSd1cmwtdGV4dC0tc2Vjb25kYXJ5Jz5zcGVlLmNoIC8gPC9zcGFuPlxuICAgICAgICAgIDxVcmxNaWRkbGVcbiAgICAgICAgICAgIHB1Ymxpc2hJbkNoYW5uZWw9e3B1Ymxpc2hJbkNoYW5uZWx9XG4gICAgICAgICAgICBzZWxlY3RlZENoYW5uZWw9e3NlbGVjdGVkQ2hhbm5lbH1cbiAgICAgICAgICAgIGxvZ2dlZEluQ2hhbm5lbE5hbWU9e2xvZ2dlZEluQ2hhbm5lbE5hbWV9XG4gICAgICAgICAgICBsb2dnZWRJbkNoYW5uZWxTaG9ydElkPXtsb2dnZWRJbkNoYW5uZWxTaG9ydElkfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGlucHV0IHR5cGU9J3RleHQnIGlkPSdjbGFpbS1uYW1lLWlucHV0JyBjbGFzc05hbWU9J2lucHV0LXRleHQnIG5hbWU9J2NsYWltJyBwbGFjZWhvbGRlcj0neW91ci11cmwtaGVyZScgb25DaGFuZ2U9e3RoaXMuaGFuZGxlSW5wdXR9IHZhbHVlPXtjbGFpbX0gLz5cbiAgICAgICAgICB7IChjbGFpbSAmJiAhdXJsRXJyb3IpICYmIDxzcGFuIGlkPSdpbnB1dC1zdWNjZXNzLWNsYWltLW5hbWUnIGNsYXNzTmFtZT0naW5mby1tZXNzYWdlLS1zdWNjZXNzIHNwYW4tLWFic29sdXRlJz57J1xcdTI3MTMnfTwvc3Bhbj4gfVxuICAgICAgICAgIHsgdXJsRXJyb3IgJiYgPHNwYW4gaWQ9J2lucHV0LXN1Y2Nlc3MtY2hhbm5lbC1uYW1lJyBjbGFzc05hbWU9J2luZm8tbWVzc2FnZS0tZmFpbHVyZSBzcGFuLS1hYnNvbHV0ZSc+eydcXHUyNzE2J308L3NwYW4+IH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgeyB1cmxFcnJvciA/IChcbiAgICAgICAgICAgIDxwIGlkPSdpbnB1dC1lcnJvci1jbGFpbS1uYW1lJyBjbGFzc05hbWU9J2luZm8tbWVzc2FnZS0tZmFpbHVyZSc+e3VybEVycm9yfTwvcD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSdpbmZvLW1lc3NhZ2UnPkNob29zZSBhIGN1c3RvbSB1cmw8L3A+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1Ymxpc2hVcmxJbnB1dDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hVcmxJbnB1dC92aWV3LmpzeCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5mdW5jdGlvbiBVcmxNaWRkbGUgKHtwdWJsaXNoSW5DaGFubmVsLCBzZWxlY3RlZENoYW5uZWwsIGxvZ2dlZEluQ2hhbm5lbE5hbWUsIGxvZ2dlZEluQ2hhbm5lbFNob3J0SWR9KSB7XG4gIGlmIChwdWJsaXNoSW5DaGFubmVsKSB7XG4gICAgaWYgKHNlbGVjdGVkQ2hhbm5lbCA9PT0gbG9nZ2VkSW5DaGFubmVsTmFtZSkge1xuICAgICAgcmV0dXJuIDxzcGFuIGlkPSd1cmwtY2hhbm5lbCcgY2xhc3NOYW1lPSd1cmwtdGV4dC0tc2Vjb25kYXJ5Jz57bG9nZ2VkSW5DaGFubmVsTmFtZX06e2xvZ2dlZEluQ2hhbm5lbFNob3J0SWR9IC88L3NwYW4+O1xuICAgIH1cbiAgICByZXR1cm4gPHNwYW4gaWQ9J3VybC1jaGFubmVsLXBsYWNlaG9sZGVyJyBjbGFzc05hbWU9J3VybC10ZXh0LS1zZWNvbmRhcnkgdG9vbHRpcCc+QGNoYW5uZWw8c3BhblxuICAgICAgY2xhc3NOYW1lPSd0b29sdGlwLXRleHQnPlNlbGVjdCBhIGNoYW5uZWwgYmVsb3c8L3NwYW4+IC88L3NwYW4+O1xuICB9XG4gIHJldHVybiAoXG4gICAgPHNwYW4gaWQ9J3VybC1uby1jaGFubmVsLXBsYWNlaG9sZGVyJyBjbGFzc05hbWU9J3VybC10ZXh0LS1zZWNvbmRhcnkgdG9vbHRpcCc+eHl6PHNwYW4gY2xhc3NOYW1lPSd0b29sdGlwLXRleHQnPlRoaXMgd2lsbCBiZSBhIHJhbmRvbSBpZDwvc3Bhbj4gLzwvc3Bhbj5cbiAgKTtcbn1cblxuVXJsTWlkZGxlLnByb3BUeXBlcyA9IHtcbiAgcHVibGlzaEluQ2hhbm5lbCAgICAgIDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgbG9nZ2VkSW5DaGFubmVsTmFtZSAgIDogUHJvcFR5cGVzLnN0cmluZyxcbiAgbG9nZ2VkSW5DaGFubmVsU2hvcnRJZDogUHJvcFR5cGVzLnN0cmluZyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFVybE1pZGRsZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb21wb25lbnRzL1B1Ymxpc2hVcmxNaWRkbGVEaXNwbGF5L2luZGV4LmpzeCIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBvbk5ld1RodW1ibmFpbCB9IGZyb20gJ2FjdGlvbnMvcHVibGlzaCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBwdWJsaXNoOiB7IGZpbGUgfSB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgZmlsZSxcbiAgfTtcbn07XG5cbmNvbnN0IG1hcERpc3BhdGNoVG9Qcm9wcyA9IHtcbiAgb25OZXdUaHVtYm5haWwsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hUaHVtYm5haWxJbnB1dC9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIGRhdGFVUkl0b0Jsb2IoZGF0YVVSSSkge1xuICAvLyBjb252ZXJ0IGJhc2U2NC9VUkxFbmNvZGVkIGRhdGEgY29tcG9uZW50IHRvIHJhdyBiaW5hcnkgZGF0YSBoZWxkIGluIGEgc3RyaW5nXG4gIGxldCBieXRlU3RyaW5nID0gYXRvYihkYXRhVVJJLnNwbGl0KCcsJylbMV0pO1xuICAvLyBzZXBhcmF0ZSBvdXQgdGhlIG1pbWUgY29tcG9uZW50XG4gIGxldCBtaW1lU3RyaW5nID0gZGF0YVVSSS5zcGxpdCgnLCcpWzBdLnNwbGl0KCc6JylbMV0uc3BsaXQoJzsnKVswXTtcbiAgLy8gd3JpdGUgdGhlIGJ5dGVzIG9mIHRoZSBzdHJpbmcgdG8gYSB0eXBlZCBhcnJheVxuICBsZXQgaWEgPSBuZXcgVWludDhBcnJheShieXRlU3RyaW5nLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgIGlhW2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICB9XG4gIHJldHVybiBuZXcgQmxvYihbaWFdLCB7dHlwZTogbWltZVN0cmluZ30pO1xufVxuXG5jbGFzcyBQdWJsaXNoVGh1bWJuYWlsSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZpZGVvU291cmNlICAgOiBudWxsLFxuICAgICAgZXJyb3IgICAgICAgICA6IG51bGwsXG4gICAgICBzbGlkZXJNaW5SYW5nZTogMSxcbiAgICAgIHNsaWRlck1heFJhbmdlOiBudWxsLFxuICAgICAgc2xpZGVyVmFsdWUgICA6IG51bGwsXG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZVZpZGVvTG9hZGVkRGF0YSA9IHRoaXMuaGFuZGxlVmlkZW9Mb2FkZWREYXRhLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVTbGlkZXJDaGFuZ2UgPSB0aGlzLmhhbmRsZVNsaWRlckNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlVGh1bWJuYWlsID0gdGhpcy5jcmVhdGVUaHVtYm5haWwuYmluZCh0aGlzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgY29uc3QgeyBmaWxlIH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuc2V0VmlkZW9Tb3VyY2UoZmlsZSk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAobmV4dFByb3BzKSB7XG4gICAgLy8gaWYgZmlsZSBjaGFuZ2VzXG4gICAgaWYgKG5leHRQcm9wcy5maWxlICYmIG5leHRQcm9wcy5maWxlICE9PSB0aGlzLnByb3BzLmZpbGUpIHtcbiAgICAgIGNvbnN0IHsgZmlsZSB9ID0gbmV4dFByb3BzO1xuICAgICAgdGhpcy5zZXRWaWRlb1NvdXJjZShmaWxlKTtcbiAgICB9O1xuICB9XG4gIHNldFZpZGVvU291cmNlIChmaWxlKSB7XG4gICAgY29uc3QgcHJldmlld1JlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcHJldmlld1JlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIHByZXZpZXdSZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YVVyaSA9IHByZXZpZXdSZWFkZXIucmVzdWx0O1xuICAgICAgY29uc3QgYmxvYiA9IGRhdGFVUkl0b0Jsb2IoZGF0YVVyaSk7XG4gICAgICBjb25zdCB2aWRlb1NvdXJjZSA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgdmlkZW9Tb3VyY2UgfSk7XG4gICAgfTtcbiAgfVxuICBoYW5kbGVWaWRlb0xvYWRlZERhdGEgKGV2ZW50KSB7XG4gICAgY29uc3QgZHVyYXRpb24gPSBldmVudC50YXJnZXQuZHVyYXRpb247XG4gICAgY29uc3QgdG90YWxNaW51dGVzID0gTWF0aC5mbG9vcihkdXJhdGlvbiAvIDYwKTtcbiAgICBjb25zdCB0b3RhbFNlY29uZHMgPSBNYXRoLmZsb29yKGR1cmF0aW9uICUgNjApO1xuICAgIC8vIHNldCB0aGUgc2xpZGVyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzbGlkZXJNYXhSYW5nZTogZHVyYXRpb24gKiAxMDAsXG4gICAgICBzbGlkZXJWYWx1ZSAgIDogZHVyYXRpb24gKiAxMDAgLyAyLFxuICAgICAgdG90YWxNaW51dGVzLFxuICAgICAgdG90YWxTZWNvbmRzLFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSB2aWRlb1xuICAgIGxldCB2aWRlbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aWRlby10aHVtYi1wbGF5ZXInKTtcbiAgICB2aWRlby5jdXJyZW50VGltZSA9IGR1cmF0aW9uIC8gMjtcbiAgfVxuICBoYW5kbGVTbGlkZXJDaGFuZ2UgKGV2ZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChldmVudC50YXJnZXQudmFsdWUpO1xuICAgIC8vIHVwZGF0ZSB0aGUgc2xpZGVyIHZhbHVlXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzbGlkZXJWYWx1ZTogdmFsdWUsXG4gICAgfSk7XG4gICAgLy8gdXBkYXRlIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIHZpZGVvXG4gICAgbGV0IHZpZGVvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZGVvLXRodW1iLXBsYXllcicpO1xuICAgIHZpZGVvLmN1cnJlbnRUaW1lID0gdmFsdWUgLyAxMDA7XG4gIH1cbiAgY3JlYXRlVGh1bWJuYWlsICgpIHtcbiAgICAvLyB0YWtlIGEgc25hcHNob3RcbiAgICBsZXQgdmlkZW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmlkZW8tdGh1bWItcGxheWVyJyk7XG4gICAgbGV0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhcy53aWR0aCA9IHZpZGVvLnZpZGVvV2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IHZpZGVvLnZpZGVvSGVpZ2h0O1xuICAgIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmRyYXdJbWFnZSh2aWRlbywgMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICBjb25zdCBkYXRhVXJsID0gY2FudmFzLnRvRGF0YVVSTCgpO1xuICAgIGNvbnN0IGJsb2IgPSBkYXRhVVJJdG9CbG9iKGRhdGFVcmwpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gbmV3IEZpbGUoW2Jsb2JdLCBgdGh1bWJuYWlsLnBuZ2AsIHtcbiAgICAgIHR5cGU6ICdpbWFnZS9wbmcnLFxuICAgIH0pO1xuICAgIC8vIHNldCB0aGUgdGh1bWJuYWlsIGluIHJlZHV4IHN0b3JlXG4gICAgaWYgKHNuYXBzaG90KSB7XG4gICAgICB0aGlzLnByb3BzLm9uTmV3VGh1bWJuYWlsKHNuYXBzaG90KTtcbiAgICB9XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7IGVycm9yLCB2aWRlb1NvdXJjZSwgc2xpZGVyTWluUmFuZ2UsIHNsaWRlck1heFJhbmdlLCBzbGlkZXJWYWx1ZSwgdG90YWxNaW51dGVzLCB0b3RhbFNlY29uZHMgfSA9IHRoaXMuc3RhdGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9J2xhYmVsJz5UaHVtYm5haWw6PC9sYWJlbD5cbiAgICAgICAgPHZpZGVvXG4gICAgICAgICAgaWQ9J3ZpZGVvLXRodW1iLXBsYXllcidcbiAgICAgICAgICBwcmVsb2FkPSdtZXRhZGF0YSdcbiAgICAgICAgICBtdXRlZFxuICAgICAgICAgIHN0eWxlPXt7ZGlzcGxheTogJ25vbmUnfX1cbiAgICAgICAgICBwbGF5c0lubGluZVxuICAgICAgICAgIG9uTG9hZGVkRGF0YT17dGhpcy5oYW5kbGVWaWRlb0xvYWRlZERhdGF9XG4gICAgICAgICAgc3JjPXt2aWRlb1NvdXJjZX1cbiAgICAgICAgICBvblNlZWtlZD17dGhpcy5jcmVhdGVUaHVtYm5haWx9XG4gICAgICAgIC8+XG4gICAgICAgIHtcbiAgICAgICAgICBzbGlkZXJWYWx1ZSA/IChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdmbGV4LWNvbnRhaW5lci0tcm93IGZsZXgtY29udGFpbmVyLS1zcGFjZS1iZXR3ZWVuLWNlbnRlcicgc3R5bGU9e3t3aWR0aDogJzEwMCUnfX0+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdpbmZvLW1lc3NhZ2UnPjAnMDBcIjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J2luZm8tbWVzc2FnZSc+e3RvdGFsTWludXRlc30ne3RvdGFsU2Vjb25kc31cIjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPSdyYW5nZSdcbiAgICAgICAgICAgICAgICAgIG1pbj17c2xpZGVyTWluUmFuZ2V9XG4gICAgICAgICAgICAgICAgICBtYXg9e3NsaWRlck1heFJhbmdlfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3NsaWRlclZhbHVlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPSdzbGlkZXInXG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVTbGlkZXJDaGFuZ2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSdpbmZvLW1lc3NhZ2UnID5sb2FkaW5nLi4uIDwvcD5cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgeyBlcnJvciA/IChcbiAgICAgICAgICA8cCBjbGFzc05hbWU9J2luZm8tbWVzc2FnZS0tZmFpbHVyZSc+e2Vycm9yfTwvcD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8cCBjbGFzc05hbWU9J2luZm8tbWVzc2FnZSc+VXNlIHNsaWRlciB0byBzZXQgdGh1bWJuYWlsPC9wPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQdWJsaXNoVGh1bWJuYWlsSW5wdXQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoVGh1bWJuYWlsSW5wdXQvdmlldy5qc3giLCJpbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7dXBkYXRlTWV0YWRhdGEsIHRvZ2dsZU1ldGFkYXRhSW5wdXRzfSBmcm9tICdhY3Rpb25zL3B1Ymxpc2gnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgcHVibGlzaCB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgc2hvd01ldGFkYXRhSW5wdXRzOiBwdWJsaXNoLnNob3dNZXRhZGF0YUlucHV0cyxcbiAgICBkZXNjcmlwdGlvbiAgICAgICA6IHB1Ymxpc2gubWV0YWRhdGEuZGVzY3JpcHRpb24sXG4gICAgbGljZW5zZSAgICAgICAgICAgOiBwdWJsaXNoLm1ldGFkYXRhLmxpY2Vuc2UsXG4gICAgbnNmdyAgICAgICAgICAgICAgOiBwdWJsaXNoLm1ldGFkYXRhLm5zZncsXG4gIH07XG59O1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSBkaXNwYXRjaCA9PiB7XG4gIHJldHVybiB7XG4gICAgb25NZXRhZGF0YUNoYW5nZTogKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVNZXRhZGF0YShuYW1lLCB2YWx1ZSkpO1xuICAgIH0sXG4gICAgb25Ub2dnbGVNZXRhZGF0YUlucHV0czogKHZhbHVlKSA9PiB7XG4gICAgICBkaXNwYXRjaCh0b2dnbGVNZXRhZGF0YUlucHV0cyh2YWx1ZSkpO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hNZXRhZGF0YUlucHV0cy9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRXhwYW5kaW5nVGV4dEFyZWEgZnJvbSAnY29tcG9uZW50cy9FeHBhbmRpbmdUZXh0QXJlYSc7XG5cbmNsYXNzIFB1Ymxpc2hNZXRhZGF0YUlucHV0cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnRvZ2dsZVNob3dJbnB1dHMgPSB0aGlzLnRvZ2dsZVNob3dJbnB1dHMuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZUlucHV0ID0gdGhpcy5oYW5kbGVJbnB1dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlU2VsZWN0ID0gdGhpcy5oYW5kbGVTZWxlY3QuYmluZCh0aGlzKTtcbiAgfVxuICB0b2dnbGVTaG93SW5wdXRzICgpIHtcbiAgICB0aGlzLnByb3BzLm9uVG9nZ2xlTWV0YWRhdGFJbnB1dHMoIXRoaXMucHJvcHMuc2hvd01ldGFkYXRhSW5wdXRzKTtcbiAgfVxuICBoYW5kbGVJbnB1dCAoZXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94JyA/IHRhcmdldC5jaGVja2VkIDogdGFyZ2V0LnZhbHVlO1xuICAgIGNvbnN0IG5hbWUgPSB0YXJnZXQubmFtZTtcbiAgICB0aGlzLnByb3BzLm9uTWV0YWRhdGFDaGFuZ2UobmFtZSwgdmFsdWUpO1xuICB9XG4gIGhhbmRsZVNlbGVjdCAoZXZlbnQpIHtcbiAgICBjb25zdCBuYW1lID0gZXZlbnQudGFyZ2V0Lm5hbWU7XG4gICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBldmVudC50YXJnZXQuc2VsZWN0ZWRPcHRpb25zWzBdLnZhbHVlO1xuICAgIHRoaXMucHJvcHMub25NZXRhZGF0YUNoYW5nZShuYW1lLCBzZWxlY3RlZE9wdGlvbik7XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBpZD0ncHVibGlzaC1kZXRhaWxzJyBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCByb3ctLW5vLXRvcCByb3ctLXdpZGUnPlxuICAgICAgICB7dGhpcy5wcm9wcy5zaG93TWV0YWRhdGFJbnB1dHMgJiYgKFxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tbm8tdG9wJz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTMgY29sdW1uLS1tZWQtMTAgYWxpZ24tY29udGVudC10b3AnPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPSdwdWJsaXNoLWxpY2Vuc2UnIGNsYXNzTmFtZT0nbGFiZWwnPkRlc2NyaXB0aW9uOjwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PjxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS03IGNvbHVtbi0tc21sLTEwJz5cbiAgICAgICAgICAgICAgICA8RXhwYW5kaW5nVGV4dEFyZWFcbiAgICAgICAgICAgICAgICAgIGlkPSdwdWJsaXNoLWRlc2NyaXB0aW9uJ1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPSd0ZXh0YXJlYSB0ZXh0YXJlYS0tcHJpbWFyeSB0ZXh0YXJlYS0tZnVsbC13aWR0aCdcbiAgICAgICAgICAgICAgICAgIHJvd3M9ezF9XG4gICAgICAgICAgICAgICAgICBtYXhMZW5ndGg9ezIwMDB9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXhIZWlnaHQ6IDIwMCB9fVxuICAgICAgICAgICAgICAgICAgbmFtZT0nZGVzY3JpcHRpb24nXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nT3B0aW9uYWwgZGVzY3JpcHRpb24nXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5wcm9wcy5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUlucHV0fSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tbm8tdG9wJz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTMgY29sdW1uLS1tZWQtMTAnPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPSdwdWJsaXNoLWxpY2Vuc2UnIGNsYXNzTmFtZT0nbGFiZWwnPkxpY2Vuc2U6PC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTcgY29sdW1uLS1zbWwtMTAnPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgdHlwZT0ndGV4dCcgbmFtZT0nbGljZW5zZScgaWQ9J3B1Ymxpc2gtbGljZW5zZScgY2xhc3NOYW1lPSdzZWxlY3Qgc2VsZWN0LS1wcmltYXJ5JyBvbkNoYW5nZT17dGhpcy5oYW5kbGVTZWxlY3R9PlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nICc+VW5zcGVjaWZpZWQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9J1B1YmxpYyBEb21haW4nPlB1YmxpYyBEb21haW48L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9J0NyZWF0aXZlIENvbW1vbnMnPkNyZWF0aXZlIENvbW1vbnM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLW5vLXRvcCc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0zJz5cbiAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj0ncHVibGlzaC1uc2Z3JyBjbGFzc05hbWU9J2xhYmVsJz5NYXR1cmU6PC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTcnPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzc05hbWU9J2lucHV0LWNoZWNrYm94JyB0eXBlPSdjaGVja2JveCcgaWQ9J3B1Ymxpc2gtbnNmdycgbmFtZT0nbnNmdycgdmFsdWU9e3RoaXMucHJvcHMubnNmd30gb25DaGFuZ2U9e3RoaXMuaGFuZGxlSW5wdXR9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSdidXR0b24tLXNlY29uZGFyeScgb25DbGljaz17dGhpcy50b2dnbGVTaG93SW5wdXRzfT57dGhpcy5wcm9wcy5zaG93TWV0YWRhdGFJbnB1dHMgPyAnbGVzcycgOiAnbW9yZSd9PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1Ymxpc2hNZXRhZGF0YUlucHV0cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hNZXRhZGF0YUlucHV0cy92aWV3LmpzeCIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5jbGFzcyBFeHBhbmRpbmdUZXh0YXJlYSBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLl9oYW5kbGVDaGFuZ2UgPSB0aGlzLl9oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgdGhpcy5hZGp1c3RUZXh0YXJlYSh7fSk7XG4gIH1cbiAgX2hhbmRsZUNoYW5nZSAoZXZlbnQpIHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoZXZlbnQpO1xuICAgIHRoaXMuYWRqdXN0VGV4dGFyZWEoZXZlbnQpO1xuICB9XG4gIGFkanVzdFRleHRhcmVhICh7IHRhcmdldCA9IHRoaXMuZWwgfSkge1xuICAgIHRhcmdldC5zdHlsZS5oZWlnaHQgPSAwO1xuICAgIHRhcmdldC5zdHlsZS5oZWlnaHQgPSBgJHt0YXJnZXQuc2Nyb2xsSGVpZ2h0fXB4YDtcbiAgfVxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHsgLi4ucmVzdCB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgICByZWY9e3ggPT4gdGhpcy5lbCA9IHh9XG4gICAgICAgIG9uQ2hhbmdlPXt0aGlzLl9oYW5kbGVDaGFuZ2V9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuRXhwYW5kaW5nVGV4dGFyZWEucHJvcFR5cGVzID0ge1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFeHBhbmRpbmdUZXh0YXJlYTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb21wb25lbnRzL0V4cGFuZGluZ1RleHRBcmVhL2luZGV4LmpzeCIsImltcG9ydCB7Y29ubmVjdH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHtzZXRQdWJsaXNoSW5DaGFubmVsLCB1cGRhdGVTZWxlY3RlZENoYW5uZWwsIHVwZGF0ZUVycm9yfSBmcm9tICdhY3Rpb25zL3B1Ymxpc2gnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgY2hhbm5lbCwgcHVibGlzaCB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgbG9nZ2VkSW5DaGFubmVsTmFtZTogY2hhbm5lbC5sb2dnZWRJbkNoYW5uZWwubmFtZSxcbiAgICBwdWJsaXNoSW5DaGFubmVsICAgOiBwdWJsaXNoLnB1Ymxpc2hJbkNoYW5uZWwsXG4gICAgc2VsZWN0ZWRDaGFubmVsICAgIDogcHVibGlzaC5zZWxlY3RlZENoYW5uZWwsXG4gICAgY2hhbm5lbEVycm9yICAgICAgIDogcHVibGlzaC5lcnJvci5jaGFubmVsLFxuICB9O1xufTtcblxuY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gZGlzcGF0Y2ggPT4ge1xuICByZXR1cm4ge1xuICAgIG9uUHVibGlzaEluQ2hhbm5lbENoYW5nZTogKHZhbHVlKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVFcnJvcignY2hhbm5lbCcsIG51bGwpKTtcbiAgICAgIGRpc3BhdGNoKHNldFB1Ymxpc2hJbkNoYW5uZWwodmFsdWUpKTtcbiAgICB9LFxuICAgIG9uQ2hhbm5lbFNlbGVjdDogKHZhbHVlKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVFcnJvcignY2hhbm5lbCcsIG51bGwpKTtcbiAgICAgIGRpc3BhdGNoKHVwZGF0ZVNlbGVjdGVkQ2hhbm5lbCh2YWx1ZSkpO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxTZWxlY3QvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENoYW5uZWxMb2dpbkZvcm0gZnJvbSAnY29udGFpbmVycy9DaGFubmVsTG9naW5Gb3JtJztcbmltcG9ydCBDaGFubmVsQ3JlYXRlRm9ybSBmcm9tICdjb250YWluZXJzL0NoYW5uZWxDcmVhdGVGb3JtJztcbmltcG9ydCAqIGFzIHN0YXRlcyBmcm9tICdjb25zdGFudHMvcHVibGlzaF9jaGFubmVsX3NlbGVjdF9zdGF0ZXMnO1xuXG5jbGFzcyBDaGFubmVsU2VsZWN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMudG9nZ2xlQW5vbnltb3VzUHVibGlzaCA9IHRoaXMudG9nZ2xlQW5vbnltb3VzUHVibGlzaC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlU2VsZWN0aW9uID0gdGhpcy5oYW5kbGVTZWxlY3Rpb24uYmluZCh0aGlzKTtcbiAgfVxuICB0b2dnbGVBbm9ueW1vdXNQdWJsaXNoIChldmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIGlmICh2YWx1ZSA9PT0gJ2Fub255bW91cycpIHtcbiAgICAgIHRoaXMucHJvcHMub25QdWJsaXNoSW5DaGFubmVsQ2hhbmdlKGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy5vblB1Ymxpc2hJbkNoYW5uZWxDaGFuZ2UodHJ1ZSk7XG4gICAgfVxuICB9XG4gIGhhbmRsZVNlbGVjdGlvbiAoZXZlbnQpIHtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IGV2ZW50LnRhcmdldC5zZWxlY3RlZE9wdGlvbnNbMF0udmFsdWU7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5uZWxTZWxlY3Qoc2VsZWN0ZWRPcHRpb24pO1xuICB9XG4gIHJlbmRlciAoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxmb3JtPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0zIGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0nYW5vbnltb3VzLW9yLWNoYW5uZWwnIGlkPSdhbm9ueW1vdXMtcmFkaW8nIGNsYXNzTmFtZT0naW5wdXQtcmFkaW8nIHZhbHVlPSdhbm9ueW1vdXMnIGNoZWNrZWQ9eyF0aGlzLnByb3BzLnB1Ymxpc2hJbkNoYW5uZWx9IG9uQ2hhbmdlPXt0aGlzLnRvZ2dsZUFub255bW91c1B1Ymxpc2h9IC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSdsYWJlbCBsYWJlbC0tcG9pbnRlcicgaHRtbEZvcj0nYW5vbnltb3VzLXJhZGlvJz5Bbm9ueW1vdXM8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS03IGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0nYW5vbnltb3VzLW9yLWNoYW5uZWwnIGlkPSdjaGFubmVsLXJhZGlvJyBjbGFzc05hbWU9J2lucHV0LXJhZGlvJyB2YWx1ZT0naW4gYSBjaGFubmVsJyBjaGVja2VkPXt0aGlzLnByb3BzLnB1Ymxpc2hJbkNoYW5uZWx9IG9uQ2hhbmdlPXt0aGlzLnRvZ2dsZUFub255bW91c1B1Ymxpc2h9IC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSdsYWJlbCBsYWJlbC0tcG9pbnRlcicgaHRtbEZvcj0nY2hhbm5lbC1yYWRpbyc+SW4gYSBjaGFubmVsPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7IHRoaXMucHJvcHMuY2hhbm5lbEVycm9yID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSdpbmZvLW1lc3NhZ2UtLWZhaWx1cmUnPnt0aGlzLnByb3BzLmNoYW5uZWxFcnJvcn08L3A+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0naW5mby1tZXNzYWdlJz5QdWJsaXNoIGFub255bW91c2x5IG9yIGluIGEgY2hhbm5lbDwvcD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Zvcm0+XG4gICAgICAgIHsgdGhpcy5wcm9wcy5wdWJsaXNoSW5DaGFubmVsICYmIChcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTMnPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSdsYWJlbCcgaHRtbEZvcj0nY2hhbm5lbC1uYW1lLXNlbGVjdCc+Q2hhbm5lbDo8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTcnPlxuICAgICAgICAgICAgICA8c2VsZWN0IHR5cGU9J3RleHQnIGlkPSdjaGFubmVsLW5hbWUtc2VsZWN0JyBjbGFzc05hbWU9J3NlbGVjdCBzZWxlY3QtLWFycm93JyB2YWx1ZT17dGhpcy5wcm9wcy5zZWxlY3RlZENoYW5uZWx9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZVNlbGVjdGlvbn0+XG4gICAgICAgICAgICAgICAgeyB0aGlzLnByb3BzLmxvZ2dlZEluQ2hhbm5lbE5hbWUgJiYgPG9wdGlvbiB2YWx1ZT17dGhpcy5wcm9wcy5sb2dnZWRJbkNoYW5uZWxOYW1lfSBpZD0ncHVibGlzaC1jaGFubmVsLXNlbGVjdC1jaGFubmVsLW9wdGlvbic+e3RoaXMucHJvcHMubG9nZ2VkSW5DaGFubmVsTmFtZX08L29wdGlvbj4gfVxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9e3N0YXRlcy5MT0dJTn0+RXhpc3Rpbmc8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXtzdGF0ZXMuQ1JFQVRFfT5OZXc8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHsgKHRoaXMucHJvcHMuc2VsZWN0ZWRDaGFubmVsID09PSBzdGF0ZXMuTE9HSU4pICYmIDxDaGFubmVsTG9naW5Gb3JtIC8+IH1cbiAgICAgICAgICAgIHsgKHRoaXMucHJvcHMuc2VsZWN0ZWRDaGFubmVsID09PSBzdGF0ZXMuQ1JFQVRFKSAmJiA8Q2hhbm5lbENyZWF0ZUZvcm0gLz4gfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsU2VsZWN0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvQ2hhbm5lbFNlbGVjdC92aWV3LmpzeCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICd1dGlscy9yZXF1ZXN0JztcblxuY2xhc3MgQ2hhbm5lbExvZ2luRm9ybSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZXJyb3IgICA6IG51bGwsXG4gICAgICBuYW1lICAgIDogJycsXG4gICAgICBwYXNzd29yZDogJycsXG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUlucHV0ID0gdGhpcy5oYW5kbGVJbnB1dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMubG9naW5Ub0NoYW5uZWwgPSB0aGlzLmxvZ2luVG9DaGFubmVsLmJpbmQodGhpcyk7XG4gIH1cbiAgaGFuZGxlSW5wdXQgKGV2ZW50KSB7XG4gICAgY29uc3QgbmFtZSA9IGV2ZW50LnRhcmdldC5uYW1lO1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1tuYW1lXTogdmFsdWV9KTtcbiAgfVxuICBsb2dpblRvQ2hhbm5lbCAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG1ldGhvZCA6ICdQT1NUJyxcbiAgICAgIGJvZHkgICA6IEpTT04uc3RyaW5naWZ5KHt1c2VybmFtZTogdGhpcy5zdGF0ZS5uYW1lLCBwYXNzd29yZDogdGhpcy5zdGF0ZS5wYXNzd29yZH0pLFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoe1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSksXG4gICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgIH07XG4gICAgcmVxdWVzdCgnbG9naW4nLCBwYXJhbXMpXG4gICAgICAudGhlbigoe3N1Y2Nlc3MsIGNoYW5uZWxOYW1lLCBzaG9ydENoYW5uZWxJZCwgY2hhbm5lbENsYWltSWQsIG1lc3NhZ2V9KSA9PiB7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5uZWxMb2dpbihjaGFubmVsTmFtZSwgc2hvcnRDaGFubmVsSWQsIGNoYW5uZWxDbGFpbUlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsnZXJyb3InOiBtZXNzYWdlfSk7XG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsnZXJyb3InOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7J2Vycm9yJzogZXJyb3J9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGZvcm0gaWQ9J2NoYW5uZWwtbG9naW4tZm9ybSc+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS13aWRlIHJvdy0tc2hvcnQnPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0zIGNvbHVtbi0tc21sLTEwJz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9J2xhYmVsJyBodG1sRm9yPSdjaGFubmVsLWxvZ2luLW5hbWUtaW5wdXQnPk5hbWU6PC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj48ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tNiBjb2x1bW4tLXNtbC0xMCc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0naW5wdXQtdGV4dC0tcHJpbWFyeSBmbGV4LWNvbnRhaW5lci0tcm93IGZsZXgtY29udGFpbmVyLS1sZWZ0LWJvdHRvbSc+XG4gICAgICAgICAgICAgIDxzcGFuPkA8L3NwYW4+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nY2hhbm5lbC1sb2dpbi1uYW1lLWlucHV0JyBjbGFzc05hbWU9J2lucHV0LXRleHQnIG5hbWU9J25hbWUnIHBsYWNlaG9sZGVyPSdZb3VyIENoYW5uZWwgTmFtZScgdmFsdWU9e3RoaXMuc3RhdGUuY2hhbm5lbE5hbWV9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUlucHV0fSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0td2lkZSByb3ctLXNob3J0Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tMyBjb2x1bW4tLXNtbC0xMCc+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSdsYWJlbCcgaHRtbEZvcj0nY2hhbm5lbC1sb2dpbi1wYXNzd29yZC1pbnB1dCcgPlBhc3N3b3JkOjwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTYgY29sdW1uLS1zbWwtMTAnPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2lucHV0LXRleHQtLXByaW1hcnknPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ncGFzc3dvcmQnIGlkPSdjaGFubmVsLWxvZ2luLXBhc3N3b3JkLWlucHV0JyBuYW1lPSdwYXNzd29yZCcgY2xhc3NOYW1lPSdpbnB1dC10ZXh0JyBwbGFjZWhvbGRlcj0nJyB2YWx1ZT17dGhpcy5zdGF0ZS5jaGFubmVsUGFzc3dvcmR9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUlucHV0fSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7IHRoaXMuc3RhdGUuZXJyb3IgPyAoXG4gICAgICAgICAgPHAgY2xhc3NOYW1lPSdpbmZvLW1lc3NhZ2UtLWZhaWx1cmUnPnt0aGlzLnN0YXRlLmVycm9yfTwvcD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8cCBjbGFzc05hbWU9J2luZm8tbWVzc2FnZSc+RW50ZXIgdGhlIG5hbWUgYW5kIHBhc3N3b3JkIGZvciB5b3VyIGNoYW5uZWw8L3A+XG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS13aWRlJz5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT0nYnV0dG9uLS1wcmltYXJ5JyBvbkNsaWNrPXt0aGlzLmxvZ2luVG9DaGFubmVsfT5BdXRoZW50aWNhdGU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Zvcm0+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsTG9naW5Gb3JtO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvQ2hhbm5lbExvZ2luRm9ybS92aWV3LmpzeCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvZ3Jlc3NCYXIgZnJvbSAnY29tcG9uZW50cy9Qcm9ncmVzc0Jhcic7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICd1dGlscy9yZXF1ZXN0JztcblxuY2xhc3MgQ2hhbm5lbENyZWF0ZUZvcm0gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGVycm9yICAgOiBudWxsLFxuICAgICAgY2hhbm5lbCA6ICcnLFxuICAgICAgcGFzc3dvcmQ6ICcnLFxuICAgICAgc3RhdHVzICA6IG51bGwsXG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUNoYW5uZWxJbnB1dCA9IHRoaXMuaGFuZGxlQ2hhbm5lbElucHV0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVJbnB1dCA9IHRoaXMuaGFuZGxlSW5wdXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUNoYW5uZWwgPSB0aGlzLmNyZWF0ZUNoYW5uZWwuYmluZCh0aGlzKTtcbiAgfVxuICBjbGVhbnNlQ2hhbm5lbElucHV0IChpbnB1dCkge1xuICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgvXFxzKy9nLCAnLScpOyAvLyByZXBsYWNlIHNwYWNlcyB3aXRoIGRhc2hlc1xuICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgvW15BLVphLXowLTktXS9nLCAnJyk7ICAvLyByZW1vdmUgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IEEtWiwgYS16LCAwLTksIG9yICctJ1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBoYW5kbGVDaGFubmVsSW5wdXQgKGV2ZW50KSB7XG4gICAgbGV0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHZhbHVlID0gdGhpcy5jbGVhbnNlQ2hhbm5lbElucHV0KHZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHtjaGFubmVsOiB2YWx1ZX0pO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy51cGRhdGVJc0NoYW5uZWxBdmFpbGFibGUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtlcnJvcjogJ1BsZWFzZSBlbnRlciBhIGNoYW5uZWwgbmFtZSd9KTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlSW5wdXQgKGV2ZW50KSB7XG4gICAgY29uc3QgbmFtZSA9IGV2ZW50LnRhcmdldC5uYW1lO1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1tuYW1lXTogdmFsdWV9KTtcbiAgfVxuICB1cGRhdGVJc0NoYW5uZWxBdmFpbGFibGUgKGNoYW5uZWwpIHtcbiAgICBjb25zdCBjaGFubmVsV2l0aEF0U3ltYm9sID0gYEAke2NoYW5uZWx9YDtcbiAgICByZXF1ZXN0KGAvYXBpL2NoYW5uZWwvYXZhaWxhYmlsaXR5LyR7Y2hhbm5lbFdpdGhBdFN5bWJvbH1gKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsnZXJyb3InOiBudWxsfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsnZXJyb3InOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgICB9KTtcbiAgfVxuICBjaGVja0lzQ2hhbm5lbEF2YWlsYWJsZSAoY2hhbm5lbCkge1xuICAgIGNvbnN0IGNoYW5uZWxXaXRoQXRTeW1ib2wgPSBgQCR7Y2hhbm5lbH1gO1xuICAgIHJldHVybiByZXF1ZXN0KGAvYXBpL2NoYW5uZWwvYXZhaWxhYmlsaXR5LyR7Y2hhbm5lbFdpdGhBdFN5bWJvbH1gKTtcbiAgfVxuICBjaGVja0lzUGFzc3dvcmRQcm92aWRlZCAocGFzc3dvcmQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFwYXNzd29yZCB8fCBwYXNzd29yZC5sZW5ndGggPCAxKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSBhIHBhc3N3b3JkJykpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG4gIG1ha2VQdWJsaXNoQ2hhbm5lbFJlcXVlc3QgKHVzZXJuYW1lLCBwYXNzd29yZCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG1ldGhvZCA6ICdQT1NUJyxcbiAgICAgIGJvZHkgICA6IEpTT04uc3RyaW5naWZ5KHt1c2VybmFtZSwgcGFzc3dvcmR9KSxcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0pLFxuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXF1ZXN0KCcvc2lnbnVwJywgcGFyYW1zKVxuICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgVW5mb3J0dW5hdGVseSwgd2UgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgY3JlYXRpbmcgeW91ciBjaGFubmVsLiBQbGVhc2UgbGV0IHVzIGtub3cgaW4gRGlzY29yZCEgJHtlcnJvci5tZXNzYWdlfWApKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgY3JlYXRlQ2hhbm5lbCAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuY2hlY2tJc1Bhc3N3b3JkUHJvdmlkZWQodGhpcy5zdGF0ZS5wYXNzd29yZClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tJc0NoYW5uZWxBdmFpbGFibGUodGhpcy5zdGF0ZS5jaGFubmVsKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3N0YXR1czogJ1dlIGFyZSBwdWJsaXNoaW5nIHlvdXIgbmV3IGNoYW5uZWwuICBTaXQgdGlnaHQuLi4nfSk7XG4gICAgICAgIHJldHVybiB0aGlzLm1ha2VQdWJsaXNoQ2hhbm5lbFJlcXVlc3QodGhpcy5zdGF0ZS5jaGFubmVsLCB0aGlzLnN0YXRlLnBhc3N3b3JkKTtcbiAgICAgIH0pXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtzdGF0dXM6IG51bGx9KTtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5uZWxMb2dpbihyZXN1bHQuY2hhbm5lbE5hbWUsIHJlc3VsdC5zaG9ydENoYW5uZWxJZCwgcmVzdWx0LmNoYW5uZWxDbGFpbUlkKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7J2Vycm9yJzogZXJyb3IubWVzc2FnZSwgc3RhdHVzOiBudWxsfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7J2Vycm9yJzogZXJyb3IsIHN0YXR1czogbnVsbH0pO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgeyAhdGhpcy5zdGF0ZS5zdGF0dXMgPyAoXG4gICAgICAgICAgPGZvcm0gaWQ9J3B1Ymxpc2gtY2hhbm5lbC1mb3JtJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS13aWRlIHJvdy0tc2hvcnQnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tMyBjb2x1bW4tLXNtbC0xMCc+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0nbGFiZWwnIGh0bWxGb3I9J25ldy1jaGFubmVsLW5hbWUnPk5hbWU6PC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTYgY29sdW1uLS1zbWwtMTAnPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdpbnB1dC10ZXh0LS1wcmltYXJ5IGZsZXgtY29udGFpbmVyLS1yb3cgZmxleC1jb250YWluZXItLWxlZnQtYm90dG9tIHNwYW4tLXJlbGF0aXZlJz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPkA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nY2hhbm5lbCcgaWQ9J25ldy1jaGFubmVsLW5hbWUnIGNsYXNzTmFtZT0naW5wdXQtdGV4dCcgcGxhY2Vob2xkZXI9J2V4YW1wbGVDaGFubmVsTmFtZScgdmFsdWU9e3RoaXMuc3RhdGUuY2hhbm5lbH0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbm5lbElucHV0fSAvPlxuICAgICAgICAgICAgICAgICAgeyAodGhpcy5zdGF0ZS5jaGFubmVsICYmICF0aGlzLnN0YXRlLmVycm9yKSAmJiA8c3BhbiBpZD0naW5wdXQtc3VjY2Vzcy1jaGFubmVsLW5hbWUnIGNsYXNzTmFtZT0naW5mby1tZXNzYWdlLS1zdWNjZXNzIHNwYW4tLWFic29sdXRlJz57J1xcdTI3MTMnfTwvc3Bhbj4gfVxuICAgICAgICAgICAgICAgICAgeyB0aGlzLnN0YXRlLmVycm9yICYmIDxzcGFuIGlkPSdpbnB1dC1zdWNjZXNzLWNoYW5uZWwtbmFtZScgY2xhc3NOYW1lPSdpbmZvLW1lc3NhZ2UtLWZhaWx1cmUgc3Bhbi0tYWJzb2x1dGUnPnsnXFx1MjcxNid9PC9zcGFuPiB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0td2lkZSByb3ctLXNob3J0Jz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTMgY29sdW1uLS1zbWwtMTAnPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9J2xhYmVsJyBodG1sRm9yPSduZXctY2hhbm5lbC1wYXNzd29yZCc+UGFzc3dvcmQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTYgY29sdW1uLS1zbWwtMTAnPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdpbnB1dC10ZXh0LS1wcmltYXJ5Jz5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdwYXNzd29yZCcgbmFtZT0ncGFzc3dvcmQnIGlkPSduZXctY2hhbm5lbC1wYXNzd29yZCcgY2xhc3NOYW1lPSdpbnB1dC10ZXh0JyAgcGxhY2Vob2xkZXI9JycgdmFsdWU9e3RoaXMuc3RhdGUucGFzc3dvcmR9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUlucHV0fSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge3RoaXMuc3RhdGUuZXJyb3IgPyAoXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0naW5mby1tZXNzYWdlLS1mYWlsdXJlJz57dGhpcy5zdGF0ZS5lcnJvcn08L3A+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9J2luZm8tbWVzc2FnZSc+Q2hvb3NlIGEgbmFtZSBhbmQgcGFzc3dvcmQgZm9yIHlvdXIgY2hhbm5lbDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0td2lkZSc+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSdidXR0b24tLXByaW1hcnknIG9uQ2xpY2s9e3RoaXMuY3JlYXRlQ2hhbm5lbH0+Q3JlYXRlIENoYW5uZWw8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSdmaW5lLXByaW50Jz57dGhpcy5zdGF0ZS5zdGF0dXN9PC9wPlxuICAgICAgICAgICAgPFByb2dyZXNzQmFyIHNpemU9ezEyfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsQ3JlYXRlRm9ybTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxDcmVhdGVGb3JtL3ZpZXcuanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgQWN0aXZlU3RhdHVzQmFyID0gKCkgPT4ge1xuICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPSdwcm9ncmVzcy1iYXIgcHJvZ3Jlc3MtYmFyLS1hY3RpdmUnPnwgPC9zcGFuPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFjdGl2ZVN0YXR1c0JhcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb21wb25lbnRzL0FjdGl2ZVN0YXR1c0Jhci9pbmRleC5qc3giLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBJbmFjdGl2ZVN0YXR1c0JhciA9ICgpID0+IHtcbiAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT0ncHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci0taW5hY3RpdmUnPnwgPC9zcGFuPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEluYWN0aXZlU3RhdHVzQmFyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbXBvbmVudHMvSW5hY3RpdmVTdGF0dXNCYXIvaW5kZXguanN4IiwiaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge2NsZWFyRmlsZX0gZnJvbSAnYWN0aW9ucy9wdWJsaXNoJztcbmltcG9ydCBWaWV3IGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9ICh7IHB1Ymxpc2ggfSkgPT4ge1xuICByZXR1cm4ge1xuICAgIHN0YXR1cyA6IHB1Ymxpc2guc3RhdHVzLnN0YXR1cyxcbiAgICBtZXNzYWdlOiBwdWJsaXNoLnN0YXR1cy5tZXNzYWdlLFxuICB9O1xufTtcblxuY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0ge1xuICBjbGVhckZpbGUsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hTdGF0dXMvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb2dyZXNzQmFyIGZyb20gJ2NvbXBvbmVudHMvUHJvZ3Jlc3NCYXInO1xuaW1wb3J0ICogYXMgcHVibGlzaFN0YXRlcyBmcm9tICdjb25zdGFudHMvcHVibGlzaF9jbGFpbV9zdGF0ZXMnO1xuXG5jbGFzcyBQdWJsaXNoU3RhdHVzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7IHN0YXR1cywgbWVzc2FnZSwgY2xlYXJGaWxlIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tdGFsbCBmbGV4LWNvbnRhaW5lci0tY29sdW1uIGZsZXgtY29udGFpbmVyLS1jZW50ZXItY2VudGVyJz5cbiAgICAgICAge3N0YXR1cyA9PT0gcHVibGlzaFN0YXRlcy5MT0FEX1NUQVJUICYmXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgYWxpZ24tY29udGVudC1jZW50ZXInPlxuICAgICAgICAgIDxwPkZpbGUgaXMgbG9hZGluZyB0byBzZXJ2ZXI8L3A+XG4gICAgICAgICAgPHAgY2xhc3NOYW1lPSdibHVlJz4wJTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAge3N0YXR1cyA9PT0gcHVibGlzaFN0YXRlcy5MT0FESU5HICYmXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyBhbGlnbi1jb250ZW50LWNlbnRlcic+XG4gICAgICAgICAgICA8cD5GaWxlIGlzIGxvYWRpbmcgdG8gc2VydmVyPC9wPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSdibHVlJz57bWVzc2FnZX08L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIHtzdGF0dXMgPT09IHB1Ymxpc2hTdGF0ZXMuUFVCTElTSElORyAmJlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IGFsaWduLWNvbnRlbnQtY2VudGVyJz5cbiAgICAgICAgICA8cD5VcGxvYWQgY29tcGxldGUuICBZb3VyIGZpbGUgaXMgbm93IGJlaW5nIHB1Ymxpc2hlZCBvbiB0aGUgYmxvY2tjaGFpbi4uLjwvcD5cbiAgICAgICAgICA8UHJvZ3Jlc3NCYXIgc2l6ZT17MTJ9IC8+XG4gICAgICAgICAgPHA+Q3VyaW91cyB3aGF0IG1hZ2ljIGlzIGhhcHBlbmluZyBoZXJlPyA8YSBjbGFzc05hbWU9J2xpbmstLXByaW1hcnknIHRhcmdldD0nYmxhbmsnIGhyZWY9J2h0dHBzOi8vbGJyeS5pby9mYXEvd2hhdC1pcy1sYnJ5Jz5MZWFybiBtb3JlLjwvYT48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIHtzdGF0dXMgPT09IHB1Ymxpc2hTdGF0ZXMuU1VDQ0VTUyAmJlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IGFsaWduLWNvbnRlbnQtY2VudGVyJz5cbiAgICAgICAgICA8cD5Zb3VyIHB1Ymxpc2ggaXMgY29tcGxldGUhIFlvdSBhcmUgYmVpbmcgcmVkaXJlY3RlZCB0byBpdCBub3cuPC9wPlxuICAgICAgICAgIDxwPklmIHlvdSBhcmUgbm90IGF1dG9tYXRpY2FsbHkgcmVkaXJlY3RlZCwgPGEgY2xhc3NOYW1lPSdsaW5rLS1wcmltYXJ5JyB0YXJnZXQ9J19ibGFuaycgaHJlZj17bWVzc2FnZX0+Y2xpY2sgaGVyZS48L2E+PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICB7c3RhdHVzID09PSBwdWJsaXNoU3RhdGVzLkZBSUxFRCAmJlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IGFsaWduLWNvbnRlbnQtY2VudGVyJz5cbiAgICAgICAgICA8cD5Tb21ldGhpbmcgd2VudCB3cm9uZy4uLjwvcD5cbiAgICAgICAgICA8cD48c3Ryb25nPnttZXNzYWdlfTwvc3Ryb25nPjwvcD5cbiAgICAgICAgICA8cD5Gb3IgaGVscCwgcG9zdCB0aGUgYWJvdmUgZXJyb3IgdGV4dCBpbiB0aGUgI3NwZWVjaCBjaGFubmVsIG9uIHRoZSA8YSBjbGFzc05hbWU9J2xpbmstLXByaW1hcnknIGhyZWY9J2h0dHBzOi8vZGlzY29yZC5nZy9Zallid2hTJyB0YXJnZXQ9J19ibGFuayc+bGJyeSBkaXNjb3JkPC9hPjwvcD5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT0nYnV0dG9uLS1zZWNvbmRhcnknIG9uQ2xpY2s9e2NsZWFyRmlsZX0+UmVzZXQ8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFB1Ymxpc2hTdGF0dXM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoU3RhdHVzL3ZpZXcuanN4IiwiZXhwb3J0IGNvbnN0IExPQURfU1RBUlQgPSAnTE9BRF9TVEFSVCc7XG5leHBvcnQgY29uc3QgTE9BRElORyA9ICdMT0FESU5HJztcbmV4cG9ydCBjb25zdCBQVUJMSVNISU5HID0gJ1BVQkxJU0hJTkcnO1xuZXhwb3J0IGNvbnN0IFNVQ0NFU1MgPSAnU1VDQ0VTUyc7XG5leHBvcnQgY29uc3QgRkFJTEVEID0gJ0ZBSUxFRCc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29uc3RhbnRzL3B1Ymxpc2hfY2xhaW1fc3RhdGVzLmpzIiwiaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBwdWJsaXNoIH0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlOiBwdWJsaXNoLmRpc2FibGVkTWVzc2FnZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBudWxsKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hEaXNhYmxlZE1lc3NhZ2UvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jbGFzcyBQdWJsaXNoRGlzYWJsZWRNZXNzYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5wcm9wcy5tZXNzYWdlO1xuICAgIGNvbnNvbGUubG9nKCd0aGlzLnByb3BzLm1lc3NhZ2U6JywgbWVzc2FnZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgZHJvcHpvbmUtLWRpc2FibGVkIHJvdy0tdGFsbCBmbGV4LWNvbnRhaW5lci0tY29sdW1uIGZsZXgtY29udGFpbmVyLS1jZW50ZXItY2VudGVyJz5cbiAgICAgICAgPHAgY2xhc3NOYW1lPSd0ZXh0LS1kaXNhYmxlZCc+UHVibGlzaGluZyBpcyBjdXJyZW50bHkgZGlzYWJsZWQuPC9wPlxuICAgICAgICA8cCBjbGFzc05hbWU9J3RleHQtLWRpc2FibGVkJz57bWVzc2FnZX08L3A+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1Ymxpc2hEaXNhYmxlZE1lc3NhZ2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoRGlzYWJsZWRNZXNzYWdlL3ZpZXcuanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBOYXZCYXIgZnJvbSAnY29udGFpbmVycy9OYXZCYXInO1xuaW1wb3J0IFNFTyBmcm9tICdjb21wb25lbnRzL1NFTyc7XG5cbmNsYXNzIEFib3V0UGFnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlciAoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxTRU8gcGFnZVRpdGxlPXsnQWJvdXQnfSBwYWdlVXJpPXsnYWJvdXQnfSAvPlxuICAgICAgICA8TmF2QmFyIC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS1wYWRkZWQnPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS01IGNvbHVtbi0tbWVkLTEwIGFsaWduLWNvbnRlbnQtdG9wJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS04IGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSdwdWxsLXF1b3RlJz5TcGVlLmNoIGlzIGFuIG9wZW4tc291cmNlIHByb2plY3QuICBQbGVhc2UgY29udHJpYnV0ZSB0byB0aGUgZXhpc3Rpbmcgc2l0ZSwgb3IgZm9yayBpdCBhbmQgbWFrZSB5b3VyIG93bi48L3A+XG4gICAgICAgICAgICAgIDxwPjxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2h0dHBzOi8vdHdpdHRlci5jb20vc3BlZV9jaCc+VFdJVFRFUjwvYT48L3A+XG4gICAgICAgICAgICAgIDxwPjxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9sYnJ5aW8vc3BlZS5jaCc+R0lUSFVCPC9hPjwvcD5cbiAgICAgICAgICAgICAgPHA+PGEgY2xhc3NOYW1lPSdsaW5rLS1wcmltYXJ5JyB0YXJnZXQ9J19ibGFuaycgaHJlZj0naHR0cHM6Ly9kaXNjb3JkLmdnL1lqWWJ3aFMnPkRJU0NPUkQgQ0hBTk5FTDwvYT48L3A+XG4gICAgICAgICAgICAgIDxwPjxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9sYnJ5aW8vc3BlZS5jaC9ibG9iL21hc3Rlci9SRUFETUUubWQnPkRPQ1VNRU5UQVRJT048L2E+PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTUgY29sdW1uLS1tZWQtMTAgYWxpZ24tY29udGVudC10b3AnPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTggY29sdW1uLS1tZWQtMTAnPlxuICAgICAgICAgICAgICA8cD5TcGVlLmNoIGlzIGEgbWVkaWEtaG9zdGluZyBzaXRlIHRoYXQgcmVhZHMgZnJvbSBhbmQgcHVibGlzaGVzIGNvbnRlbnQgdG8gdGhlIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgaHJlZj0naHR0cHM6Ly9sYnJ5LmlvJz5MQlJZPC9hPiBibG9ja2NoYWluLjwvcD5cbiAgICAgICAgICAgICAgPHA+U3BlZS5jaCBpcyBhIGhvc3Rpbmcgc2VydmljZSwgYnV0IHdpdGggdGhlIGFkZGVkIGJlbmVmaXQgdGhhdCBpdCBzdG9yZXMgeW91ciBjb250ZW50IG9uIGEgZGVjZW50cmFsaXplZCBuZXR3b3JrIG9mIGNvbXB1dGVycyAtLSB0aGUgPGEgY2xhc3NOYW1lPSdsaW5rLS1wcmltYXJ5JyBocmVmPSdodHRwczovL2xicnkuaW8vZ2V0Jz5MQlJZPC9hPiBuZXR3b3JrLiAgVGhpcyBtZWFucyB0aGF0IHlvdXIgaW1hZ2VzIGFyZSBzdG9yZWQgaW4gbXVsdGlwbGUgbG9jYXRpb25zIHdpdGhvdXQgYSBzaW5nbGUgcG9pbnQgb2YgZmFpbHVyZS48L3A+XG4gICAgICAgICAgICAgIDxoMz5Db250cmlidXRlPC9oMz5cbiAgICAgICAgICAgICAgPHA+SWYgeW91IGhhdmUgYW4gaWRlYSBmb3IgeW91ciBvd24gc3BlZS5jaC1saWtlIHNpdGUgb24gdG9wIG9mIExCUlksIGZvcmsgb3VyIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL2xicnlpby9zcGVlLmNoJz5naXRodWIgcmVwbzwvYT4gYW5kIGdvIHRvIHRvd24hPC9wPlxuICAgICAgICAgICAgICA8cD5JZiB5b3Ugd2FudCB0byBpbXByb3ZlIHNwZWUuY2gsIGpvaW4gb3VyIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgaHJlZj0naHR0cHM6Ly9kaXNjb3JkLmdnL1lqWWJ3aFMnPmRpc2NvcmQgY2hhbm5lbDwvYT4gb3Igc29sdmUgb25lIG9mIG91ciA8YSBjbGFzc05hbWU9J2xpbmstLXByaW1hcnknIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9sYnJ5aW8vc3BlZS5jaC9pc3N1ZXMnPmdpdGh1YiBpc3N1ZXM8L2E+LjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFib3V0UGFnZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9wYWdlcy9BYm91dFBhZ2UvaW5kZXguanN4IiwiaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBjaGFubmVsIH0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBsb2dnZWRJbkNoYW5uZWxOYW1lOiBjaGFubmVsLmxvZ2dlZEluQ2hhbm5lbC5uYW1lLFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG51bGwpKFZpZXcpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3BhZ2VzL0xvZ2luUGFnZS9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB3aXRoUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgU0VPIGZyb20gJ2NvbXBvbmVudHMvU0VPJztcbmltcG9ydCBOYXZCYXIgZnJvbSAnY29udGFpbmVycy9OYXZCYXInO1xuaW1wb3J0IENoYW5uZWxMb2dpbkZvcm0gZnJvbSAnY29udGFpbmVycy9DaGFubmVsTG9naW5Gb3JtJztcbmltcG9ydCBDaGFubmVsQ3JlYXRlRm9ybSBmcm9tICdjb250YWluZXJzL0NoYW5uZWxDcmVhdGVGb3JtJztcblxuY2xhc3MgTG9naW5QYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAobmV3UHJvcHMpIHtcbiAgICAvLyByZS1yb3V0ZSB0aGUgdXNlciB0byB0aGUgaG9tZXBhZ2UgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkIGluXG4gICAgaWYgKG5ld1Byb3BzLmxvZ2dlZEluQ2hhbm5lbE5hbWUgIT09IHRoaXMucHJvcHMubG9nZ2VkSW5DaGFubmVsTmFtZSkge1xuICAgICAgdGhpcy5wcm9wcy5oaXN0b3J5LnB1c2goYC9gKTtcbiAgICB9XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgPFNFTyBwYWdlVGl0bGU9eydMb2dpbid9IHBhZ2VVcmk9eydsb2dpbid9IC8+XG4gICAgICAgIDxOYXZCYXIgLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCc+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTUgY29sdW1uLS1tZWQtMTAgYWxpZ24tY29udGVudC10b3AnPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTggY29sdW1uLS1tZWQtMTAnPlxuICAgICAgICAgICAgICA8cD5DaGFubmVscyBhbGxvdyB5b3UgdG8gcHVibGlzaCBhbmQgZ3JvdXAgY29udGVudCB1bmRlciBhbiBpZGVudGl0eS4gWW91IGNhbiBjcmVhdGUgYSBjaGFubmVsIGZvciB5b3Vyc2VsZiwgb3Igc2hhcmUgb25lIHdpdGggbGlrZS1taW5kZWQgZnJpZW5kcy4gIFlvdSBjYW4gY3JlYXRlIDEgY2hhbm5lbCwgb3IgMTAwLCBzbyB3aGV0aGVyIHlvdSdyZSA8YSBjbGFzc05hbWU9J2xpbmstLXByaW1hcnknIHRhcmdldD0nX2JsYW5rJyBocmVmPScvQGNhdGFsb25pYTIwMTc6NDNkY2Y0NzE2M2NhYTIxZDg0MDRkOWZlOWIzMGY3OGVmM2UxNDZhOCc+ZG9jdW1lbnRpbmcgaW1wb3J0YW50IGV2ZW50czwvYT4sIG9yIG1ha2luZyBhIHB1YmxpYyByZXBvc2l0b3J5IGZvciA8YSBjbGFzc05hbWU9J2xpbmstLXByaW1hcnknIHRhcmdldD0nX2JsYW5rJyBocmVmPScvQGNhdEdpZnMnPmNhdCBnaWZzPC9hPiAocGFzc3dvcmQ6ICcxMjM0JyksIHRyeSBjcmVhdGluZyBhIGNoYW5uZWwgZm9yIGl0ITwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PjxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS01IGNvbHVtbi0tbWVkLTEwIGFsaWduLWNvbnRlbnQtdG9wJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS04IGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT0naDMtLW5vLWJvdHRvbSc+TG9nIGluIHRvIGFuIGV4aXN0aW5nIGNoYW5uZWw6PC9oMz5cbiAgICAgICAgICAgICAgPENoYW5uZWxMb2dpbkZvcm0gLz5cbiAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT0naDMtLW5vLWJvdHRvbSc+Q3JlYXRlIGEgYnJhbmQgbmV3IGNoYW5uZWw6PC9oMz5cbiAgICAgICAgICAgICAgPENoYW5uZWxDcmVhdGVGb3JtIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUm91dGVyKExvZ2luUGFnZSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvcGFnZXMvTG9naW5QYWdlL3ZpZXcuanN4IiwiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IG9uSGFuZGxlU2hvd1BhZ2VVcmkgfSBmcm9tICdhY3Rpb25zL3Nob3cnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgc2hvdyB9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgZXJyb3IgICAgICA6IHNob3cucmVxdWVzdC5lcnJvcixcbiAgICByZXF1ZXN0VHlwZTogc2hvdy5yZXF1ZXN0LnR5cGUsXG4gIH07XG59O1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSB7XG4gIG9uSGFuZGxlU2hvd1BhZ2VVcmksXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9wYWdlcy9TaG93UGFnZS9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRXJyb3JQYWdlIGZyb20gJ3BhZ2VzL0Vycm9yUGFnZSc7XG5pbXBvcnQgU2hvd0Fzc2V0TGl0ZSBmcm9tICdjb250YWluZXJzL1Nob3dBc3NldExpdGUnO1xuaW1wb3J0IFNob3dBc3NldERldGFpbHMgZnJvbSAnY29udGFpbmVycy9TaG93QXNzZXREZXRhaWxzJztcbmltcG9ydCBTaG93Q2hhbm5lbCBmcm9tICdjb250YWluZXJzL1Nob3dDaGFubmVsJztcblxuaW1wb3J0IHsgQ0hBTk5FTCwgQVNTRVRfTElURSwgQVNTRVRfREVUQUlMUyB9IGZyb20gJ2NvbnN0YW50cy9zaG93X3JlcXVlc3RfdHlwZXMnO1xuXG5jbGFzcyBTaG93UGFnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICB0aGlzLnByb3BzLm9uSGFuZGxlU2hvd1BhZ2VVcmkodGhpcy5wcm9wcy5tYXRjaC5wYXJhbXMpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgKG5leHRQcm9wcykge1xuICAgIGlmIChuZXh0UHJvcHMubWF0Y2gucGFyYW1zICE9PSB0aGlzLnByb3BzLm1hdGNoLnBhcmFtcykge1xuICAgICAgdGhpcy5wcm9wcy5vbkhhbmRsZVNob3dQYWdlVXJpKG5leHRQcm9wcy5tYXRjaC5wYXJhbXMpO1xuICAgIH1cbiAgfVxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHsgZXJyb3IsIHJlcXVlc3RUeXBlIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEVycm9yUGFnZSBlcnJvcj17ZXJyb3J9IC8+XG4gICAgICApO1xuICAgIH1cbiAgICBzd2l0Y2ggKHJlcXVlc3RUeXBlKSB7XG4gICAgICBjYXNlIENIQU5ORUw6XG4gICAgICAgIHJldHVybiA8U2hvd0NoYW5uZWwgLz47XG4gICAgICBjYXNlIEFTU0VUX0xJVEU6XG4gICAgICAgIHJldHVybiA8U2hvd0Fzc2V0TGl0ZSAvPjtcbiAgICAgIGNhc2UgQVNTRVRfREVUQUlMUzpcbiAgICAgICAgcmV0dXJuIDxTaG93QXNzZXREZXRhaWxzIC8+O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIDxwPmxvYWRpbmcuLi48L3A+O1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgU2hvd1BhZ2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvcGFnZXMvU2hvd1BhZ2Uvdmlldy5qc3giLCJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgc2hvdyB9KSA9PiB7XG4gIC8vIHNlbGVjdCByZXF1ZXN0IGluZm9cbiAgY29uc3QgcmVxdWVzdElkID0gc2hvdy5yZXF1ZXN0LmlkO1xuICAvLyBzZWxlY3QgYXNzZXQgaW5mb1xuICBsZXQgYXNzZXQ7XG4gIGNvbnN0IHJlcXVlc3QgPSBzaG93LnJlcXVlc3RMaXN0W3JlcXVlc3RJZF0gfHwgbnVsbDtcbiAgY29uc3QgYXNzZXRMaXN0ID0gc2hvdy5hc3NldExpc3Q7XG4gIGlmIChyZXF1ZXN0ICYmIGFzc2V0TGlzdCkge1xuICAgIGNvbnN0IGFzc2V0S2V5ID0gcmVxdWVzdC5rZXk7ICAvLyBub3RlOiBqdXN0IHN0b3JlIHRoaXMgaW4gdGhlIHJlcXVlc3RcbiAgICBhc3NldCA9IGFzc2V0TGlzdFthc3NldEtleV0gfHwgbnVsbDtcbiAgfTtcbiAgLy8gcmV0dXJuIHByb3BzXG4gIHJldHVybiB7XG4gICAgYXNzZXQsXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbnVsbCkoVmlldyk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9TaG93QXNzZXRMaXRlL2luZGV4LmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTRU8gZnJvbSAnY29tcG9uZW50cy9TRU8nO1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IEFzc2V0RGlzcGxheSBmcm9tICdjb250YWluZXJzL0Fzc2V0RGlzcGxheSc7XG5cbmNsYXNzIFNob3dMaXRlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7IGFzc2V0IH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChhc3NldCkge1xuICAgICAgY29uc3QgeyBuYW1lLCBjbGFpbUlkIH0gPSBhc3NldC5jbGFpbURhdGE7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tdGFsbCBmbGV4LWNvbnRhaW5lci0tY29sdW1uIGZsZXgtY29udGFpbmVyLS1jZW50ZXItY2VudGVyIHNob3ctbGl0ZS1jb250YWluZXInPlxuICAgICAgICAgIDxTRU8gcGFnZVRpdGxlPXtuYW1lfSBhc3NldD17YXNzZXR9IC8+XG4gICAgICAgICAgPEFzc2V0RGlzcGxheSAvPlxuICAgICAgICAgIDxMaW5rIGlkPSdhc3NldC1ib2lsZXJwYXRlJyBjbGFzc05hbWU9J2xpbmstLXByaW1hcnkgZmluZS1wcmludCcgdG89e2AvJHtjbGFpbUlkfS8ke25hbWV9YH0+aG9zdGVkXG4gICAgICAgICAgICB2aWEgU3BlZS5jaDwvTGluaz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXRhbGwgcm93LS1wYWRkZWQgZmxleC1jb250YWluZXItLWNvbHVtbiBmbGV4LWNvbnRhaW5lci0tY2VudGVyLWNlbnRlcic+XG4gICAgICAgIDxwPmxvYWRpbmcgYXNzZXQgZGF0YS4uLjwvcD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNob3dMaXRlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvU2hvd0Fzc2V0TGl0ZS92aWV3LmpzeCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvZ3Jlc3NCYXIgZnJvbSAnY29tcG9uZW50cy9Qcm9ncmVzc0Jhcic7XG5pbXBvcnQgeyBMT0NBTF9DSEVDSywgVU5BVkFJTEFCTEUsIEVSUk9SLCBBVkFJTEFCTEUgfSBmcm9tICdjb25zdGFudHMvYXNzZXRfZGlzcGxheV9zdGF0ZXMnO1xuXG5jbGFzcyBBc3NldERpc3BsYXkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgY29uc3QgeyBhc3NldDogeyBjbGFpbURhdGE6IHsgbmFtZSwgY2xhaW1JZCB9IH0gfSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy5wcm9wcy5vbkZpbGVSZXF1ZXN0KG5hbWUsIGNsYWltSWQpO1xuICB9XG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3QgeyBzdGF0dXMsIGVycm9yLCBhc3NldDogeyBjbGFpbURhdGE6IHsgbmFtZSwgY2xhaW1JZCwgY29udGVudFR5cGUsIGZpbGVFeHQsIHRodW1ibmFpbCB9IH0gfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgaWQ9J2Fzc2V0LWRpc3BsYXktY29tcG9uZW50Jz5cbiAgICAgICAgeyhzdGF0dXMgPT09IExPQ0FMX0NIRUNLKSAmJlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxwPkNoZWNraW5nIHRvIHNlZSBpZiBTcGVlLmNoIGhhcyB5b3VyIGFzc2V0IGxvY2FsbHkuLi48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIHsoc3RhdHVzID09PSBVTkFWQUlMQUJMRSkgJiZcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cD5TaXQgdGlnaHQsIHdlJ3JlIHNlYXJjaGluZyB0aGUgTEJSWSBibG9ja2NoYWluIGZvciB5b3VyIGFzc2V0ITwvcD5cbiAgICAgICAgICA8UHJvZ3Jlc3NCYXIgc2l6ZT17MTJ9IC8+XG4gICAgICAgICAgPHA+Q3VyaW91cyB3aGF0IG1hZ2ljIGlzIGhhcHBlbmluZyBoZXJlPyA8YSBjbGFzc05hbWU9J2xpbmstLXByaW1hcnknIHRhcmdldD0nYmxhbmsnIGhyZWY9J2h0dHBzOi8vbGJyeS5pby9mYXEvd2hhdC1pcy1sYnJ5Jz5MZWFybiBtb3JlLjwvYT48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIHsoc3RhdHVzID09PSBFUlJPUikgJiZcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cD5VbmZvcnR1bmF0ZWx5LCB3ZSBjb3VsZG4ndCBkb3dubG9hZCB5b3VyIGFzc2V0IGZyb20gTEJSWS4gIFlvdSBjYW4gaGVscCB1cyBvdXQgYnkgc2hhcmluZyB0aGUgYmVsb3cgZXJyb3IgbWVzc2FnZSBpbiB0aGUgPGEgY2xhc3NOYW1lPSdsaW5rLS1wcmltYXJ5JyBocmVmPSdodHRwczovL2Rpc2NvcmQuZ2cvWWpZYndoUycgdGFyZ2V0PSdfYmxhbmsnPkxCUlkgZGlzY29yZDwvYT4uPC9wPlxuICAgICAgICAgIDxpPjxwIGlkPSdlcnJvci1tZXNzYWdlJz57ZXJyb3J9PC9wPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgeyhzdGF0dXMgPT09IEFWQUlMQUJMRSkgJiZcbiAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdpbWFnZS9qcGVnJzpcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlL2pwZyc6XG4gICAgICAgICAgICBjYXNlICdpbWFnZS9wbmcnOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT0nYXNzZXQnXG4gICAgICAgICAgICAgICAgICBzcmM9e2AvJHtjbGFpbUlkfS8ke25hbWV9LiR7ZmlsZUV4dH1gfVxuICAgICAgICAgICAgICAgICAgYWx0PXtuYW1lfSAvPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSAnaW1hZ2UvZ2lmJzpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9J2Fzc2V0J1xuICAgICAgICAgICAgICAgICAgc3JjPXtgLyR7Y2xhaW1JZH0vJHtuYW1lfS4ke2ZpbGVFeHR9YH1cbiAgICAgICAgICAgICAgICAgIGFsdD17bmFtZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSAndmlkZW8vbXA0JzpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dmlkZW8gY2xhc3NOYW1lPSdhc3NldCB2aWRlbycgY29udHJvbHMgcG9zdGVyPXt0aHVtYm5haWx9PlxuICAgICAgICAgICAgICAgICAgPHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICBzcmM9e2AvJHtjbGFpbUlkfS8ke25hbWV9LiR7ZmlsZUV4dH1gfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxwPllvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSA8Y29kZT52aWRlbzwvY29kZT4gZWxlbWVudC48L3A+XG4gICAgICAgICAgICAgICAgPC92aWRlbz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHA+VW5zdXBwb3J0ZWQgZmlsZSB0eXBlPC9wPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBc3NldERpc3BsYXk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9Bc3NldERpc3BsYXkvdmlldy5qc3giLCJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgc2hvdyB9KSA9PiB7XG4gIC8vIHNlbGVjdCByZXF1ZXN0IGluZm9cbiAgY29uc3QgcmVxdWVzdElkID0gc2hvdy5yZXF1ZXN0LmlkO1xuICAvLyBzZWxlY3QgYXNzZXQgaW5mb1xuICBsZXQgYXNzZXQ7XG4gIGNvbnN0IHJlcXVlc3QgPSBzaG93LnJlcXVlc3RMaXN0W3JlcXVlc3RJZF0gfHwgbnVsbDtcbiAgY29uc3QgYXNzZXRMaXN0ID0gc2hvdy5hc3NldExpc3Q7XG4gIGlmIChyZXF1ZXN0ICYmIGFzc2V0TGlzdCkge1xuICAgIGNvbnN0IGFzc2V0S2V5ID0gcmVxdWVzdC5rZXk7ICAvLyBub3RlOiBqdXN0IHN0b3JlIHRoaXMgaW4gdGhlIHJlcXVlc3RcbiAgICBhc3NldCA9IGFzc2V0TGlzdFthc3NldEtleV0gfHwgbnVsbDtcbiAgfTtcbiAgLy8gcmV0dXJuIHByb3BzXG4gIHJldHVybiB7XG4gICAgYXNzZXQsXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbnVsbCkoVmlldyk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9TaG93QXNzZXREZXRhaWxzL2luZGV4LmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTRU8gZnJvbSAnY29tcG9uZW50cy9TRU8nO1xuaW1wb3J0IE5hdkJhciBmcm9tICdjb250YWluZXJzL05hdkJhcic7XG5pbXBvcnQgRXJyb3JQYWdlIGZyb20gJ3BhZ2VzL0Vycm9yUGFnZSc7XG5pbXBvcnQgQXNzZXRUaXRsZSBmcm9tICdjb250YWluZXJzL0Fzc2V0VGl0bGUnO1xuaW1wb3J0IEFzc2V0RGlzcGxheSBmcm9tICdjb250YWluZXJzL0Fzc2V0RGlzcGxheSc7XG5pbXBvcnQgQXNzZXRJbmZvIGZyb20gJ2NvbnRhaW5lcnMvQXNzZXRJbmZvJztcblxuY2xhc3MgU2hvd0Fzc2V0RGV0YWlscyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3QgeyBhc3NldCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoYXNzZXQpIHtcbiAgICAgIGNvbnN0IHsgY2xhaW1EYXRhOiB7IG5hbWUgfSB9ID0gYXNzZXQ7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxTRU8gcGFnZVRpdGxlPXtgJHtuYW1lfSAtIGRldGFpbHNgfSBhc3NldD17YXNzZXR9IC8+XG4gICAgICAgICAgPE5hdkJhciAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS10YWxsIHJvdy0tcGFkZGVkJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0xMCc+XG4gICAgICAgICAgICAgIDxBc3NldFRpdGxlIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS01IGNvbHVtbi0tc21sLTEwIGFsaWduLWNvbnRlbnQtdG9wJz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCBzaG93LWRldGFpbHMtY29udGFpbmVyJz5cbiAgICAgICAgICAgICAgICA8QXNzZXREaXNwbGF5IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTUgY29sdW1uLS1zbWwtMTAgYWxpZ24tY29udGVudC10b3AnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tcGFkZGVkJz5cbiAgICAgICAgICAgICAgICA8QXNzZXRJbmZvIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICA8RXJyb3JQYWdlIGVycm9yPXsnbG9hZGluZyBhc3NldCBkYXRhLi4uJ30gLz5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTaG93QXNzZXREZXRhaWxzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvU2hvd0Fzc2V0RGV0YWlscy92aWV3LmpzeCIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuaW1wb3J0IHsgc2VsZWN0QXNzZXQgfSBmcm9tICdzZWxlY3RvcnMvc2hvdyc7XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9ICh7IHNob3cgfSkgPT4ge1xuICBjb25zdCB7IGNsYWltRGF0YTogeyB0aXRsZSB9IH0gPSBzZWxlY3RBc3NldChzaG93KTtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBudWxsKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0Fzc2V0VGl0bGUvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBBc3NldFRpdGxlID0gKHsgdGl0bGUgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9J3RleHQtLWxhcmdlJz57dGl0bGV9PC9zcGFuPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXNzZXRUaXRsZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0Fzc2V0VGl0bGUvdmlldy5qc3giLCJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcbmltcG9ydCB7IHNlbGVjdEFzc2V0IH0gZnJvbSAnc2VsZWN0b3JzL3Nob3cnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBzaG93IH0pID0+IHtcbiAgLy8gc2VsZWN0IGFzc2V0XG4gIGNvbnN0IGFzc2V0ID0gc2VsZWN0QXNzZXQoc2hvdyk7XG4gIC8vICByZXR1cm4gcHJvcHNcbiAgcmV0dXJuIHtcbiAgICBhc3NldCxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBudWxsKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0Fzc2V0SW5mby9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5cbmNsYXNzIEFzc2V0SW5mbyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNvcHlUb0NsaXBib2FyZCA9IHRoaXMuY29weVRvQ2xpcGJvYXJkLmJpbmQodGhpcyk7XG4gIH1cbiAgY29weVRvQ2xpcGJvYXJkIChldmVudCkge1xuICAgIHZhciBlbGVtZW50VG9Db3B5ID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuZWxlbWVudHRvY29weTtcbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRUb0NvcHkpO1xuICAgIGVsZW1lbnQuc2VsZWN0KCk7XG4gICAgdHJ5IHtcbiAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtlcnJvcjogJ09vcHMsIHVuYWJsZSB0byBjb3B5J30pO1xuICAgIH1cbiAgfVxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHsgYXNzZXQ6IHsgc2hvcnRJZCwgY2xhaW1EYXRhIDogeyBjaGFubmVsTmFtZSwgY2VydGlmaWNhdGVJZCwgZGVzY3JpcHRpb24sIG5hbWUsIGNsYWltSWQsIGZpbGVFeHQsIGNvbnRlbnRUeXBlLCB0aHVtYm5haWwsIGhvc3QgfSB9IH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2PlxuICAgICAgICB7Y2hhbm5lbE5hbWUgJiZcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCByb3ctLXdpZGUgcm93LS1uby10b3AnPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0yIGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ndGV4dCc+Q2hhbm5lbDo8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTggY29sdW1uLS1tZWQtMTAnPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSd0ZXh0Jz48TGluayB0bz17YC8ke2NoYW5uZWxOYW1lfToke2NlcnRpZmljYXRlSWR9YH0+e2NoYW5uZWxOYW1lfTwvTGluaz48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAge2Rlc2NyaXB0aW9uICYmXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS1wYWRkZWQgcm93LS13aWRlIHJvdy0tbm8tdG9wJz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9J3RleHQnPntkZXNjcmlwdGlvbn08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiBpZD0nc2hvdy1zaGFyZS1idXR0b25zJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tcGFkZGVkIHJvdy0td2lkZSByb3ctLW5vLXRvcCc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tMiBjb2x1bW4tLW1lZC0xMCc+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ndGV4dCc+U2hhcmU6PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tOCBjb2x1bW4tLW1lZC0xMCc+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9J3JvdyByb3ctLXNob3J0IHJvdy0td2lkZSBmbGV4LWNvbnRhaW5lci0tcm93IGZsZXgtY29udGFpbmVyLS1zcGFjZS1iZXR3ZWVuLWJvdHRvbSBmbGV4LWNvbnRhaW5lci0td3JhcCc+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPSdsaW5rLS1wcmltYXJ5JyB0YXJnZXQ9J19ibGFuaycgaHJlZj17YGh0dHBzOi8vdHdpdHRlci5jb20vaW50ZW50L3R3ZWV0P3RleHQ9JHtob3N0fS8ke3Nob3J0SWR9LyR7bmFtZX1gfT50d2l0dGVyPC9hPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9e2BodHRwczovL3d3dy5mYWNlYm9vay5jb20vc2hhcmVyL3NoYXJlci5waHA/dT0ke2hvc3R9LyR7c2hvcnRJZH0vJHtuYW1lfWB9PmZhY2Vib29rPC9hPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9e2BodHRwOi8vdHVtYmxyLmNvbS93aWRnZXRzL3NoYXJlL3Rvb2w/Y2Fub25pY2FsVXJsPSR7aG9zdH0vJHtzaG9ydElkfS8ke25hbWV9YH0+dHVtYmxyPC9hPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9e2BodHRwczovL3d3dy5yZWRkaXQuY29tL3N1Ym1pdD91cmw9JHtob3N0fS8ke3Nob3J0SWR9LyR7bmFtZX0mdGl0bGU9JHtuYW1lfWB9PnJlZGRpdDwvYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXBhZGRlZCByb3ctLXdpZGUgcm93LS1uby10b3AnPlxuICAgICAgICAgIDxkaXYgaWQ9J3Nob3ctc2hvcnQtbGluayc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tMiBjb2x1bW4tLW1lZC0xMCc+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0ndGV4dCc+TGluazo8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS04IGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXNob3J0IHJvdy0td2lkZSc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTcnPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2lucHV0LWVycm9yJyBpZD0naW5wdXQtZXJyb3ItY29weS1zaG9ydC1saW5rJyBoaWRkZW49J3RydWUnPmVycm9yIGhlcmU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nc2hvcnQtbGluaycgY2xhc3NOYW1lPSdpbnB1dC1kaXNhYmxlZCBpbnB1dC10ZXh0LS1mdWxsLXdpZHRoJyByZWFkT25seVxuICAgICAgICAgICAgICAgICAgICBzcGVsbENoZWNrPSdmYWxzZSdcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Ake2hvc3R9LyR7c2hvcnRJZH0vJHtuYW1lfS4ke2ZpbGVFeHR9YH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5zZWxlY3R9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTEnIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTInPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9J2J1dHRvbi0tcHJpbWFyeSBidXR0b24tLXdpZGUnIGRhdGEtZWxlbWVudHRvY29weT0nc2hvcnQtbGluaydcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5jb3B5VG9DbGlwYm9hcmR9PmNvcHlcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBpZD0nc2hvdy1lbWJlZC1jb2RlJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0yIGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSd0ZXh0Jz5FbWJlZDo8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS04IGNvbHVtbi0tbWVkLTEwJz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXNob3J0IHJvdy0td2lkZSc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTcnPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2lucHV0LWVycm9yJyBpZD0naW5wdXQtZXJyb3ItY29weS1lbWJlZC10ZXh0JyBoaWRkZW49J3RydWUnPmVycm9yIGhlcmU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIHsoY29udGVudFR5cGUgPT09ICd2aWRlby9tcDQnKSA/IChcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9J3RleHQnIGlkPSdlbWJlZC10ZXh0JyBjbGFzc05hbWU9J2lucHV0LWRpc2FibGVkIGlucHV0LXRleHQtLWZ1bGwtd2lkdGgnIHJlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5zZWxlY3R9IHNwZWxsQ2hlY2s9J2ZhbHNlJ1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtgPHZpZGVvIHdpZHRoPVwiMTAwJVwiIGNvbnRyb2xzIHBvc3Rlcj1cIiR7dGh1bWJuYWlsfVwiIHNyYz1cIiR7aG9zdH0vJHtjbGFpbUlkfS8ke25hbWV9LiR7ZmlsZUV4dH1cIi8+PC92aWRlbz5gfSAvPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9J3RleHQnIGlkPSdlbWJlZC10ZXh0JyBjbGFzc05hbWU9J2lucHV0LWRpc2FibGVkIGlucHV0LXRleHQtLWZ1bGwtd2lkdGgnIHJlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5zZWxlY3R9IHNwZWxsQ2hlY2s9J2ZhbHNlJ1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtgPGltZyBzcmM9XCIke2hvc3R9LyR7Y2xhaW1JZH0vJHtuYW1lfS4ke2ZpbGVFeHR9XCIvPmB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0xJyAvPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdjb2x1bW4gY29sdW1uLS0yJz5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSdidXR0b24tLXByaW1hcnkgYnV0dG9uLS13aWRlJyBkYXRhLWVsZW1lbnR0b2NvcHk9J2VtYmVkLXRleHQnXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuY29weVRvQ2xpcGJvYXJkfT5jb3B5XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J2ZsZXgtY29udGFpbmVyLS1yb3cgZmxleC1jb250YWluZXItLXNwYWNlLWJldHdlZW4tYm90dG9tJz5cbiAgICAgICAgICA8TGluayBjbGFzc05hbWU9J2xpbmstLXByaW1hcnknIHRvPXtgLyR7c2hvcnRJZH0vJHtuYW1lfS4ke2ZpbGVFeHR9YH0+PHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT0ndGV4dCc+RGlyZWN0IExpbms8L3NwYW4+PC9MaW5rPlxuICAgICAgICAgIDxhIGNsYXNzTmFtZT0nbGluay0tcHJpbWFyeScgaHJlZj17YCR7aG9zdH0vJHtjbGFpbUlkfS8ke25hbWV9LiR7ZmlsZUV4dH1gfSBkb3dubG9hZD17bmFtZX0+RG93bmxvYWQ8L2E+XG4gICAgICAgICAgPGEgY2xhc3NOYW1lPSdsaW5rLS1wcmltYXJ5JyB0YXJnZXQ9J19ibGFuaycgaHJlZj0naHR0cHM6Ly9sYnJ5LmlvL2RtY2EnPlJlcG9ydDwvYT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFzc2V0SW5mbztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0Fzc2V0SW5mby92aWV3LmpzeCIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnO1xuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBzaG93IH0pID0+IHtcbiAgLy8gc2VsZWN0IHJlcXVlc3QgaW5mb1xuICBjb25zdCByZXF1ZXN0SWQgPSBzaG93LnJlcXVlc3QuaWQ7XG4gIC8vIHNlbGVjdCByZXF1ZXN0XG4gIGNvbnN0IHByZXZpb3VzUmVxdWVzdCA9IHNob3cucmVxdWVzdExpc3RbcmVxdWVzdElkXSB8fCBudWxsO1xuICAvLyBzZWxlY3QgY2hhbm5lbFxuICBsZXQgY2hhbm5lbDtcbiAgaWYgKHByZXZpb3VzUmVxdWVzdCkge1xuICAgIGNvbnN0IGNoYW5uZWxLZXkgPSBwcmV2aW91c1JlcXVlc3Qua2V5O1xuICAgIGNoYW5uZWwgPSBzaG93LmNoYW5uZWxMaXN0W2NoYW5uZWxLZXldIHx8IG51bGw7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjaGFubmVsLFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG51bGwpKFZpZXcpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvU2hvd0NoYW5uZWwvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNFTyBmcm9tICdjb21wb25lbnRzL1NFTyc7XG5pbXBvcnQgRXJyb3JQYWdlIGZyb20gJ3BhZ2VzL0Vycm9yUGFnZSc7XG5pbXBvcnQgTmF2QmFyIGZyb20gJ2NvbnRhaW5lcnMvTmF2QmFyJztcbmltcG9ydCBDaGFubmVsQ2xhaW1zRGlzcGxheSBmcm9tICdjb250YWluZXJzL0NoYW5uZWxDbGFpbXNEaXNwbGF5JztcblxuY2xhc3MgU2hvd0NoYW5uZWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHsgY2hhbm5lbCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgY29uc3QgeyBuYW1lLCBsb25nSWQsIHNob3J0SWQgfSA9IGNoYW5uZWw7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxTRU8gcGFnZVRpdGxlPXtuYW1lfSBjaGFubmVsPXtjaGFubmVsfSAvPlxuICAgICAgICAgIDxOYXZCYXIgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncm93IHJvdy0tdGFsbCByb3ctLXBhZGRlZCc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nY29sdW1uIGNvbHVtbi0tMTAnPlxuICAgICAgICAgICAgICA8aDI+Y2hhbm5lbCBuYW1lOiB7bmFtZX08L2gyPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9eydmaW5lLXByaW50J30+ZnVsbCBjaGFubmVsIGlkOiB7bG9uZ0lkfTwvcD5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXsnZmluZS1wcmludCd9PnNob3J0IGNoYW5uZWwgaWQ6IHtzaG9ydElkfTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2NvbHVtbiBjb2x1bW4tLTEwJz5cbiAgICAgICAgICAgICAgPENoYW5uZWxDbGFpbXNEaXNwbGF5IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxFcnJvclBhZ2UgZXJyb3I9eydsb2FkaW5nIGNoYW5uZWwgZGF0YS4uLid9IC8+XG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgU2hvd0NoYW5uZWw7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29udGFpbmVycy9TaG93Q2hhbm5lbC92aWV3LmpzeCIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBvblVwZGF0ZUNoYW5uZWxDbGFpbXMgfSBmcm9tICdhY3Rpb25zL3Nob3cnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgc2hvdyB9KSA9PiB7XG4gIC8vIHNlbGVjdCBjaGFubmVsIGtleVxuICBjb25zdCByZXF1ZXN0ID0gc2hvdy5yZXF1ZXN0TGlzdFtzaG93LnJlcXVlc3QuaWRdO1xuICBjb25zdCBjaGFubmVsS2V5ID0gcmVxdWVzdC5rZXk7XG4gIC8vIHNlbGVjdCBjaGFubmVsIGNsYWltc1xuICBjb25zdCBjaGFubmVsID0gc2hvdy5jaGFubmVsTGlzdFtjaGFubmVsS2V5XSB8fCBudWxsO1xuICAvLyByZXR1cm4gcHJvcHNcbiAgcmV0dXJuIHtcbiAgICBjaGFubmVsS2V5LFxuICAgIGNoYW5uZWwsXG4gIH07XG59O1xuXG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSB7XG4gIG9uVXBkYXRlQ2hhbm5lbENsYWltcyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMpKFZpZXcpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvQ2hhbm5lbENsYWltc0Rpc3BsYXkvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzc2V0UHJldmlldyBmcm9tICdjb21wb25lbnRzL0Fzc2V0UHJldmlldyc7XG5cbmNsYXNzIENoYW5uZWxDbGFpbXNEaXNwbGF5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc2hvd05leHRSZXN1bHRzUGFnZSA9IHRoaXMuc2hvd05leHRSZXN1bHRzUGFnZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc2hvd1ByZXZpb3VzUmVzdWx0c1BhZ2UgPSB0aGlzLnNob3dQcmV2aW91c1Jlc3VsdHNQYWdlLmJpbmQodGhpcyk7XG4gIH1cbiAgc2hvd1ByZXZpb3VzUmVzdWx0c1BhZ2UgKCkge1xuICAgIGNvbnN0IHsgY2hhbm5lbDogeyBjbGFpbXNEYXRhOiB7IGN1cnJlbnRQYWdlIH0gfSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwcmV2aW91c1BhZ2UgPSBwYXJzZUludChjdXJyZW50UGFnZSkgLSAxO1xuICAgIHRoaXMuc2hvd05ld1BhZ2UocHJldmlvdXNQYWdlKTtcbiAgfVxuICBzaG93TmV4dFJlc3VsdHNQYWdlICgpIHtcbiAgICBjb25zdCB7IGNoYW5uZWw6IHsgY2xhaW1zRGF0YTogeyBjdXJyZW50UGFnZSB9IH0gfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgbmV4dFBhZ2UgPSBwYXJzZUludChjdXJyZW50UGFnZSkgKyAxO1xuICAgIHRoaXMuc2hvd05ld1BhZ2UobmV4dFBhZ2UpO1xuICB9XG4gIHNob3dOZXdQYWdlIChwYWdlKSB7XG4gICAgY29uc3QgeyBjaGFubmVsS2V5LCBjaGFubmVsOiB7IG5hbWUsIGxvbmdJZCB9IH0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMucHJvcHMub25VcGRhdGVDaGFubmVsQ2xhaW1zKGNoYW5uZWxLZXksIG5hbWUsIGxvbmdJZCwgcGFnZSk7XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7IGNoYW5uZWw6IHsgY2xhaW1zRGF0YTogeyBjbGFpbXMsIGN1cnJlbnRQYWdlLCB0b3RhbFBhZ2VzIH0gfSB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9J3JvdyByb3ctLXRhbGwnPlxuICAgICAgICB7KGNsYWltcy5sZW5ndGggPiAwKSA/IChcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAge2NsYWltcy5tYXAoKGNsYWltLCBpbmRleCkgPT4gPEFzc2V0UHJldmlld1xuICAgICAgICAgICAgICBjbGFpbURhdGE9e2NsYWltfVxuICAgICAgICAgICAgICBrZXk9e2Ake2NsYWltLm5hbWV9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgIC8+KX1cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIHsoY3VycmVudFBhZ2UgPiAxKSAmJlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT17J2J1dHRvbi0tc2Vjb25kYXJ5J30gb25DbGljaz17dGhpcy5zaG93UHJldmlvdXNSZXN1bHRzUGFnZX0+UHJldmlvdXMgUGFnZTwvYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHsoY3VycmVudFBhZ2UgPCB0b3RhbFBhZ2VzKSAmJlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT17J2J1dHRvbi0tc2Vjb25kYXJ5J30gb25DbGljaz17dGhpcy5zaG93TmV4dFJlc3VsdHNQYWdlfT5OZXh0IFBhZ2U8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPHA+VGhlcmUgYXJlIG5vIGNsYWltcyBpbiB0aGlzIGNoYW5uZWw8L3A+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsQ2xhaW1zRGlzcGxheTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxDbGFpbXNEaXNwbGF5L3ZpZXcuanN4IiwiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBWaWV3IGZyb20gJy4vdmlldyc7XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9ICh7c2l0ZToge2RlZmF1bHRzOiB7IGRlZmF1bHRUaHVtYm5haWwgfX19KSA9PiB7XG4gIHJldHVybiB7XG4gICAgZGVmYXVsdFRodW1ibmFpbCxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBudWxsKShWaWV3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9jb21wb25lbnRzL0Fzc2V0UHJldmlldy9pbmRleC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5cbmNvbnN0IEFzc2V0UHJldmlldyA9ICh7IGRlZmF1bHRUaHVtYm5haWwsIGNsYWltRGF0YTogeyBuYW1lLCBjbGFpbUlkLCBmaWxlRXh0LCBjb250ZW50VHlwZSwgdGh1bWJuYWlsIH0gfSkgPT4ge1xuICBjb25zdCBkaXJlY3RTb3VyY2VMaW5rID0gYCR7Y2xhaW1JZH0vJHtuYW1lfS4ke2ZpbGVFeHR9YDtcbiAgY29uc3Qgc2hvd1VybExpbmsgPSBgLyR7Y2xhaW1JZH0vJHtuYW1lfWA7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J2Fzc2V0LWhvbGRlcic+XG4gICAgICA8TGluayB0bz17c2hvd1VybExpbmt9ID5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnaW1hZ2UvanBlZyc6XG4gICAgICAgICAgICBjYXNlICdpbWFnZS9qcGcnOlxuICAgICAgICAgICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlL2dpZic6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsnYXNzZXQtcHJldmlldyd9XG4gICAgICAgICAgICAgICAgICBzcmM9e2RpcmVjdFNvdXJjZUxpbmt9XG4gICAgICAgICAgICAgICAgICBhbHQ9e25hbWV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgJ3ZpZGVvL21wNCc6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsnYXNzZXQtcHJldmlldyB2aWRlbyd9XG4gICAgICAgICAgICAgICAgICBzcmM9e3RodW1ibmFpbCB8fCBkZWZhdWx0VGh1bWJuYWlsfVxuICAgICAgICAgICAgICAgICAgYWx0PXtuYW1lfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxwPnVuc3VwcG9ydGVkIGZpbGUgdHlwZTwvcD5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCl9XG4gICAgICA8L0xpbms+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBc3NldFByZXZpZXc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvY29tcG9uZW50cy9Bc3NldFByZXZpZXcvdmlldy5qc3giLCJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JztcblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgc2l0ZTogeyBob3N0LCB0aXRsZSB9IH0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBob3N0LFxuICAgIHRpdGxlLFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG51bGwpKFZpZXcpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvRm91ck9oRm91clBhZ2UvaW5kZXguanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBOYXZCYXIgZnJvbSAnY29udGFpbmVycy9OYXZCYXInO1xuaW1wb3J0IEhlbG1ldCBmcm9tICdyZWFjdC1oZWxtZXQnO1xuXG5jbGFzcyBGb3VyT2hGb3JQYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7dGl0bGUsIGhvc3R9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgPEhlbG1ldD5cbiAgICAgICAgICA8dGl0bGU+e3RpdGxlfSAtIDQwNDwvdGl0bGU+XG4gICAgICAgICAgPGxpbmsgcmVsPSdjYW5vbmljYWwnIGhyZWY9e2Ake2hvc3R9LzQwNGB9IC8+XG4gICAgICAgIDwvSGVsbWV0PlxuICAgICAgICA8TmF2QmFyIC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdyb3cgcm93LS1wYWRkZWQnPlxuICAgICAgICAgIDxoMj40MDQ8L2gyPlxuICAgICAgICAgIDxwPlRoYXQgcGFnZSBkb2VzIG5vdCBleGlzdDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBGb3VyT2hGb3JQYWdlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2NvbnRhaW5lcnMvRm91ck9oRm91clBhZ2Uvdmlldy5qc3giLCJjb25zdCB7IHNlbmRHQVNlcnZlRXZlbnQgfSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvZ29vZ2xlQW5hbHl0aWNzJyk7XG5jb25zdCB7IGRldGVybWluZVJlc3BvbnNlVHlwZSwgZmxpcENsYWltTmFtZUFuZElkRm9yQmFja3dhcmRzQ29tcGF0aWJpbGl0eSwgbG9nUmVxdWVzdERhdGEsIGdldENsYWltSWRBbmRTZXJ2ZUFzc2V0IH0gPSByZXF1aXJlKCcuLi9oZWxwZXJzL3NlcnZlSGVscGVycy5qcycpO1xuY29uc3QgbGJyeVVyaSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbGJyeVVyaS5qcycpO1xuY29uc3QgaGFuZGxlU2hvd1JlbmRlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaGFuZGxlU2hvd1JlbmRlci5qc3gnKTtcbmNvbnN0IFNFUlZFID0gJ1NFUlZFJztcblxubW9kdWxlLmV4cG9ydHMgPSAoYXBwKSA9PiB7XG4gIC8vIHJvdXRlIHRvIHNlcnZlIGEgc3BlY2lmaWMgYXNzZXQgdXNpbmcgdGhlIGNoYW5uZWwgb3IgY2xhaW0gaWRcbiAgYXBwLmdldCgnLzppZGVudGlmaWVyLzpjbGFpbScsIChyZXEsIHJlcykgPT4ge1xuICAgIGNvbnN0IHsgaGVhZGVycywgaXAsIG9yaWdpbmFsVXJsLCBwYXJhbXMgfSA9IHJlcTtcbiAgICAvLyBkZWNpZGUgaWYgdGhpcyBpcyBhIHNob3cgcmVxdWVzdFxuICAgIGxldCBoYXNGaWxlRXh0ZW5zaW9uO1xuICAgIHRyeSB7XG4gICAgICAoeyBoYXNGaWxlRXh0ZW5zaW9uIH0gPSBsYnJ5VXJpLnBhcnNlTW9kaWZpZXIocGFyYW1zLmNsYWltKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbih7c3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2V9KTtcbiAgICB9XG4gICAgbGV0IHJlc3BvbnNlVHlwZSA9IGRldGVybWluZVJlc3BvbnNlVHlwZShoYXNGaWxlRXh0ZW5zaW9uLCBoZWFkZXJzKTtcbiAgICBpZiAocmVzcG9uc2VUeXBlICE9PSBTRVJWRSkge1xuICAgICAgcmV0dXJuIGhhbmRsZVNob3dSZW5kZXIocmVxLCByZXMpO1xuICAgIH1cbiAgICAvLyBoYW5kbGUgc2VydmUgcmVxdWVzdFxuICAgIC8vIHNlbmQgZ29vZ2xlIGFuYWx5dGljc1xuICAgIHNlbmRHQVNlcnZlRXZlbnQoaGVhZGVycywgaXAsIG9yaWdpbmFsVXJsKTtcbiAgICAvLyBwYXJzZSB0aGUgY2xhaW1cbiAgICBsZXQgY2xhaW1OYW1lO1xuICAgIHRyeSB7XG4gICAgICAoeyBjbGFpbU5hbWUgfSA9IGxicnlVcmkucGFyc2VDbGFpbShwYXJhbXMuY2xhaW0pKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAwKS5qc29uKHtzdWNjZXNzOiBmYWxzZSwgbWVzc2FnZTogZXJyb3IubWVzc2FnZX0pO1xuICAgIH1cbiAgICAvLyBwYXJzZSB0aGUgaWRlbnRpZmllclxuICAgIGxldCBpc0NoYW5uZWwsIGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCwgY2xhaW1JZDtcbiAgICB0cnkge1xuICAgICAgKHsgaXNDaGFubmVsLCBjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIGNsYWltSWQgfSA9IGxicnlVcmkucGFyc2VJZGVudGlmaWVyKHBhcmFtcy5pZGVudGlmaWVyKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbih7c3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2V9KTtcbiAgICB9XG4gICAgaWYgKCFpc0NoYW5uZWwpIHtcbiAgICAgIFtjbGFpbUlkLCBjbGFpbU5hbWVdID0gZmxpcENsYWltTmFtZUFuZElkRm9yQmFja3dhcmRzQ29tcGF0aWJpbGl0eShjbGFpbUlkLCBjbGFpbU5hbWUpO1xuICAgIH1cbiAgICAvLyBsb2cgdGhlIHJlcXVlc3QgZGF0YSBmb3IgZGVidWdnaW5nXG4gICAgbG9nUmVxdWVzdERhdGEocmVzcG9uc2VUeXBlLCBjbGFpbU5hbWUsIGNoYW5uZWxOYW1lLCBjbGFpbUlkKTtcbiAgICAvLyBnZXQgdGhlIGNsYWltIElkIGFuZCB0aGVuIHNlcnZlIHRoZSBhc3NldFxuICAgIGdldENsYWltSWRBbmRTZXJ2ZUFzc2V0KGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCwgY2xhaW1OYW1lLCBjbGFpbUlkLCBvcmlnaW5hbFVybCwgaXAsIHJlcyk7XG4gIH0pO1xuICAvLyByb3V0ZSB0byBzZXJ2ZSB0aGUgd2lubmluZyBhc3NldCBhdCBhIGNsYWltIG9yIGEgY2hhbm5lbCBwYWdlXG4gIGFwcC5nZXQoJy86Y2xhaW0nLCAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCB7IGhlYWRlcnMsIGlwLCBvcmlnaW5hbFVybCwgcGFyYW1zIH0gPSByZXE7XG4gICAgLy8gZGVjaWRlIGlmIHRoaXMgaXMgYSBzaG93IHJlcXVlc3RcbiAgICBsZXQgaGFzRmlsZUV4dGVuc2lvbjtcbiAgICB0cnkge1xuICAgICAgKHsgaGFzRmlsZUV4dGVuc2lvbiB9ID0gbGJyeVVyaS5wYXJzZU1vZGlmaWVyKHBhcmFtcy5jbGFpbSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oe3N1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgfVxuICAgIGxldCByZXNwb25zZVR5cGUgPSBkZXRlcm1pbmVSZXNwb25zZVR5cGUoaGFzRmlsZUV4dGVuc2lvbiwgaGVhZGVycyk7XG4gICAgaWYgKHJlc3BvbnNlVHlwZSAhPT0gU0VSVkUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVTaG93UmVuZGVyKHJlcSwgcmVzKTtcbiAgICB9XG4gICAgLy8gaGFuZGxlIHNlcnZlIHJlcXVlc3RcbiAgICAvLyBzZW5kIGdvb2dsZSBhbmFseXRpY3NcbiAgICBzZW5kR0FTZXJ2ZUV2ZW50KGhlYWRlcnMsIGlwLCBvcmlnaW5hbFVybCk7XG4gICAgLy8gcGFyc2UgdGhlIGNsYWltXG4gICAgbGV0IGNsYWltTmFtZTtcbiAgICB0cnkge1xuICAgICAgKHtjbGFpbU5hbWV9ID0gbGJyeVVyaS5wYXJzZUNsYWltKHBhcmFtcy5jbGFpbSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oe3N1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgfVxuICAgIC8vIGxvZyB0aGUgcmVxdWVzdCBkYXRhIGZvciBkZWJ1Z2dpbmdcbiAgICBsb2dSZXF1ZXN0RGF0YShyZXNwb25zZVR5cGUsIGNsYWltTmFtZSwgbnVsbCwgbnVsbCk7XG4gICAgLy8gZ2V0IHRoZSBjbGFpbSBJZCBhbmQgdGhlbiBzZXJ2ZSB0aGUgYXNzZXRcbiAgICBnZXRDbGFpbUlkQW5kU2VydmVBc3NldChudWxsLCBudWxsLCBjbGFpbU5hbWUsIG51bGwsIG9yaWdpbmFsVXJsLCBpcCwgcmVzKTtcbiAgfSk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL3JvdXRlcy9hc3NldC1yb3V0ZXMuanMiLCJjb25zdCBsb2dnZXIgPSByZXF1aXJlKCd3aW5zdG9uJyk7XG5jb25zdCB7IGdldENsYWltSWQsIGdldExvY2FsRmlsZVJlY29yZCB9ID0gcmVxdWlyZSgnLi4vY29udHJvbGxlcnMvc2VydmVDb250cm9sbGVyLmpzJyk7XG5jb25zdCB7IGhhbmRsZUVycm9yUmVzcG9uc2UgfSA9IHJlcXVpcmUoJy4vZXJyb3JIYW5kbGVycy5qcycpO1xuXG5jb25zdCBTRVJWRSA9ICdTRVJWRSc7XG5jb25zdCBTSE9XID0gJ1NIT1cnO1xuY29uc3QgTk9fRklMRSA9ICdOT19GSUxFJztcbmNvbnN0IE5PX0NIQU5ORUwgPSAnTk9fQ0hBTk5FTCc7XG5jb25zdCBOT19DTEFJTSA9ICdOT19DTEFJTSc7XG5cbmZ1bmN0aW9uIGNsaWVudEFjY2VwdHNIdG1sICh7YWNjZXB0fSkge1xuICByZXR1cm4gYWNjZXB0ICYmIGFjY2VwdC5tYXRjaCgvdGV4dFxcL2h0bWwvKTtcbn07XG5cbmZ1bmN0aW9uIHJlcXVlc3RJc0Zyb21Ccm93c2VyIChoZWFkZXJzKSB7XG4gIHJldHVybiBoZWFkZXJzWyd1c2VyLWFnZW50J10gJiYgaGVhZGVyc1sndXNlci1hZ2VudCddLm1hdGNoKC9Nb3ppbGxhLyk7XG59O1xuXG5mdW5jdGlvbiBjbGllbnRXYW50c0Fzc2V0ICh7YWNjZXB0LCByYW5nZX0pIHtcbiAgY29uc3QgaW1hZ2VJc1dhbnRlZCA9IGFjY2VwdCAmJiBhY2NlcHQubWF0Y2goL2ltYWdlXFwvLiovKSAmJiAhYWNjZXB0Lm1hdGNoKC90ZXh0XFwvaHRtbC8pICYmICFhY2NlcHQubWF0Y2goL3RleHRcXC9cXCovKTtcbiAgY29uc3QgdmlkZW9Jc1dhbnRlZCA9IGFjY2VwdCAmJiByYW5nZTtcbiAgcmV0dXJuIGltYWdlSXNXYW50ZWQgfHwgdmlkZW9Jc1dhbnRlZDtcbn07XG5cbmZ1bmN0aW9uIGlzVmFsaWRDbGFpbUlkIChjbGFpbUlkKSB7XG4gIHJldHVybiAoKGNsYWltSWQubGVuZ3RoID09PSA0MCkgJiYgIS9bXkEtWmEtejAtOV0vZy50ZXN0KGNsYWltSWQpKTtcbn07XG5cbmZ1bmN0aW9uIGlzVmFsaWRTaG9ydElkIChjbGFpbUlkKSB7XG4gIHJldHVybiBjbGFpbUlkLmxlbmd0aCA9PT0gMTsgIC8vIGl0IHNob3VsZCByZWFsbHkgZXZhbHVhdGUgdGhlIHNob3J0IHVybCBpdHNlbGZcbn07XG5cbmZ1bmN0aW9uIGlzVmFsaWRTaG9ydElkT3JDbGFpbUlkIChpbnB1dCkge1xuICByZXR1cm4gKGlzVmFsaWRDbGFpbUlkKGlucHV0KSB8fCBpc1ZhbGlkU2hvcnRJZChpbnB1dCkpO1xufTtcblxuZnVuY3Rpb24gc2VydmVBc3NldFRvQ2xpZW50IChjbGFpbUlkLCBuYW1lLCByZXMpIHtcbiAgcmV0dXJuIGdldExvY2FsRmlsZVJlY29yZChjbGFpbUlkLCBuYW1lKVxuICAgIC50aGVuKGZpbGVSZWNvcmQgPT4ge1xuICAgICAgLy8gY2hlY2sgdGhhdCBhIGxvY2FsIHJlY29yZCB3YXMgZm91bmRcbiAgICAgIGlmIChmaWxlUmVjb3JkID09PSBOT19GSUxFKSB7XG4gICAgICAgIHJldHVybiByZXMuc3RhdHVzKDMwNykucmVkaXJlY3QoYC9hcGkvY2xhaW0vZ2V0LyR7bmFtZX0vJHtjbGFpbUlkfWApO1xuICAgICAgfVxuICAgICAgLy8gc2VydmUgdGhlIGZpbGVcbiAgICAgIGNvbnN0IHtmaWxlUGF0aCwgZmlsZVR5cGV9ID0gZmlsZVJlY29yZDtcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBzZXJ2aW5nIGZpbGU6ICR7ZmlsZVBhdGh9YCk7XG4gICAgICBjb25zdCBzZW5kRmlsZU9wdGlvbnMgPSB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnWC1Db250ZW50LVR5cGUtT3B0aW9ucyc6ICdub3NuaWZmJyxcbiAgICAgICAgICAnQ29udGVudC1UeXBlJyAgICAgICAgICA6IGZpbGVUeXBlIHx8ICdpbWFnZS9qcGVnJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICByZXMuc3RhdHVzKDIwMCkuc2VuZEZpbGUoZmlsZVBhdGgsIHNlbmRGaWxlT3B0aW9ucyk7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q2xhaW1JZEFuZFNlcnZlQXNzZXQgKGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCwgY2xhaW1OYW1lLCBjbGFpbUlkLCBvcmlnaW5hbFVybCwgaXAsIHJlcykge1xuICAgIC8vIGdldCB0aGUgY2xhaW0gSWQgYW5kIHRoZW4gc2VydmUgdGhlIGFzc2V0XG4gICAgZ2V0Q2xhaW1JZChjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIGNsYWltTmFtZSwgY2xhaW1JZClcbiAgICAgIC50aGVuKGZ1bGxDbGFpbUlkID0+IHtcbiAgICAgICAgaWYgKGZ1bGxDbGFpbUlkID09PSBOT19DTEFJTSkge1xuICAgICAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwNCkuanNvbih7c3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6ICdubyBjbGFpbSBpZCBjb3VsZCBiZSBmb3VuZCd9KTtcbiAgICAgICAgfSBlbHNlIGlmIChmdWxsQ2xhaW1JZCA9PT0gTk9fQ0hBTk5FTCkge1xuICAgICAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwNCkuanNvbih7c3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6ICdubyBjaGFubmVsIGlkIGNvdWxkIGJlIGZvdW5kJ30pO1xuICAgICAgICB9XG4gICAgICAgIHNlcnZlQXNzZXRUb0NsaWVudChmdWxsQ2xhaW1JZCwgY2xhaW1OYW1lLCByZXMpO1xuICAgICAgICAvLyBwb3N0VG9TdGF0cyhyZXNwb25zZVR5cGUsIG9yaWdpbmFsVXJsLCBpcCwgY2xhaW1OYW1lLCBmdWxsQ2xhaW1JZCwgJ3N1Y2Nlc3MnKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBoYW5kbGVFcnJvclJlc3BvbnNlKG9yaWdpbmFsVXJsLCBpcCwgZXJyb3IsIHJlcyk7XG4gICAgICAgIC8vIHBvc3RUb1N0YXRzKHJlc3BvbnNlVHlwZSwgb3JpZ2luYWxVcmwsIGlwLCBjbGFpbU5hbWUsIGZ1bGxDbGFpbUlkLCAnZmFpbCcpO1xuICAgICAgfSk7XG4gIH0sXG4gIGRldGVybWluZVJlc3BvbnNlVHlwZSAoaGFzRmlsZUV4dGVuc2lvbiwgaGVhZGVycykge1xuICAgIGxldCByZXNwb25zZVR5cGU7XG4gICAgaWYgKGhhc0ZpbGVFeHRlbnNpb24pIHtcbiAgICAgIHJlc3BvbnNlVHlwZSA9IFNFUlZFOyAgLy8gYXNzdW1lIGEgc2VydmUgcmVxdWVzdCBpZiBmaWxlIGV4dGVuc2lvbiBpcyBwcmVzZW50XG4gICAgICBpZiAoY2xpZW50QWNjZXB0c0h0bWwoaGVhZGVycykpIHsgIC8vIGlmIHRoZSByZXF1ZXN0IGNvbWVzIGZyb20gYSBicm93c2VyLCBjaGFuZ2UgaXQgdG8gYSBzaG93IHJlcXVlc3RcbiAgICAgICAgcmVzcG9uc2VUeXBlID0gU0hPVztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzcG9uc2VUeXBlID0gU0hPVztcbiAgICAgIGlmIChjbGllbnRXYW50c0Fzc2V0KGhlYWRlcnMpICYmIHJlcXVlc3RJc0Zyb21Ccm93c2VyKGhlYWRlcnMpKSB7ICAvLyB0aGlzIGlzIGluIGNhc2Ugc29tZW9uZSBlbWJlZHMgYSBzaG93IHVybFxuICAgICAgICBsb2dnZXIuZGVidWcoJ1Nob3cgcmVxdWVzdCBjYW1lIGZyb20gYnJvd3NlciBidXQgd2FudHMgYW4gaW1hZ2UvdmlkZW8uIENoYW5naW5nIHJlc3BvbnNlIHRvIHNlcnZlLi4uJyk7XG4gICAgICAgIHJlc3BvbnNlVHlwZSA9IFNFUlZFO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2VUeXBlO1xuICB9LFxuICBmbGlwQ2xhaW1OYW1lQW5kSWRGb3JCYWNrd2FyZHNDb21wYXRpYmlsaXR5IChpZGVudGlmaWVyLCBuYW1lKSB7XG4gICAgLy8gdGhpcyBpcyBhIHBhdGNoIGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSB3aXRoICcvbmFtZS9jbGFpbV9pZCcgdXJsIGZvcm1hdFxuICAgIGlmIChpc1ZhbGlkU2hvcnRJZE9yQ2xhaW1JZChuYW1lKSAmJiAhaXNWYWxpZFNob3J0SWRPckNsYWltSWQoaWRlbnRpZmllcikpIHtcbiAgICAgIGNvbnN0IHRlbXBOYW1lID0gbmFtZTtcbiAgICAgIG5hbWUgPSBpZGVudGlmaWVyO1xuICAgICAgaWRlbnRpZmllciA9IHRlbXBOYW1lO1xuICAgIH1cbiAgICByZXR1cm4gW2lkZW50aWZpZXIsIG5hbWVdO1xuICB9LFxuICBsb2dSZXF1ZXN0RGF0YSAocmVzcG9uc2VUeXBlLCBjbGFpbU5hbWUsIGNoYW5uZWxOYW1lLCBjbGFpbUlkKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdyZXNwb25zZVR5cGUgPT09JywgcmVzcG9uc2VUeXBlKTtcbiAgICBsb2dnZXIuZGVidWcoJ2NsYWltIG5hbWUgPT09ICcsIGNsYWltTmFtZSk7XG4gICAgbG9nZ2VyLmRlYnVnKCdjaGFubmVsIG5hbWUgPT09JywgY2hhbm5lbE5hbWUpO1xuICAgIGxvZ2dlci5kZWJ1ZygnY2xhaW0gaWQgPT09JywgY2xhaW1JZCk7XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvc2VydmVIZWxwZXJzLmpzIiwiY29uc3QgbG9nZ2VyID0gcmVxdWlyZSgnd2luc3RvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgUkVHRVhQX0lOVkFMSURfQ0xBSU0gIDogL1teQS1aYS16MC05LV0vZyxcbiAgUkVHRVhQX0lOVkFMSURfQ0hBTk5FTDogL1teQS1aYS16MC05LUBdL2csXG4gIFJFR0VYUF9BRERSRVNTICAgICAgICA6IC9eYig/PVteME9JbF17MzIsMzN9KVswLTlBLVphLXpdezMyLDMzfSQvLFxuICBDSEFOTkVMX0NIQVIgICAgICAgICAgOiAnQCcsXG4gIHBhcnNlSWRlbnRpZmllciAgICAgICA6IGZ1bmN0aW9uIChpZGVudGlmaWVyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdwYXJzaW5nIGlkZW50aWZpZXI6JywgaWRlbnRpZmllcik7XG4gICAgY29uc3QgY29tcG9uZW50c1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICcoW146JCMvXSopJyArIC8vIHZhbHVlIChzdG9wcyBhdCB0aGUgZmlyc3Qgc2VwYXJhdG9yIG9yIGVuZClcbiAgICAgICcoWzokI10/KShbXi9dKiknIC8vIG1vZGlmaWVyIHNlcGFyYXRvciwgbW9kaWZpZXIgKHN0b3BzIGF0IHRoZSBmaXJzdCBwYXRoIHNlcGFyYXRvciBvciBlbmQpXG4gICAgKTtcbiAgICBjb25zdCBbcHJvdG8sIHZhbHVlLCBtb2RpZmllclNlcGVyYXRvciwgbW9kaWZpZXJdID0gY29tcG9uZW50c1JlZ2V4XG4gICAgICAuZXhlYyhpZGVudGlmaWVyKVxuICAgICAgLm1hcChtYXRjaCA9PiBtYXRjaCB8fCBudWxsKTtcbiAgICBsb2dnZXIuZGVidWcoYCR7cHJvdG99LCAke3ZhbHVlfSwgJHttb2RpZmllclNlcGVyYXRvcn0sICR7bW9kaWZpZXJ9YCk7XG5cbiAgICAvLyBWYWxpZGF0ZSBhbmQgcHJvY2VzcyBuYW1lXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaGVjayB5b3VyIHVybC4gIE5vIGNoYW5uZWwgbmFtZSBwcm92aWRlZCBiZWZvcmUgXCIke21vZGlmaWVyU2VwZXJhdG9yfVwiYCk7XG4gICAgfVxuICAgIGNvbnN0IGlzQ2hhbm5lbCA9IHZhbHVlLnN0YXJ0c1dpdGgobW9kdWxlLmV4cG9ydHMuQ0hBTk5FTF9DSEFSKTtcbiAgICBjb25zdCBjaGFubmVsTmFtZSA9IGlzQ2hhbm5lbCA/IHZhbHVlIDogbnVsbDtcbiAgICBsZXQgY2xhaW1JZDtcbiAgICBpZiAoaXNDaGFubmVsKSB7XG4gICAgICBpZiAoIWNoYW5uZWxOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY2hhbm5lbCBuYW1lIGFmdGVyIEAuJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lQmFkQ2hhcnMgPSAoY2hhbm5lbE5hbWUpLm1hdGNoKG1vZHVsZS5leHBvcnRzLlJFR0VYUF9JTlZBTElEX0NIQU5ORUwpO1xuICAgICAgaWYgKG5hbWVCYWRDaGFycykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2hhcmFjdGVycyBpbiBjaGFubmVsIG5hbWU6ICR7bmFtZUJhZENoYXJzLmpvaW4oJywgJyl9LmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjbGFpbUlkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgYW5kIHByb2Nlc3MgbW9kaWZpZXJcbiAgICBsZXQgY2hhbm5lbENsYWltSWQ7XG4gICAgaWYgKG1vZGlmaWVyU2VwZXJhdG9yKSB7XG4gICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gbW9kaWZpZXIgcHJvdmlkZWQgYWZ0ZXIgc2VwYXJhdG9yIFwiJHttb2RpZmllclNlcGVyYXRvcn1cImApO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kaWZpZXJTZXBlcmF0b3IgPT09ICc6Jykge1xuICAgICAgICBjaGFubmVsQ2xhaW1JZCA9IG1vZGlmaWVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgXCIke21vZGlmaWVyU2VwZXJhdG9yfVwiIG1vZGlmaWVyIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkYCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc0NoYW5uZWwsXG4gICAgICBjaGFubmVsTmFtZSxcbiAgICAgIGNoYW5uZWxDbGFpbUlkLFxuICAgICAgY2xhaW1JZCxcbiAgICB9O1xuICB9LFxuICBwYXJzZUNsYWltOiBmdW5jdGlvbiAoY2xhaW0pIHtcbiAgICBsb2dnZXIuZGVidWcoJ3BhcnNpbmcgbmFtZTonLCBjbGFpbSk7XG4gICAgY29uc3QgY29tcG9uZW50c1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICcoW146JCMvLl0qKScgKyAvLyBuYW1lIChzdG9wcyBhdCB0aGUgZmlyc3QgbW9kaWZpZXIpXG4gICAgICAnKFs6JCMuXT8pKFteL10qKScgLy8gbW9kaWZpZXIgc2VwYXJhdG9yLCBtb2RpZmllciAoc3RvcHMgYXQgdGhlIGZpcnN0IHBhdGggc2VwYXJhdG9yIG9yIGVuZClcbiAgICApO1xuICAgIGNvbnN0IFtwcm90bywgY2xhaW1OYW1lLCBtb2RpZmllclNlcGVyYXRvciwgbW9kaWZpZXJdID0gY29tcG9uZW50c1JlZ2V4XG4gICAgICAuZXhlYyhjbGFpbSlcbiAgICAgIC5tYXAobWF0Y2ggPT4gbWF0Y2ggfHwgbnVsbCk7XG4gICAgbG9nZ2VyLmRlYnVnKGAke3Byb3RvfSwgJHtjbGFpbU5hbWV9LCAke21vZGlmaWVyU2VwZXJhdG9yfSwgJHttb2RpZmllcn1gKTtcblxuICAgIC8vIFZhbGlkYXRlIGFuZCBwcm9jZXNzIG5hbWVcbiAgICBpZiAoIWNsYWltTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjbGFpbSBuYW1lIHByb3ZpZGVkIGJlZm9yZSAuJyk7XG4gICAgfVxuICAgIGNvbnN0IG5hbWVCYWRDaGFycyA9IChjbGFpbU5hbWUpLm1hdGNoKG1vZHVsZS5leHBvcnRzLlJFR0VYUF9JTlZBTElEX0NMQUlNKTtcbiAgICBpZiAobmFtZUJhZENoYXJzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2hhcmFjdGVycyBpbiBjbGFpbSBuYW1lOiAke25hbWVCYWRDaGFycy5qb2luKCcsICcpfS5gKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgYW5kIHByb2Nlc3MgbW9kaWZpZXJcbiAgICBpZiAobW9kaWZpZXJTZXBlcmF0b3IpIHtcbiAgICAgIGlmICghbW9kaWZpZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBmaWxlIGV4dGVuc2lvbiBwcm92aWRlZCBhZnRlciBzZXBhcmF0b3IgJHttb2RpZmllclNlcGVyYXRvcn0uYCk7XG4gICAgICB9XG4gICAgICBpZiAobW9kaWZpZXJTZXBlcmF0b3IgIT09ICcuJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAke21vZGlmaWVyU2VwZXJhdG9yfSBtb2RpZmllciBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBjbGFpbSBuYW1lYCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybiByZXN1bHRzXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsYWltTmFtZSxcbiAgICB9O1xuICB9LFxuICBwYXJzZU1vZGlmaWVyOiBmdW5jdGlvbiAoY2xhaW0pIHtcbiAgICBsb2dnZXIuZGVidWcoJ3BhcnNpbmcgbW9kaWZpZXI6JywgY2xhaW0pO1xuICAgIGNvbnN0IGNvbXBvbmVudHNSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAnKFteOiQjLy5dKiknICsgLy8gbmFtZSAoc3RvcHMgYXQgdGhlIGZpcnN0IG1vZGlmaWVyKVxuICAgICAgJyhbOiQjLl0/KShbXi9dKiknIC8vIG1vZGlmaWVyIHNlcGFyYXRvciwgbW9kaWZpZXIgKHN0b3BzIGF0IHRoZSBmaXJzdCBwYXRoIHNlcGFyYXRvciBvciBlbmQpXG4gICAgKTtcbiAgICBjb25zdCBbcHJvdG8sIGNsYWltTmFtZSwgbW9kaWZpZXJTZXBlcmF0b3IsIG1vZGlmaWVyXSA9IGNvbXBvbmVudHNSZWdleFxuICAgICAgLmV4ZWMoY2xhaW0pXG4gICAgICAubWFwKG1hdGNoID0+IG1hdGNoIHx8IG51bGwpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgJHtwcm90b30sICR7Y2xhaW1OYW1lfSwgJHttb2RpZmllclNlcGVyYXRvcn0sICR7bW9kaWZpZXJ9YCk7XG4gICAgLy8gVmFsaWRhdGUgYW5kIHByb2Nlc3MgbW9kaWZpZXJcbiAgICBsZXQgaGFzRmlsZUV4dGVuc2lvbiA9IGZhbHNlO1xuICAgIGlmIChtb2RpZmllclNlcGVyYXRvcikge1xuICAgICAgaGFzRmlsZUV4dGVuc2lvbiA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBoYXNGaWxlRXh0ZW5zaW9uLFxuICAgIH07XG4gIH0sXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL2hlbHBlcnMvbGJyeVVyaS5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXJUb1N0cmluZyB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuaW1wb3J0IHsgY3JlYXRlU3RvcmUsIGFwcGx5TWlkZGxld2FyZSB9IGZyb20gJ3JlZHV4JztcbmltcG9ydCBSZWR1Y2VyIGZyb20gJy4uLy4uL2NsaWVudC9yZWR1Y2Vycy9pbmRleCc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IFN0YXRpY1JvdXRlciB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IEdBTGlzdGVuZXIgZnJvbSAnLi4vLi4vY2xpZW50L2NvbXBvbmVudHMvR0FMaXN0ZW5lci9pbmRleCc7XG5pbXBvcnQgQXBwIGZyb20gJy4uLy4uL2NsaWVudC9hcHAnO1xuaW1wb3J0IHJlbmRlckZ1bGxQYWdlIGZyb20gJy4vcmVuZGVyRnVsbFBhZ2UnO1xuaW1wb3J0IGNyZWF0ZVNhZ2FNaWRkbGV3YXJlIGZyb20gJ3JlZHV4LXNhZ2EnO1xuaW1wb3J0IHsgY2FsbCB9IGZyb20gJ3JlZHV4LXNhZ2EvZWZmZWN0cyc7XG5pbXBvcnQgeyBoYW5kbGVTaG93UGFnZVVyaSB9IGZyb20gJy4uLy4uL2NsaWVudC9zYWdhcy9zaG93X3VyaSc7XG5pbXBvcnQgeyBvbkhhbmRsZVNob3dQYWdlVXJpIH0gZnJvbSAnLi4vLi4vY2xpZW50L2FjdGlvbnMvc2hvdyc7XG5cbmltcG9ydCBIZWxtZXQgZnJvbSAncmVhY3QtaGVsbWV0JztcblxuY29uc3QgcmV0dXJuU2FnYVdpdGhQYXJhbXMgPSAoc2FnYSwgcGFyYW1zKSA9PiB7XG4gIHJldHVybiBmdW5jdGlvbiAqICgpIHtcbiAgICB5aWVsZCBjYWxsKHNhZ2EsIHBhcmFtcyk7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IChyZXEsIHJlcykgPT4ge1xuICBsZXQgY29udGV4dCA9IHt9O1xuXG4gIC8vIGNyZWF0ZSBhbmQgYXBwbHkgbWlkZGxld2FyZVxuICBjb25zdCBzYWdhTWlkZGxld2FyZSA9IGNyZWF0ZVNhZ2FNaWRkbGV3YXJlKCk7XG4gIGNvbnN0IG1pZGRsZXdhcmUgPSBhcHBseU1pZGRsZXdhcmUoc2FnYU1pZGRsZXdhcmUpO1xuXG4gIC8vIGNyZWF0ZSBhIG5ldyBSZWR1eCBzdG9yZSBpbnN0YW5jZVxuICBjb25zdCBzdG9yZSA9IGNyZWF0ZVN0b3JlKFJlZHVjZXIsIG1pZGRsZXdhcmUpO1xuXG4gIC8vIGNyZWF0ZSBzYWdhXG4gIGNvbnN0IGFjdGlvbiA9IG9uSGFuZGxlU2hvd1BhZ2VVcmkocmVxLnBhcmFtcyk7XG4gIGNvbnN0IHNhZ2EgPSByZXR1cm5TYWdhV2l0aFBhcmFtcyhoYW5kbGVTaG93UGFnZVVyaSwgYWN0aW9uKTtcblxuICAvLyBydW4gdGhlIHNhZ2EgbWlkZGxld2FyZVxuICBzYWdhTWlkZGxld2FyZVxuICAgIC5ydW4oc2FnYSlcbiAgICAuZG9uZVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIC8vIHJlbmRlciBjb21wb25lbnQgdG8gYSBzdHJpbmdcbiAgICAgIGNvbnN0IGh0bWwgPSByZW5kZXJUb1N0cmluZyhcbiAgICAgICAgPFByb3ZpZGVyIHN0b3JlPXtzdG9yZX0+XG4gICAgICAgICAgPFN0YXRpY1JvdXRlciBsb2NhdGlvbj17cmVxLnVybH0gY29udGV4dD17Y29udGV4dH0+XG4gICAgICAgICAgICA8R0FMaXN0ZW5lcj5cbiAgICAgICAgICAgICAgPEFwcCAvPlxuICAgICAgICAgICAgPC9HQUxpc3RlbmVyPlxuICAgICAgICAgIDwvU3RhdGljUm91dGVyPlxuICAgICAgICA8L1Byb3ZpZGVyPlxuICAgICAgKTtcblxuICAgICAgLy8gZ2V0IGhlYWQgdGFncyBmcm9tIGhlbG1ldFxuICAgICAgY29uc3QgaGVsbWV0ID0gSGVsbWV0LnJlbmRlclN0YXRpYygpO1xuXG4gICAgICAvLyBjaGVjayBmb3IgYSByZWRpcmVjdFxuICAgICAgaWYgKGNvbnRleHQudXJsKSB7XG4gICAgICAgIHJldHVybiByZXMucmVkaXJlY3QoMzAxLCBjb250ZXh0LnVybCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCB0aGUgaW5pdGlhbCBzdGF0ZSBmcm9tIG91ciBSZWR1eCBzdG9yZVxuICAgICAgY29uc3QgcHJlbG9hZGVkU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuXG4gICAgICAvLyBzZW5kIHRoZSByZW5kZXJlZCBwYWdlIGJhY2sgdG8gdGhlIGNsaWVudFxuICAgICAgcmVzLnNlbmQocmVuZGVyRnVsbFBhZ2UoaGVsbWV0LCBodG1sLCBwcmVsb2FkZWRTdGF0ZSkpO1xuICAgIH0pO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NlcnZlci9oZWxwZXJzL2hhbmRsZVNob3dSZW5kZXIuanN4IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVkdXgtc2FnYVwiKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcInJlZHV4LXNhZ2FcIlxuLy8gbW9kdWxlIGlkID0gMTUxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCB7IGNhbGwsIHB1dCwgdGFrZUxhdGVzdCB9IGZyb20gJ3JlZHV4LXNhZ2EvZWZmZWN0cyc7XG5pbXBvcnQgKiBhcyBhY3Rpb25zIGZyb20gJ2NvbnN0YW50cy9zaG93X2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgeyBvblJlcXVlc3RFcnJvciwgb25OZXdDaGFubmVsUmVxdWVzdCwgb25OZXdBc3NldFJlcXVlc3QgfSBmcm9tICdhY3Rpb25zL3Nob3cnO1xuaW1wb3J0IHsgbmV3QXNzZXRSZXF1ZXN0IH0gZnJvbSAnc2FnYXMvc2hvd19hc3NldCc7XG5pbXBvcnQgeyBuZXdDaGFubmVsUmVxdWVzdCB9IGZyb20gJ3NhZ2FzL3Nob3dfY2hhbm5lbCc7XG5pbXBvcnQgbGJyeVVyaSBmcm9tICd1dGlscy9sYnJ5VXJpJztcblxuZnVuY3Rpb24gKiBwYXJzZUFuZFVwZGF0ZUlkZW50aWZpZXJBbmRDbGFpbSAobW9kaWZpZXIsIGNsYWltKSB7XG4gIC8vIHRoaXMgaXMgYSByZXF1ZXN0IGZvciBhbiBhc3NldFxuICAvLyBjbGFpbSB3aWxsIGJlIGFuIGFzc2V0IGNsYWltXG4gIC8vIHRoZSBpZGVudGlmaWVyIGNvdWxkIGJlIGEgY2hhbm5lbCBvciBhIGNsYWltIGlkXG4gIGxldCBpc0NoYW5uZWwsIGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCwgY2xhaW1JZCwgY2xhaW1OYW1lLCBleHRlbnNpb247XG4gIHRyeSB7XG4gICAgKHsgaXNDaGFubmVsLCBjaGFubmVsTmFtZSwgY2hhbm5lbENsYWltSWQsIGNsYWltSWQgfSA9IGxicnlVcmkucGFyc2VJZGVudGlmaWVyKG1vZGlmaWVyKSk7XG4gICAgKHsgY2xhaW1OYW1lLCBleHRlbnNpb24gfSA9IGxicnlVcmkucGFyc2VDbGFpbShjbGFpbSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB5aWVsZCBwdXQob25SZXF1ZXN0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICB9XG4gIC8vIHRyaWdnZXIgYW4gbmV3IGFjdGlvbiB0byB1cGRhdGUgdGhlIHN0b3JlXG4gIGlmIChpc0NoYW5uZWwpIHtcbiAgICByZXR1cm4geWllbGQgY2FsbChuZXdBc3NldFJlcXVlc3QsIG9uTmV3QXNzZXRSZXF1ZXN0KGNsYWltTmFtZSwgbnVsbCwgY2hhbm5lbE5hbWUsIGNoYW5uZWxDbGFpbUlkLCBleHRlbnNpb24pKTtcbiAgfTtcbiAgeWllbGQgY2FsbChuZXdBc3NldFJlcXVlc3QsIG9uTmV3QXNzZXRSZXF1ZXN0KGNsYWltTmFtZSwgY2xhaW1JZCwgbnVsbCwgbnVsbCwgZXh0ZW5zaW9uKSk7XG59XG5mdW5jdGlvbiAqIHBhcnNlQW5kVXBkYXRlQ2xhaW1Pbmx5IChjbGFpbSkge1xuICAvLyB0aGlzIGNvdWxkIGJlIGEgcmVxdWVzdCBmb3IgYW4gYXNzZXQgb3IgYSBjaGFubmVsIHBhZ2VcbiAgLy8gY2xhaW0gY291bGQgYmUgYW4gYXNzZXQgY2xhaW0gb3IgYSBjaGFubmVsIGNsYWltXG4gIGxldCBpc0NoYW5uZWwsIGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZDtcbiAgdHJ5IHtcbiAgICAoeyBpc0NoYW5uZWwsIGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCB9ID0gbGJyeVVyaS5wYXJzZUlkZW50aWZpZXIoY2xhaW0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geWllbGQgcHV0KG9uUmVxdWVzdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuICAvLyB0cmlnZ2VyIGFuIG5ldyBhY3Rpb24gdG8gdXBkYXRlIHRoZSBzdG9yZVxuICAvLyByZXR1cm4gZWFybHkgaWYgdGhpcyByZXF1ZXN0IGlzIGZvciBhIGNoYW5uZWxcbiAgaWYgKGlzQ2hhbm5lbCkge1xuICAgIHJldHVybiB5aWVsZCBjYWxsKG5ld0NoYW5uZWxSZXF1ZXN0LCBvbk5ld0NoYW5uZWxSZXF1ZXN0KGNoYW5uZWxOYW1lLCBjaGFubmVsQ2xhaW1JZCkpO1xuICB9XG4gIC8vIGlmIG5vdCBmb3IgYSBjaGFubmVsLCBwYXJzZSB0aGUgY2xhaW0gcmVxdWVzdFxuICBsZXQgY2xhaW1OYW1lLCBleHRlbnNpb247XG4gIHRyeSB7XG4gICAgKHtjbGFpbU5hbWUsIGV4dGVuc2lvbn0gPSBsYnJ5VXJpLnBhcnNlQ2xhaW0oY2xhaW0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geWllbGQgcHV0KG9uUmVxdWVzdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuICB5aWVsZCBjYWxsKG5ld0Fzc2V0UmVxdWVzdCwgb25OZXdBc3NldFJlcXVlc3QoY2xhaW1OYW1lLCBudWxsLCBudWxsLCBudWxsLCBleHRlbnNpb24pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uICogaGFuZGxlU2hvd1BhZ2VVcmkgKGFjdGlvbikge1xuICBjb25zdCB7IGlkZW50aWZpZXIsIGNsYWltIH0gPSBhY3Rpb24uZGF0YTtcbiAgaWYgKGlkZW50aWZpZXIpIHtcbiAgICByZXR1cm4geWllbGQgY2FsbChwYXJzZUFuZFVwZGF0ZUlkZW50aWZpZXJBbmRDbGFpbSwgaWRlbnRpZmllciwgY2xhaW0pO1xuICB9XG4gIHlpZWxkIGNhbGwocGFyc2VBbmRVcGRhdGVDbGFpbU9ubHksIGNsYWltKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiAqIHdhdGNoSGFuZGxlU2hvd1BhZ2VVcmkgKCkge1xuICB5aWVsZCB0YWtlTGF0ZXN0KGFjdGlvbnMuSEFORExFX1NIT1dfVVJJLCBoYW5kbGVTaG93UGFnZVVyaSk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3NhZ2FzL3Nob3dfdXJpLmpzIiwiaW1wb3J0IHsgY2FsbCwgcHV0LCBzZWxlY3QsIHRha2VMYXRlc3QgfSBmcm9tICdyZWR1eC1zYWdhL2VmZmVjdHMnO1xuaW1wb3J0ICogYXMgYWN0aW9ucyBmcm9tICdjb25zdGFudHMvc2hvd19hY3Rpb25fdHlwZXMnO1xuaW1wb3J0IHsgYWRkUmVxdWVzdFRvUmVxdWVzdExpc3QsIG9uUmVxdWVzdEVycm9yLCBvblJlcXVlc3RVcGRhdGUsIGFkZEFzc2V0VG9Bc3NldExpc3QgfSBmcm9tICdhY3Rpb25zL3Nob3cnO1xuaW1wb3J0IHsgZ2V0TG9uZ0NsYWltSWQsIGdldFNob3J0SWQsIGdldENsYWltRGF0YSB9IGZyb20gJ2FwaS9hc3NldEFwaSc7XG5pbXBvcnQgeyBzZWxlY3RTaG93U3RhdGUgfSBmcm9tICdzZWxlY3RvcnMvc2hvdyc7XG5pbXBvcnQgeyBzZWxlY3RTaXRlSG9zdCB9IGZyb20gJ3NlbGVjdG9ycy9zaXRlJztcblxuZXhwb3J0IGZ1bmN0aW9uICogbmV3QXNzZXRSZXF1ZXN0IChhY3Rpb24pIHtcbiAgY29uc3QgeyByZXF1ZXN0VHlwZSwgcmVxdWVzdElkLCBuYW1lLCBtb2RpZmllciB9ID0gYWN0aW9uLmRhdGE7XG4gIC8vIHB1dCBhbiBhY3Rpb24gdG8gdXBkYXRlIHRoZSByZXF1ZXN0IGluIHJlZHV4XG4gIHlpZWxkIHB1dChvblJlcXVlc3RVcGRhdGUocmVxdWVzdFR5cGUsIHJlcXVlc3RJZCkpO1xuICAvLyBpcyB0aGlzIGFuIGV4aXN0aW5nIHJlcXVlc3Q/XG4gIC8vIElmIHRoaXMgdXJpIGlzIGluIHRoZSByZXF1ZXN0IGxpc3QsIGl0J3MgYWxyZWFkeSBiZWVuIGZldGNoZWRcbiAgY29uc3Qgc3RhdGUgPSB5aWVsZCBzZWxlY3Qoc2VsZWN0U2hvd1N0YXRlKTtcbiAgY29uc3QgaG9zdCA9IHlpZWxkIHNlbGVjdChzZWxlY3RTaXRlSG9zdCk7XG4gIGlmIChzdGF0ZS5yZXF1ZXN0TGlzdFtyZXF1ZXN0SWRdKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gZ2V0IGxvbmcgaWQgJiYgYWRkIHJlcXVlc3QgdG8gcmVxdWVzdCBsaXN0XG4gIGxldCBsb25nSWQ7XG4gIHRyeSB7XG4gICAgKHtkYXRhOiBsb25nSWR9ID0geWllbGQgY2FsbChnZXRMb25nQ2xhaW1JZCwgaG9zdCwgbmFtZSwgbW9kaWZpZXIpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geWllbGQgcHV0KG9uUmVxdWVzdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuICBjb25zdCBhc3NldEtleSA9IGBhIyR7bmFtZX0jJHtsb25nSWR9YDtcbiAgeWllbGQgcHV0KGFkZFJlcXVlc3RUb1JlcXVlc3RMaXN0KHJlcXVlc3RJZCwgbnVsbCwgYXNzZXRLZXkpKTtcbiAgLy8gaXMgdGhpcyBhbiBleGlzdGluZyBhc3NldD9cbiAgLy8gSWYgdGhpcyBhc3NldCBpcyBpbiB0aGUgYXNzZXQgbGlzdCwgaXQncyBhbHJlYWR5IGJlZW4gZmV0Y2hlZFxuICBpZiAoc3RhdGUuYXNzZXRMaXN0W2Fzc2V0S2V5XSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIGdldCBzaG9ydCBJZFxuICBsZXQgc2hvcnRJZDtcbiAgdHJ5IHtcbiAgICAoe2RhdGE6IHNob3J0SWR9ID0geWllbGQgY2FsbChnZXRTaG9ydElkLCBob3N0LCBuYW1lLCBsb25nSWQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geWllbGQgcHV0KG9uUmVxdWVzdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuICAvLyBnZXQgYXNzZXQgY2xhaW0gZGF0YVxuICBsZXQgY2xhaW1EYXRhO1xuICB0cnkge1xuICAgICh7ZGF0YTogY2xhaW1EYXRhfSA9IHlpZWxkIGNhbGwoZ2V0Q2xhaW1EYXRhLCBob3N0LCBuYW1lLCBsb25nSWQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geWllbGQgcHV0KG9uUmVxdWVzdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuICAvLyBhZGQgYXNzZXQgdG8gYXNzZXQgbGlzdFxuICB5aWVsZCBwdXQoYWRkQXNzZXRUb0Fzc2V0TGlzdChhc3NldEtleSwgbnVsbCwgbmFtZSwgbG9uZ0lkLCBzaG9ydElkLCBjbGFpbURhdGEpKTtcbiAgLy8gY2xlYXIgYW55IGVycm9ycyBpbiByZXF1ZXN0IGVycm9yXG4gIHlpZWxkIHB1dChvblJlcXVlc3RFcnJvcihudWxsKSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gKiB3YXRjaE5ld0Fzc2V0UmVxdWVzdCAoKSB7XG4gIHlpZWxkIHRha2VMYXRlc3QoYWN0aW9ucy5BU1NFVF9SRVFVRVNUX05FVywgbmV3QXNzZXRSZXF1ZXN0KTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvc2FnYXMvc2hvd19hc3NldC5qcyIsImltcG9ydCBSZXF1ZXN0IGZyb20gJ3V0aWxzL3JlcXVlc3QnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9uZ0NsYWltSWQgKGhvc3QsIG5hbWUsIG1vZGlmaWVyKSB7XG4gIGxldCBib2R5ID0ge307XG4gIC8vIGNyZWF0ZSByZXF1ZXN0IHBhcmFtc1xuICBpZiAobW9kaWZpZXIpIHtcbiAgICBpZiAobW9kaWZpZXIuaWQpIHtcbiAgICAgIGJvZHlbJ2NsYWltSWQnXSA9IG1vZGlmaWVyLmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICBib2R5WydjaGFubmVsTmFtZSddID0gbW9kaWZpZXIuY2hhbm5lbC5uYW1lO1xuICAgICAgYm9keVsnY2hhbm5lbENsYWltSWQnXSA9IG1vZGlmaWVyLmNoYW5uZWwuaWQ7XG4gICAgfVxuICB9XG4gIGJvZHlbJ2NsYWltTmFtZSddID0gbmFtZTtcbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIG1ldGhvZCA6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICBib2R5ICAgOiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgfTtcbiAgLy8gY3JlYXRlIHVybFxuICBjb25zdCB1cmwgPSBgJHtob3N0fS9hcGkvY2xhaW0vbG9uZy1pZGA7XG4gIC8vIHJldHVybiB0aGUgcmVxdWVzdCBwcm9taXNlXG4gIHJldHVybiBSZXF1ZXN0KHVybCwgcGFyYW1zKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaG9ydElkIChob3N0LCBuYW1lLCBjbGFpbUlkKSB7XG4gIGNvbnN0IHVybCA9IGAke2hvc3R9L2FwaS9jbGFpbS9zaG9ydC1pZC8ke2NsYWltSWR9LyR7bmFtZX1gO1xuICByZXR1cm4gUmVxdWVzdCh1cmwpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsYWltRGF0YSAoaG9zdCwgbmFtZSwgY2xhaW1JZCkge1xuICBjb25zdCB1cmwgPSBgJHtob3N0fS9hcGkvY2xhaW0vZGF0YS8ke25hbWV9LyR7Y2xhaW1JZH1gO1xuICByZXR1cm4gUmVxdWVzdCh1cmwpO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2NsaWVudC9hcGkvYXNzZXRBcGkuanMiLCJpbXBvcnQge2NhbGwsIHB1dCwgc2VsZWN0LCB0YWtlTGF0ZXN0fSBmcm9tICdyZWR1eC1zYWdhL2VmZmVjdHMnO1xuaW1wb3J0ICogYXMgYWN0aW9ucyBmcm9tICdjb25zdGFudHMvc2hvd19hY3Rpb25fdHlwZXMnO1xuaW1wb3J0IHsgYWRkTmV3Q2hhbm5lbFRvQ2hhbm5lbExpc3QsIGFkZFJlcXVlc3RUb1JlcXVlc3RMaXN0LCBvblJlcXVlc3RFcnJvciwgb25SZXF1ZXN0VXBkYXRlLCB1cGRhdGVDaGFubmVsQ2xhaW1zIH0gZnJvbSAnYWN0aW9ucy9zaG93JztcbmltcG9ydCB7IGdldENoYW5uZWxDbGFpbXMsIGdldENoYW5uZWxEYXRhIH0gZnJvbSAnYXBpL2NoYW5uZWxBcGknO1xuaW1wb3J0IHsgc2VsZWN0U2hvd1N0YXRlIH0gZnJvbSAnc2VsZWN0b3JzL3Nob3cnO1xuaW1wb3J0IHsgc2VsZWN0U2l0ZUhvc3QgfSBmcm9tICdzZWxlY3RvcnMvc2l0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiAqIG5ld0NoYW5uZWxSZXF1ZXN0IChhY3Rpb24pIHtcbiAgY29uc3QgeyByZXF1ZXN0VHlwZSwgcmVxdWVzdElkLCBjaGFubmVsTmFtZSwgY2hhbm5lbElkIH0gPSBhY3Rpb24uZGF0YTtcbiAgLy8gcHV0IGFuIGFjdGlvbiB0byB1cGRhdGUgdGhlIHJlcXVlc3QgaW4gcmVkdXhcbiAgeWllbGQgcHV0KG9uUmVxdWVzdFVwZGF0ZShyZXF1ZXN0VHlwZSwgcmVxdWVzdElkKSk7XG4gIC8vIGlzIHRoaXMgYW4gZXhpc3RpbmcgcmVxdWVzdD9cbiAgLy8gSWYgdGhpcyB1cmkgaXMgaW4gdGhlIHJlcXVlc3QgbGlzdCwgaXQncyBhbHJlYWR5IGJlZW4gZmV0Y2hlZFxuICBjb25zdCBzdGF0ZSA9IHlpZWxkIHNlbGVjdChzZWxlY3RTaG93U3RhdGUpO1xuICBjb25zdCBob3N0ID0geWllbGQgc2VsZWN0KHNlbGVjdFNpdGVIb3N0KTtcbiAgaWYgKHN0YXRlLnJlcXVlc3RMaXN0W3JlcXVlc3RJZF0pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBnZXQgY2hhbm5lbCBsb25nIGlkXG4gIGxldCBsb25nSWQsIHNob3J0SWQ7XG4gIHRyeSB7XG4gICAgKHsgZGF0YToge2xvbmdDaGFubmVsQ2xhaW1JZDogbG9uZ0lkLCBzaG9ydENoYW5uZWxDbGFpbUlkOiBzaG9ydElkfSB9ID0geWllbGQgY2FsbChnZXRDaGFubmVsRGF0YSwgaG9zdCwgY2hhbm5lbE5hbWUsIGNoYW5uZWxJZCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB5aWVsZCBwdXQob25SZXF1ZXN0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICB9XG4gIC8vIHN0b3JlIHRoZSByZXF1ZXN0IGluIHRoZSBjaGFubmVsIHJlcXVlc3RzIGxpc3RcbiAgY29uc3QgY2hhbm5lbEtleSA9IGBjIyR7Y2hhbm5lbE5hbWV9IyR7bG9uZ0lkfWA7XG4gIHlpZWxkIHB1dChhZGRSZXF1ZXN0VG9SZXF1ZXN0TGlzdChyZXF1ZXN0SWQsIG51bGwsIGNoYW5uZWxLZXkpKTtcbiAgLy8gaXMgdGhpcyBhbiBleGlzdGluZyBjaGFubmVsP1xuICAvLyBJZiB0aGlzIGNoYW5uZWwgaXMgaW4gdGhlIGNoYW5uZWwgbGlzdCwgaXQncyBhbHJlYWR5IGJlZW4gZmV0Y2hlZFxuICBpZiAoc3RhdGUuY2hhbm5lbExpc3RbY2hhbm5lbEtleV0pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBnZXQgY2hhbm5lbCBjbGFpbXMgZGF0YVxuICBsZXQgY2xhaW1zRGF0YTtcbiAgdHJ5IHtcbiAgICAoeyBkYXRhOiBjbGFpbXNEYXRhIH0gPSB5aWVsZCBjYWxsKGdldENoYW5uZWxDbGFpbXMsIGhvc3QsIGxvbmdJZCwgY2hhbm5lbE5hbWUsIDEpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geWllbGQgcHV0KG9uUmVxdWVzdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuICAvLyBzdG9yZSB0aGUgY2hhbm5lbCBkYXRhIGluIHRoZSBjaGFubmVsIGxpc3RcbiAgeWllbGQgcHV0KGFkZE5ld0NoYW5uZWxUb0NoYW5uZWxMaXN0KGNoYW5uZWxLZXksIGNoYW5uZWxOYW1lLCBzaG9ydElkLCBsb25nSWQsIGNsYWltc0RhdGEpKTtcbiAgLy8gY2xlYXIgYW55IHJlcXVlc3QgZXJyb3JzXG4gIHlpZWxkIHB1dChvblJlcXVlc3RFcnJvcihudWxsKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiAqIHdhdGNoTmV3Q2hhbm5lbFJlcXVlc3QgKCkge1xuICB5aWVsZCB0YWtlTGF0ZXN0KGFjdGlvbnMuQ0hBTk5FTF9SRVFVRVNUX05FVywgbmV3Q2hhbm5lbFJlcXVlc3QpO1xufTtcblxuZnVuY3Rpb24gKiBnZXROZXdDbGFpbXNBbmRVcGRhdGVDaGFubmVsIChhY3Rpb24pIHtcbiAgY29uc3QgeyBjaGFubmVsS2V5LCBuYW1lLCBsb25nSWQsIHBhZ2UgfSA9IGFjdGlvbi5kYXRhO1xuICBjb25zdCBob3N0ID0geWllbGQgc2VsZWN0KHNlbGVjdFNpdGVIb3N0KTtcbiAgbGV0IGNsYWltc0RhdGE7XG4gIHRyeSB7XG4gICAgKHsgZGF0YTogY2xhaW1zRGF0YSB9ID0geWllbGQgY2FsbChnZXRDaGFubmVsQ2xhaW1zLCBob3N0LCBsb25nSWQsIG5hbWUsIHBhZ2UpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geWllbGQgcHV0KG9uUmVxdWVzdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuICB5aWVsZCBwdXQodXBkYXRlQ2hhbm5lbENsYWltcyhjaGFubmVsS2V5LCBjbGFpbXNEYXRhKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiAqIHdhdGNoVXBkYXRlQ2hhbm5lbENsYWltcyAoKSB7XG4gIHlpZWxkIHRha2VMYXRlc3QoYWN0aW9ucy5DSEFOTkVMX0NMQUlNU19VUERBVEVfQVNZTkMsIGdldE5ld0NsYWltc0FuZFVwZGF0ZUNoYW5uZWwpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L3NhZ2FzL3Nob3dfY2hhbm5lbC5qcyIsImltcG9ydCBSZXF1ZXN0IGZyb20gJ3V0aWxzL3JlcXVlc3QnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbm5lbERhdGEgKGhvc3QsIGlkLCBuYW1lKSB7XG4gIGlmICghaWQpIGlkID0gJ25vbmUnO1xuICBjb25zdCB1cmwgPSBgJHtob3N0fS9hcGkvY2hhbm5lbC9kYXRhLyR7bmFtZX0vJHtpZH1gO1xuICByZXR1cm4gUmVxdWVzdCh1cmwpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoYW5uZWxDbGFpbXMgKGhvc3QsIGxvbmdJZCwgbmFtZSwgcGFnZSkge1xuICBpZiAoIXBhZ2UpIHBhZ2UgPSAxO1xuICBjb25zdCB1cmwgPSBgJHtob3N0fS9hcGkvY2hhbm5lbC9jbGFpbXMvJHtuYW1lfS8ke2xvbmdJZH0vJHtwYWdlfWA7XG4gIHJldHVybiBSZXF1ZXN0KHVybCk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vY2xpZW50L2FwaS9jaGFubmVsQXBpLmpzIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIFJFR0VYUF9JTlZBTElEX0NMQUlNICA6IC9bXkEtWmEtejAtOS1dL2csXG4gIFJFR0VYUF9JTlZBTElEX0NIQU5ORUw6IC9bXkEtWmEtejAtOS1AXS9nLFxuICBSRUdFWFBfQUREUkVTUyAgICAgICAgOiAvXmIoPz1bXjBPSWxdezMyLDMzfSlbMC05QS1aYS16XXszMiwzM30kLyxcbiAgQ0hBTk5FTF9DSEFSICAgICAgICAgIDogJ0AnLFxuICBwYXJzZUlkZW50aWZpZXIgICAgICAgOiBmdW5jdGlvbiAoaWRlbnRpZmllcikge1xuICAgIGNvbnN0IGNvbXBvbmVudHNSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAnKFteOiQjL10qKScgKyAvLyB2YWx1ZSAoc3RvcHMgYXQgdGhlIGZpcnN0IHNlcGFyYXRvciBvciBlbmQpXG4gICAgICAnKFs6JCNdPykoW14vXSopJyAvLyBtb2RpZmllciBzZXBhcmF0b3IsIG1vZGlmaWVyIChzdG9wcyBhdCB0aGUgZmlyc3QgcGF0aCBzZXBhcmF0b3Igb3IgZW5kKVxuICAgICk7XG4gICAgY29uc3QgW3Byb3RvLCB2YWx1ZSwgbW9kaWZpZXJTZXBlcmF0b3IsIG1vZGlmaWVyXSA9IGNvbXBvbmVudHNSZWdleCAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgLmV4ZWMoaWRlbnRpZmllcilcbiAgICAgIC5tYXAobWF0Y2ggPT4gbWF0Y2ggfHwgbnVsbCk7XG5cbiAgICAvLyBWYWxpZGF0ZSBhbmQgcHJvY2VzcyBuYW1lXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaGVjayB5b3VyIFVSTC4gIE5vIGNoYW5uZWwgbmFtZSBwcm92aWRlZCBiZWZvcmUgXCIke21vZGlmaWVyU2VwZXJhdG9yfVwiYCk7XG4gICAgfVxuICAgIGNvbnN0IGlzQ2hhbm5lbCA9IHZhbHVlLnN0YXJ0c1dpdGgobW9kdWxlLmV4cG9ydHMuQ0hBTk5FTF9DSEFSKTtcbiAgICBjb25zdCBjaGFubmVsTmFtZSA9IGlzQ2hhbm5lbCA/IHZhbHVlIDogbnVsbDtcbiAgICBsZXQgY2xhaW1JZDtcbiAgICBpZiAoaXNDaGFubmVsKSB7XG4gICAgICBpZiAoIWNoYW5uZWxOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hlY2sgeW91ciBVUkwuICBObyBjaGFubmVsIG5hbWUgYWZ0ZXIgXCJAXCIuJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lQmFkQ2hhcnMgPSAoY2hhbm5lbE5hbWUpLm1hdGNoKG1vZHVsZS5leHBvcnRzLlJFR0VYUF9JTlZBTElEX0NIQU5ORUwpO1xuICAgICAgaWYgKG5hbWVCYWRDaGFycykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENoZWNrIHlvdXIgVVJMLiAgSW52YWxpZCBjaGFyYWN0ZXJzIGluIGNoYW5uZWwgbmFtZTogXCIke25hbWVCYWRDaGFycy5qb2luKCcsICcpfVwiLmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjbGFpbUlkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgYW5kIHByb2Nlc3MgbW9kaWZpZXJcbiAgICBsZXQgY2hhbm5lbENsYWltSWQ7XG4gICAgaWYgKG1vZGlmaWVyU2VwZXJhdG9yKSB7XG4gICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2hlY2sgeW91ciBVUkwuICBObyBtb2RpZmllciBwcm92aWRlZCBhZnRlciBzZXBhcmF0b3IgXCIke21vZGlmaWVyU2VwZXJhdG9yfVwiYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RpZmllclNlcGVyYXRvciA9PT0gJzonKSB7XG4gICAgICAgIGNoYW5uZWxDbGFpbUlkID0gbW9kaWZpZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENoZWNrIHlvdXIgVVJMLiAgVGhlIFwiJHttb2RpZmllclNlcGVyYXRvcn1cIiBtb2RpZmllciBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZGApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaXNDaGFubmVsLFxuICAgICAgY2hhbm5lbE5hbWUsXG4gICAgICBjaGFubmVsQ2xhaW1JZDogY2hhbm5lbENsYWltSWQgfHwgbnVsbCxcbiAgICAgIGNsYWltSWQgICAgICAgOiBjbGFpbUlkIHx8IG51bGwsXG4gICAgfTtcbiAgfSxcbiAgcGFyc2VDbGFpbTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBjb25zdCBjb21wb25lbnRzUmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgJyhbXjokIy8uXSopJyArIC8vIG5hbWUgKHN0b3BzIGF0IHRoZSBmaXJzdCBleHRlbnNpb24pXG4gICAgICAnKFs6JCMuXT8pKFteL10qKScgLy8gZXh0ZW5zaW9uIHNlcGFyYXRvciwgZXh0ZW5zaW9uIChzdG9wcyBhdCB0aGUgZmlyc3QgcGF0aCBzZXBhcmF0b3Igb3IgZW5kKVxuICAgICk7XG4gICAgY29uc3QgW3Byb3RvLCBjbGFpbU5hbWUsIGV4dGVuc2lvblNlcGVyYXRvciwgZXh0ZW5zaW9uXSA9IGNvbXBvbmVudHNSZWdleCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICAuZXhlYyhuYW1lKVxuICAgICAgLm1hcChtYXRjaCA9PiBtYXRjaCB8fCBudWxsKTtcblxuICAgIC8vIFZhbGlkYXRlIGFuZCBwcm9jZXNzIG5hbWVcbiAgICBpZiAoIWNsYWltTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGVjayB5b3VyIFVSTC4gIE5vIGNsYWltIG5hbWUgcHJvdmlkZWQgYmVmb3JlIFwiLlwiJyk7XG4gICAgfVxuICAgIGNvbnN0IG5hbWVCYWRDaGFycyA9IChjbGFpbU5hbWUpLm1hdGNoKG1vZHVsZS5leHBvcnRzLlJFR0VYUF9JTlZBTElEX0NMQUlNKTtcbiAgICBpZiAobmFtZUJhZENoYXJzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENoZWNrIHlvdXIgVVJMLiAgSW52YWxpZCBjaGFyYWN0ZXJzIGluIGNsYWltIG5hbWU6IFwiJHtuYW1lQmFkQ2hhcnMuam9pbignLCAnKX1cIi5gKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgYW5kIHByb2Nlc3MgZXh0ZW5zaW9uXG4gICAgaWYgKGV4dGVuc2lvblNlcGVyYXRvcikge1xuICAgICAgaWYgKCFleHRlbnNpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaGVjayB5b3VyIFVSTC4gIE5vIGZpbGUgZXh0ZW5zaW9uIHByb3ZpZGVkIGFmdGVyIHNlcGFyYXRvciBcIiR7ZXh0ZW5zaW9uU2VwZXJhdG9yfVwiLmApO1xuICAgICAgfVxuICAgICAgaWYgKGV4dGVuc2lvblNlcGVyYXRvciAhPT0gJy4nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2hlY2sgeW91ciBVUkwuICBUaGUgXCIke2V4dGVuc2lvblNlcGVyYXRvcn1cIiBzZXBhcmF0b3IgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgY2xhaW0gbmFtZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsYWltTmFtZSxcbiAgICAgIGV4dGVuc2lvbjogZXh0ZW5zaW9uIHx8IG51bGwsXG4gICAgfTtcbiAgfSxcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9jbGllbnQvdXRpbHMvbGJyeVVyaS5qcyIsImNvbnN0IGhhbmRsZVBhZ2VSZW5kZXIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2hhbmRsZVBhZ2VSZW5kZXIuanN4Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwID0+IHtcbiAgLy8gYSBjYXRjaC1hbGwgcm91dGUgaWYgc29tZW9uZSB2aXNpdHMgYSBwYWdlIHRoYXQgZG9lcyBub3QgZXhpc3RcbiAgYXBwLnVzZSgnKicsIChyZXEsIHJlcykgPT4ge1xuICAgIC8vIHNlbmQgcmVzcG9uc2VcbiAgICBoYW5kbGVQYWdlUmVuZGVyKHJlcSwgcmVzKTtcbiAgfSk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc2VydmVyL3JvdXRlcy9mYWxsYmFjay1yb3V0ZXMuanMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/index.js.map b/index.js.map deleted file mode 100644 index a44c415d..00000000 --- a/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///index.js","webpack:///webpack/bootstrap e7360edfffe873533ea7","webpack:///external \"react\"","webpack:///external \"react-redux\"","webpack:///external \"winston\"","webpack:///external \"react-router-dom\"","webpack:///./client/actions/publish.js","webpack:///./config/siteConfig.js","webpack:///./server/models/index.js","webpack:///./client/containers/NavBar/index.js","webpack:///./client/actions/show.js","webpack:///./client/components/SEO/index.js","webpack:///external \"prop-types\"","webpack:///./client/utils/request.js","webpack:///./client/constants/show_action_types.js","webpack:///./client/selectors/show.js","webpack:///external \"react-helmet\"","webpack:///external \"redux-saga/effects\"","webpack:///./server/helpers/lbryApi.js","webpack:///./server/helpers/googleAnalytics.js","webpack:///external \"redux\"","webpack:///./client/actions/channel.js","webpack:///./client/components/ProgressBar/index.jsx","webpack:///./client/pages/ErrorPage/index.jsx","webpack:///external \"passport\"","webpack:///external \"passport-local\"","webpack:///external \"sequelize\"","webpack:///./server/helpers/sequelizeHelpers.js","webpack:///./server/helpers/publishHelpers.js","webpack:///./server/helpers/errorHandlers.js","webpack:///./server/controllers/serveController.js","webpack:///./server/helpers/handlePageRender.jsx","webpack:///external \"react-dom/server\"","webpack:///./client/reducers/index.js","webpack:///./client/constants/publish_action_types.js","webpack:///./client/constants/publish_channel_select_states.js","webpack:///./client/constants/channel_action_types.js","webpack:///./client/constants/asset_display_states.js","webpack:///./client/components/GAListener/index.jsx","webpack:///./client/app.jsx","webpack:///./client/containers/Dropzone/index.js","webpack:///./client/containers/ChannelLoginForm/index.js","webpack:///./client/containers/ChannelCreateForm/index.js","webpack:///./client/constants/show_request_types.js","webpack:///./client/containers/AssetDisplay/index.js","webpack:///./server/helpers/renderFullPage.js","webpack:///./client/selectors/site.js","webpack:///external \"babel-polyfill\"","webpack:///external \"whatwg-fetch\"","webpack:///./server/server.js","webpack:///external \"express\"","webpack:///external \"body-parser\"","webpack:///external \"express-handlebars\"","webpack:///external \"handlebars\"","webpack:///external \"helmet\"","webpack:///./server/helpers/authHelpers.js","webpack:///external \"cookie-session\"","webpack:///external \"http\"","webpack:///./server/passport/local-signup.js","webpack:///external \"axios\"","webpack:///./config/lbryConfig.js","webpack:///external \"universal-analytics\"","webpack:///./config/mysqlConfig.js","webpack:///./server/models/certificate.js","webpack:///./server/models/channel.js","webpack:///./server/models/claim.js","webpack:///./server/models/file.js","webpack:///./server/models/request.js","webpack:///./server/models/user.js","webpack:///external \"bcrypt\"","webpack:///./server/passport/local-login.js","webpack:///./server/routes/auth-routes.js","webpack:///./server/routes/api-routes.js","webpack:///external \"connect-multiparty\"","webpack:///./server/controllers/publishController.js","webpack:///external \"fs\"","webpack:///./server/auth/authentication.js","webpack:///./server/helpers/channelPagination.js","webpack:///./server/routes/page-routes.js","webpack:///./client/reducers/publish.js","webpack:///./client/reducers/channel.js","webpack:///./client/reducers/show.js","webpack:///./client/reducers/site.js","webpack:///external \"react-ga\"","webpack:///./client/pages/HomePage/index.jsx","webpack:///./client/components/SEO/view.jsx","webpack:///./client/utils/pageTitle.js","webpack:///./client/utils/metaTags.js","webpack:///./client/utils/canonicalLink.js","webpack:///./client/containers/NavBar/view.jsx","webpack:///./client/components/Logo/index.jsx","webpack:///./client/components/NavBarChannelOptionsDropdown/index.jsx","webpack:///external \"cross-fetch/polyfill\"","webpack:///./client/containers/PublishTool/index.js","webpack:///./client/containers/PublishTool/view.jsx","webpack:///./client/containers/Dropzone/view.jsx","webpack:///./client/utils/file.js","webpack:///./client/components/PublishPreview/index.jsx","webpack:///./client/containers/PublishDetails/index.js","webpack:///./client/containers/PublishDetails/view.jsx","webpack:///./client/containers/PublishTitleInput/index.js","webpack:///./client/containers/PublishTitleInput/view.jsx","webpack:///./client/containers/PublishUrlInput/index.js","webpack:///./client/containers/PublishUrlInput/view.jsx","webpack:///./client/components/PublishUrlMiddleDisplay/index.jsx","webpack:///./client/containers/PublishThumbnailInput/index.js","webpack:///./client/containers/PublishThumbnailInput/view.jsx","webpack:///./client/containers/PublishMetadataInputs/index.js","webpack:///./client/containers/PublishMetadataInputs/view.jsx","webpack:///./client/components/ExpandingTextArea/index.jsx","webpack:///./client/containers/ChannelSelect/index.js","webpack:///./client/containers/ChannelSelect/view.jsx","webpack:///./client/containers/ChannelLoginForm/view.jsx","webpack:///./client/containers/ChannelCreateForm/view.jsx","webpack:///./client/components/ActiveStatusBar/index.jsx","webpack:///./client/components/InactiveStatusBar/index.jsx","webpack:///./client/containers/PublishStatus/index.js","webpack:///./client/containers/PublishStatus/view.jsx","webpack:///./client/constants/publish_claim_states.js","webpack:///./client/containers/PublishDisabledMessage/index.js","webpack:///./client/containers/PublishDisabledMessage/view.jsx","webpack:///./client/pages/AboutPage/index.jsx","webpack:///./client/pages/LoginPage/index.js","webpack:///./client/pages/LoginPage/view.jsx","webpack:///./client/pages/ShowPage/index.js","webpack:///./client/pages/ShowPage/view.jsx","webpack:///./client/containers/ShowAssetLite/index.js","webpack:///./client/containers/ShowAssetLite/view.jsx","webpack:///./client/containers/AssetDisplay/view.jsx","webpack:///./client/containers/ShowAssetDetails/index.js","webpack:///./client/containers/ShowAssetDetails/view.jsx","webpack:///./client/containers/AssetTitle/index.js","webpack:///./client/containers/AssetTitle/view.jsx","webpack:///./client/containers/AssetInfo/index.js","webpack:///./client/containers/AssetInfo/view.jsx","webpack:///./client/containers/ShowChannel/index.js","webpack:///./client/containers/ShowChannel/view.jsx","webpack:///./client/containers/ChannelClaimsDisplay/index.js","webpack:///./client/containers/ChannelClaimsDisplay/view.jsx","webpack:///./client/components/AssetPreview/index.js","webpack:///./client/components/AssetPreview/view.jsx","webpack:///./client/containers/FourOhFourPage/index.jsx","webpack:///./client/containers/FourOhFourPage/view.jsx","webpack:///./server/routes/asset-routes.js","webpack:///./server/helpers/serveHelpers.js","webpack:///./server/helpers/lbryUri.js","webpack:///./server/helpers/handleShowRender.jsx","webpack:///external \"redux-saga\"","webpack:///./client/sagas/show_uri.js","webpack:///./client/sagas/show_asset.js","webpack:///./client/api/assetApi.js","webpack:///./client/sagas/show_channel.js","webpack:///./client/api/channelApi.js","webpack:///./client/utils/lbryUri.js","webpack:///./server/routes/fallback-routes.js","webpack:///./server/helpers/configureLogger.js","webpack:///./config/loggerConfig.js","webpack:///./server/helpers/configureSlack.js","webpack:///external \"winston-slack-webhook\"","webpack:///./config/slackConfig.js"],"names":["module","exports","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","require","selectFile","file","type","actions","FILE_SELECTED","data","clearFile","FILE_CLEAR","updateMetadata","value","METADATA_UPDATE","updateClaim","CLAIM_UPDATE","setPublishInChannel","channel","SET_PUBLISH_IN_CHANNEL","updatePublishStatus","status","message","PUBLISH_STATUS_UPDATE","updateError","ERROR_UPDATE","updateSelectedChannel","channelName","SELECTED_CHANNEL_UPDATE","toggleMetadataInputs","showMetadataInputs","TOGGLE_METADATA_INPUTS","onNewThumbnail","THUMBNAIL_NEW","startPublish","history","PUBLISH_START","_publish_action_types","obj","newObj","key","default","SiteConfig","this","analytics","googleId","assetDefaults","description","thumbnail","title","auth","sessionKey","details","host","port","twitter","publishing","additionalClaimAddresses","disabled","disabledMessage","primaryClaimAddress","thumbnailChannel","thumbnailChannelId","uploadDirectory","Sequelize","logger","console","log","_require","database","username","password","db","sequelize","dialect","dialectOptions","decimalNumbers","logging","pool","max","min","idle","acquire","authenticate","then","info","catch","err","error","Certificate","Channel","Claim","File","Request","User","import","keys","forEach","modelName","associate","upsert","Model","values","condition","tableName","findOne","where","debug","update","create","_reactRedux","_channel","_publish","_view","_view2","mapStateToProps","_ref","site","loggedInChannel","channelShortId","shortId","channelLongId","longId","siteDescription","mapDispatchToProps","dispatch","onChannelLogin","updateLoggedInChannel","onChannelLogout","connect","onHandleShowPageUri","params","HANDLE_SHOW_URI","onRequestError","REQUEST_ERROR","onNewChannelRequest","channelId","requestType","requestId","CHANNEL_REQUEST_NEW","onNewAssetRequest","id","extension","ASSET_REQUEST_NEW","modifier","onRequestUpdate","REQUEST_UPDATE","addRequestToRequestList","REQUEST_LIST_ADD","addAssetToAssetList","claimId","claimData","ASSET_ADD","addNewChannelToChannelList","claimsData","CHANNEL_ADD","onUpdateChannelClaims","channelKey","page","CHANNEL_CLAIMS_UPDATE_ASYNC","updateChannelClaims","channelListId","CHANNEL_CLAIMS_UPDATE_SUCCESS","fileRequested","FILE_REQUESTED","updateFileAvailability","FILE_AVAILABILITY_UPDATE","updateDisplayAssetError","DISPLAY_ASSET_ERROR","_show_action_types","_show_request_types","defaultDescription","defaultThumbnail","siteHost","siteTitle","siteTwitter","parseJSON","response","json","checkStatus","jsonResponse","Error","request","url","options","fetch","Promise","all","_ref2","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","length","Array","isArray","TypeError","selectAsset","show","requestList","assetKey","assetList","selectShowState","state","axios","_require$api","api","apiHost","apiPort","lbryApiUri","_require2","chooseGaLbrynetPublishLabel","sendGATimingEvent","handleLbrynetResponse","resolve","reject","result","JSON","stringify","publishClaim","publishParams","gaStartTime","Date","now","post","method","getClaim","uri","timeout","getClaimList","claimName","resolveUri","getDownloadDirectory","_ref3","download_directory","createChannel","channel_name","amount","createServeEventParams","headers","ip","originalUrl","eventCategory","eventAction","eventLabel","ipOverride","userAgentOverride","createPublishTimingEventParams","category","variable","label","startTime","endTime","userTimingCategory","userTimingVariableName","userTimingTime","userTimingLabel","sendGoogleAnalyticsEvent","visitorId","replace","ua","strictCidFormat","https","event","sendGoogleAnalyticsTiming","timing","sendGAServeEvent","channel_id","CHANNEL_UPDATE","_channel_action_types","_interopRequireDefault","_classCallCheck","instance","Constructor","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","constructor","writable","setPrototypeOf","__proto__","_createClass","defineProperties","target","props","descriptor","protoProps","staticProps","_react","_react2","_propTypes","_propTypes2","_ActiveStatusBar","_ActiveStatusBar2","_InactiveStatusBar","_InactiveStatusBar2","ProgressBar","_React$Component","_this","getPrototypeOf","bars","index","incrementer","createBars","bind","startProgressBar","updateProgressBar","stopProgressBar","size","isActive","setState","updateInterval","setInterval","clearInterval","createElement","map","bar","Component","propTypes","number","isRequired","_NavBar","_NavBar2","ErrorPage","apply","arguments","className","string","returnShortId","claimsArray","claimIndex","substring","shortIdLength","findIndex","element","possibleMatches","slice","filter","fs","parsePublishApiRequestBody","nsfw","license","exec","parsePublishApiRequestFiles","path","test","validateFileTypeAndSize","fileName","filePath","fileType","thumbnailFileName","thumbnailFilePath","thumbnailFileType","createBasicPublishParams","trim","file_path","bid","metadata","author","language","claim_address","createThumbnailPublishParams","deleteTemporaryFile","unlink","addGetResultsToFileData","fileInfo","getResult","file_name","download_path","createFileData","outpoint","height","address","contentType","handleErrorResponse","res","useObjectPropertiesIfNoKeys","_module$exports$retur","returnErrorMessageAndStatus","_module$exports$retur2","createErrorResponsePayload","code","newErrorObject","getOwnPropertyNames","success","returnPaginatedChannelClaims","getClaimId","channelClaimId","getClaimIdByChannel","getClaimIdByClaim","getLongClaimId","longClaimId","getLongChannelId","longChannelId","getClaimIdByLongChannelId","getChannelData","longChannelClaimId","getShortChannelIdFromLongChannelId","_ref4","shortChannelClaimId","getChannelClaims","getAllChannelClaims","_ref5","_ref6","channelClaimsArray","paginatedChannelViewData","getLocalFileRecord","dataValues","_server","_redux","_index","_index2","_reactRouterDom","_index3","_index4","_app","_app2","_renderFullPage","_renderFullPage2","_reactHelmet","_reactHelmet2","req","context","store","createStore","html","renderToString","Provider","StaticRouter","location","helmet","renderStatic","redirect","preloadedState","getState","send","_publish2","_channel2","_show","_show2","_site","_site2","combineReducers","publish","LOGIN","CREATE","LOCAL_CHECK","UNAVAILABLE","ERROR","AVAILABLE","_reactGa","_reactGa2","initialize","GAListener","sendPageView","listen","set","pathname","pageview","children","withRouter","_HomePage","_HomePage2","_AboutPage","_AboutPage2","_LoginPage","_LoginPage2","_ShowPage","_ShowPage2","_FourOhFourPage","_FourOhFourPage2","App","Switch","Route","exact","component","fileError","setFileError","CHANNEL","ASSET_LITE","ASSET_DETAILS","displayAsset","asset","onFileRequest","toString","meta","link","selectSiteState","selectSiteHost","express","bodyParser","expressHandlebars","Handlebars","passport","serializeSpeechUser","deserializeSpeechUser","cookieSession","http","PORT","app","enable","use","static","__dirname","urlencoded","extended","verbose","serializeUser","deserializeUser","localSignupStrategy","localLoginStrategy","maxAge","session","hbs","defaultLayout","handlebars","engine","server","Server","sync","user","PassportLocalStrategy","Strategy","lbryApi","usernameField","passwordField","userInfo","tx","userData","userName","channelData","claim_id","certificateData","newUser","newChannel","newCertificate","setChannel","setUser","shortChannelId","lbryConfig","MysqlConfig","STRING","BOOLEAN","INTEGER","TEXT","DECIMAL","define","claimSequence","decodedClaim","depth","effectiveAmount","hasSignature","hex","nout","txid","validAtHeight","valueVersion","claimType","certificateVersion","keyType","publicKey","freezeTableName","belongsTo","foreignKey","allowNull","findAll","order","getLongChannelIdFromShortChannelId","_this2","$like","getLongChannelIdFromChannelName","_this3","validateLongChannelId","_this4","hasOne","determineFileExtensionFromContentType","determineThumbnail","storedThumbnail","prepareClaimData","claim","certificateId","licenseUrl","preview","metadataVersion","source","sourceType","sourceVersion","streamVersion","getShortClaimIdFromLongClaimId","raw","getLongClaimIdFromShortClaimId","getTopFreeClaimIdByClaimName","_this5","validateLongClaimId","_this6","resolveClaim","_this7","claimArray","defaultValue","trendingEligible","hasMany","getRecentClaims","limit","action","ipAddress","bcrypt","comparePassword","compare","changePassword","newPassword","genSalt","saltError","salt","hash","hashError","hook","returnUserAndChannelInfo","userInstance","getChannel","isMatch","logIn","logout","multipart","multipartMiddleware","uploadDir","claimNameIsAvailable","checkChannelAvailability","_require3","_require4","errorHandlers","_require5","_require6","authenticateUser","_require7","availableName","body","claimsList","resolveResult","fileData","_ref7","_ref8","_ref9","_ref10","_ref10$","completed","_ref11","_ref12","resolvedUri","_ref13","files","channelPassword","_parsePublishApiReque","_parsePublishApiReque2","_ref14","_ref15","_ref15$","thumbnailPublishParams","lbryTx","_ref16","_ref17","_ref18","claimInfo","_ref19","_defineProperty","publishHelpers","_require$publishing","Op","publishResults","fileRecord","claimRecord","upsertCriteria","setClaim","setFile","claimAddresses","attributes","or","authenticateChannelCredentials","userPassword","channelFindParams","claims","totalPages","determineTotalPages","paginationPage","getPageFromQuery","extractPageFromClaims","previousPage","determinePreviousPage","currentPage","nextPage","determineNextPage","totalResults","determineTotalClaims","parseInt","pageNumber","claimStartIndex","claimEndIndex","totalClaims","fullPages","Math","floor","handlePageRender","render","layout","initialState","assign","publishInChannel","selectedChannel","_publish_channel_select_states","publishSubmit","channelList","_asset_display_states","siteConfig","googleAnalyticsId","_siteConfig$assetDefa","_siteConfig$details","_SEO","_SEO2","_PublishTool","_PublishTool2","HomePage","_pageTitle","_metaTags","_canonicalLink","SEO","_props","_props2","pageUri","pageTitle","createPageTitle","metaTags","createMetaTags","canonicalLink","createCanonicalLink","rel","href","determineOgThumbnailContentType","lastIndexOf","createBasicMetaTags","content","createChannelMetaTags","createAssetMetaTags","embedUrl","showUrl","fileExt","ogTitle","ogDescription","ogThumbnailContentType","ogThumbnail","createBasicCanonicalLink","createAssetCanonicalLink","_asset$claimData","createChannelCanonicalLink","_Logo","_Logo2","_NavBarChannelOptionsDropdown","_NavBarChannelOptionsDropdown2","_request","_request2","NavBar","checkForLoggedInUser","logoutUser","handleSelection","credentials","selectedOptions","NavLink","activeClassName","to","defaultSelection","VIEW","LOGOUT","Logo","version","x","y","viewBox","enableBackground","Link","transform","fontSize","fontFamily","fill","stroke","strokeWidth","strokeLinecap","NavBarChannelDropdown","onChange","_Dropzone","_Dropzone2","_PublishDetails","_PublishDetails2","_PublishStatus","_PublishStatus2","_PublishDisabledMessage","_PublishDisabledMessage2","PublishTool","_file","_PublishPreview","_PublishPreview2","Dropzone","dragOver","mouseOver","dimPreview","handleDrop","handleDragOver","handleDragEnd","handleDragEnter","handleDragLeave","handleMouseEnter","handleMouseLeave","handleClick","handleFileInput","chooseFile","preventDefault","dt","dataTransfer","items","kind","droppedFile","getAsFile","remove","clearData","document","getElementById","click","fileList","validateFile","accept","encType","onDrop","onDragOver","onDragEnd","onDragEnter","onDragLeave","onMouseEnter","onMouseLeave","onClick","PublishPreview","imgSource","setPreviewImageSource","newProps","setPreviewImageSourceFromFile","previewReader","FileReader","readAsDataURL","onloadend","src","alt","bool","_PublishTitleInput","_PublishTitleInput2","_PublishUrlInput","_PublishUrlInput2","_PublishThumbnailInput","_PublishThumbnailInput2","_PublishMetadataInputs","_PublishMetadataInputs2","_ChannelSelect","_ChannelSelect2","PublishDetails","onPublishSubmit","onMetadataChange","PublishTitleInput","handleInput","e","placeholder","loggedInChannelName","loggedInChannelShortId","urlError","onClaimChange","onUrlError","_PublishUrlMiddleDisplay","_PublishUrlMiddleDisplay2","PublishUrlInput","setClaimName","validateClaim","cleanseInput","input","fileNameWithoutEnding","cleanClaimName","UrlMiddle","dataURItoBlob","dataURI","byteString","atob","split","mimeString","ia","Uint8Array","charCodeAt","Blob","PublishThumbnailInput","videoSource","sliderMinRange","sliderMaxRange","sliderValue","handleVideoLoadedData","handleSliderChange","createThumbnail","setVideoSource","nextProps","dataUri","blob","URL","createObjectURL","duration","totalMinutes","totalSeconds","currentTime","video","canvas","width","videoWidth","videoHeight","getContext","drawImage","dataUrl","toDataURL","snapshot","_state","preload","muted","style","display","playsInline","onLoadedData","onSeeked","onToggleMetadataInputs","_ExpandingTextArea","_ExpandingTextArea2","PublishMetadataInputs","toggleShowInputs","handleSelect","checked","selectedOption","htmlFor","rows","maxLength","maxHeight","_objectWithoutProperties","indexOf","_extends","ExpandingTextarea","_Component","_handleChange","adjustTextarea","_ref$target","el","scrollHeight","rest","ref","func","channelError","onPublishInChannelChange","onChannelSelect","_ChannelLoginForm","_ChannelLoginForm2","_ChannelCreateForm","_ChannelCreateForm2","states","ChannelSelect","toggleAnonymousPublish","ChannelLoginForm","loginToChannel","Headers","Content-Type","_ProgressBar","_ProgressBar2","ChannelCreateForm","handleChannelInput","cleanseChannelInput","updateIsChannelAvailable","channelWithAtSymbol","checkIsPasswordProvided","checkIsChannelAvailable","makePublishChannelRequest","ActiveStatusBar","InactiveStatusBar","_publish_claim_states","publishStates","PublishStatus","LOAD_START","LOADING","PUBLISHING","SUCCESS","FAILED","PublishDisabledMessage","AboutPage","LoginPage","_ErrorPage","_ErrorPage2","_ShowAssetLite","_ShowAssetLite2","_ShowAssetDetails","_ShowAssetDetails2","_ShowChannel","_ShowChannel2","ShowPage","match","_AssetDisplay","_AssetDisplay2","ShowLite","AssetDisplay","_props$asset$claimDat","_props$asset$claimDat2","controls","poster","_AssetTitle","_AssetTitle2","_AssetInfo","_AssetInfo2","ShowAssetDetails","AssetTitle","AssetInfo","copyToClipboard","elementToCopy","dataset","elementtocopy","select","execCommand","_props$asset","hidden","readOnly","spellCheck","data-elementtocopy","download","previousRequest","_ChannelClaimsDisplay","_ChannelClaimsDisplay2","ShowChannel","_AssetPreview","_AssetPreview2","ChannelClaimsDisplay","showNextResultsPage","showPreviousResultsPage","showNewPage","_props$channel","_props$channel$claims","defaults","AssetPreview","_ref$claimData","directSourceLink","showUrlLink","_ref$site","FourOhForPage","determineResponseType","flipClaimNameAndIdForBackwardsCompatibility","logRequestData","getClaimIdAndServeAsset","lbryUri","handleShowRender","hasFileExtension","parseModifier","responseType","parseClaim","isChannel","_lbryUri$parseIdentif","parseIdentifier","identifier","_flipClaimNameAndIdFo","_flipClaimNameAndIdFo2","clientAcceptsHtml","requestIsFromBrowser","clientWantsAsset","range","imageIsWanted","videoIsWanted","isValidClaimId","isValidShortId","isValidShortIdOrClaimId","serveAssetToClient","NO_FILE","sendFileOptions","X-Content-Type-Options","sendFile","fullClaimId","tempName","REGEXP_INVALID_CLAIM","REGEXP_INVALID_CHANNEL","REGEXP_ADDRESS","CHANNEL_CHAR","componentsRegex","RegExp","_componentsRegex$exec","_componentsRegex$exec2","proto","modifierSeperator","startsWith","nameBadChars","join","_componentsRegex$exec3","_componentsRegex$exec4","_componentsRegex$exec5","_componentsRegex$exec6","_reduxSaga","_reduxSaga2","_effects","_show_uri","returnSagaWithParams","saga","regeneratorRuntime","mark","_callee","wrap","_context","prev","stop","sagaMiddleware","middleware","applyMiddleware","run","parseAndUpdateIdentifierAndClaim","_lbryUri$parseClaim","_lbryUri2","t0","put","abrupt","sent","_show_asset","newAssetRequest","_marked","parseAndUpdateClaimOnly","_lbryUri$parseIdentif2","_lbryUri$parseClaim2","_context2","_show_channel","newChannelRequest","t1","_marked2","handleShowPageUri","_action$data","_context3","_marked3","watchHandleShowPageUri","_context4","takeLatest","_marked4","_lbryUri","_assetApi","getShortId","getClaimData","t2","watchNewAssetRequest","_ref$data","_channelApi","watchNewChannelRequest","getNewClaimsAndUpdateChannel","_action$data2","watchUpdateChannelClaims","extensionSeperator","logLevel","winston","configure","transports","Console","level","timestamp","colorize","prettyPrint","handleExceptions","humanReadableUnhandledException","warn","silly","loggerConfig","winstonSlackWebHook","SlackWebHook","slackConfig","slackWebHook","slackErrorChannel","slackInfoChannel","add","webhookUrl","iconEmoji","SlackConfig"],"mappings":"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","file":"index.js","sourcesContent":["module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 45);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react\");\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-redux\");\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"winston\");\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-router-dom\");\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.selectFile = selectFile;\nexports.clearFile = clearFile;\nexports.updateMetadata = updateMetadata;\nexports.updateClaim = updateClaim;\nexports.setPublishInChannel = setPublishInChannel;\nexports.updatePublishStatus = updatePublishStatus;\nexports.updateError = updateError;\nexports.updateSelectedChannel = updateSelectedChannel;\nexports.toggleMetadataInputs = toggleMetadataInputs;\nexports.onNewThumbnail = onNewThumbnail;\nexports.startPublish = startPublish;\n\nvar _publish_action_types = __webpack_require__(32);\n\nvar actions = _interopRequireWildcard(_publish_action_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// export action creators\nfunction selectFile(file) {\n return {\n type: actions.FILE_SELECTED,\n data: file\n };\n};\n\nfunction clearFile() {\n return {\n type: actions.FILE_CLEAR\n };\n};\n\nfunction updateMetadata(name, value) {\n return {\n type: actions.METADATA_UPDATE,\n data: {\n name: name,\n value: value\n }\n };\n};\n\nfunction updateClaim(value) {\n return {\n type: actions.CLAIM_UPDATE,\n data: value\n };\n};\n\nfunction setPublishInChannel(channel) {\n return {\n type: actions.SET_PUBLISH_IN_CHANNEL,\n channel: channel\n };\n};\n\nfunction updatePublishStatus(status, message) {\n return {\n type: actions.PUBLISH_STATUS_UPDATE,\n data: {\n status: status,\n message: message\n }\n };\n};\n\nfunction updateError(name, value) {\n return {\n type: actions.ERROR_UPDATE,\n data: {\n name: name,\n value: value\n }\n };\n};\n\nfunction updateSelectedChannel(channelName) {\n return {\n type: actions.SELECTED_CHANNEL_UPDATE,\n data: channelName\n };\n};\n\nfunction toggleMetadataInputs(showMetadataInputs) {\n return {\n type: actions.TOGGLE_METADATA_INPUTS,\n data: showMetadataInputs\n };\n};\n\nfunction onNewThumbnail(file) {\n return {\n type: actions.THUMBNAIL_NEW,\n data: file\n };\n};\n\nfunction startPublish(history) {\n return {\n type: actions.PUBLISH_START,\n data: { history: history }\n };\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction SiteConfig() {\n this.analytics = {\n googleId: 'default'\n };\n this.assetDefaults = {\n description: 'An asset published on Spee.ch',\n thumbnail: 'https://spee.ch/assets/img/video_thumb_default.png',\n title: 'Spee.ch'\n };\n this.auth = {\n sessionKey: 'default'\n };\n this.details = {\n description: 'Open-source, decentralized image and video sharing.',\n host: 'default',\n port: 3000,\n title: 'Spee.ch',\n twitter: '@spee_ch'\n };\n this.publishing = {\n additionalClaimAddresses: [],\n disabled: false,\n disabledMessage: 'Please check back soon.',\n primaryClaimAddress: 'default',\n thumbnailChannel: 'default',\n thumbnailChannelId: 'default',\n uploadDirectory: '/home/lbry/Uploads'\n };\n};\n\nmodule.exports = new SiteConfig();\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Sequelize = __webpack_require__(24);\nvar logger = __webpack_require__(2);\n\nconsole.log('exporting sequelize models');\n\nvar _require = __webpack_require__(61),\n database = _require.database,\n username = _require.username,\n password = _require.password;\n\nvar db = {};\n// set sequelize options\nvar sequelize = new Sequelize(database, username, password, {\n host: 'localhost',\n dialect: 'mysql',\n dialectOptions: { decimalNumbers: true }, // fix to ensure DECIMAL will not be stored as a string\n logging: false,\n pool: {\n max: 5,\n min: 0,\n idle: 10000,\n acquire: 10000\n }\n});\n\n// establish mysql connection\nsequelize.authenticate().then(function () {\n logger.info('Sequelize has established mysql connection successfully.');\n}).catch(function (err) {\n logger.error('Sequelize was unable to connect to the database:', err);\n});\n\n// manually add each model to the db object\nvar Certificate = __webpack_require__(62);\nvar Channel = __webpack_require__(63);\nvar Claim = __webpack_require__(64);\nvar File = __webpack_require__(65);\nvar Request = __webpack_require__(66);\nvar User = __webpack_require__(67);\ndb['Certificate'] = sequelize.import('Certificate', Certificate);\ndb['Channel'] = sequelize.import('Channel', Channel);\ndb['Claim'] = sequelize.import('Claim', Claim);\ndb['File'] = sequelize.import('File', File);\ndb['Request'] = sequelize.import('Request', Request);\ndb['User'] = sequelize.import('User', User);\n\n// run model.association for each model in the db object that has an association\nObject.keys(db).forEach(function (modelName) {\n if (db[modelName].associate) {\n logger.info('Associating model:', modelName);\n db[modelName].associate(db);\n }\n});\n\ndb.sequelize = sequelize;\ndb.Sequelize = Sequelize;\n\n// add an 'upsert' method to the db object\ndb.upsert = function (Model, values, condition, tableName) {\n return Model.findOne({\n where: condition\n }).then(function (obj) {\n if (obj) {\n // update\n logger.debug('updating record in db.' + tableName);\n return obj.update(values);\n } else {\n // insert\n logger.debug('creating record in db.' + tableName);\n return Model.create(values);\n }\n }).catch(function (error) {\n logger.error(tableName + '.upsert error', error);\n throw error;\n });\n};\n\nmodule.exports = db;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _channel = __webpack_require__(19);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(88);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n site = _ref.site;\n\n return {\n channelName: channel.loggedInChannel.name,\n channelShortId: channel.loggedInChannel.shortId,\n channelLongId: channel.loggedInChannel.longId,\n siteDescription: site.description\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onChannelLogin: function onChannelLogin(name, shortId, longId) {\n dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));\n dispatch((0, _publish.updateSelectedChannel)(name));\n },\n onChannelLogout: function onChannelLogout() {\n dispatch((0, _channel.updateLoggedInChannel)(null, null, null));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.onHandleShowPageUri = onHandleShowPageUri;\nexports.onRequestError = onRequestError;\nexports.onNewChannelRequest = onNewChannelRequest;\nexports.onNewAssetRequest = onNewAssetRequest;\nexports.onRequestUpdate = onRequestUpdate;\nexports.addRequestToRequestList = addRequestToRequestList;\nexports.addAssetToAssetList = addAssetToAssetList;\nexports.addNewChannelToChannelList = addNewChannelToChannelList;\nexports.onUpdateChannelClaims = onUpdateChannelClaims;\nexports.updateChannelClaims = updateChannelClaims;\nexports.fileRequested = fileRequested;\nexports.updateFileAvailability = updateFileAvailability;\nexports.updateDisplayAssetError = updateDisplayAssetError;\n\nvar _show_action_types = __webpack_require__(12);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show_request_types = __webpack_require__(41);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// basic request parsing\nfunction onHandleShowPageUri(params) {\n return {\n type: actions.HANDLE_SHOW_URI,\n data: params\n };\n};\n\nfunction onRequestError(error) {\n return {\n type: actions.REQUEST_ERROR,\n data: error\n };\n};\n\nfunction onNewChannelRequest(channelName, channelId) {\n var requestType = _show_request_types.CHANNEL;\n var requestId = 'cr#' + channelName + '#' + channelId;\n return {\n type: actions.CHANNEL_REQUEST_NEW,\n data: { requestType: requestType, requestId: requestId, channelName: channelName, channelId: channelId }\n };\n};\n\nfunction onNewAssetRequest(name, id, channelName, channelId, extension) {\n var requestType = extension ? _show_request_types.ASSET_LITE : _show_request_types.ASSET_DETAILS;\n var requestId = 'ar#' + name + '#' + id + '#' + channelName + '#' + channelId;\n return {\n type: actions.ASSET_REQUEST_NEW,\n data: {\n requestType: requestType,\n requestId: requestId,\n name: name,\n modifier: {\n id: id,\n channel: {\n name: channelName,\n id: channelId\n }\n }\n }\n };\n};\n\nfunction onRequestUpdate(requestType, requestId) {\n return {\n type: actions.REQUEST_UPDATE,\n data: {\n requestType: requestType,\n requestId: requestId\n }\n };\n};\n\nfunction addRequestToRequestList(id, error, key) {\n return {\n type: actions.REQUEST_LIST_ADD,\n data: { id: id, error: error, key: key }\n };\n};\n\n// asset actions\n\nfunction addAssetToAssetList(id, error, name, claimId, shortId, claimData) {\n return {\n type: actions.ASSET_ADD,\n data: { id: id, error: error, name: name, claimId: claimId, shortId: shortId, claimData: claimData }\n };\n}\n\n// channel actions\n\nfunction addNewChannelToChannelList(id, name, shortId, longId, claimsData) {\n return {\n type: actions.CHANNEL_ADD,\n data: { id: id, name: name, shortId: shortId, longId: longId, claimsData: claimsData }\n };\n};\n\nfunction onUpdateChannelClaims(channelKey, name, longId, page) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_ASYNC,\n data: { channelKey: channelKey, name: name, longId: longId, page: page }\n };\n};\n\nfunction updateChannelClaims(channelListId, claimsData) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_SUCCESS,\n data: { channelListId: channelListId, claimsData: claimsData }\n };\n};\n\n// display a file\n\nfunction fileRequested(name, claimId) {\n return {\n type: actions.FILE_REQUESTED,\n data: { name: name, claimId: claimId }\n };\n};\n\nfunction updateFileAvailability(status) {\n return {\n type: actions.FILE_AVAILABILITY_UPDATE,\n data: status\n };\n};\n\nfunction updateDisplayAssetError(error) {\n return {\n type: actions.DISPLAY_ASSET_ERROR,\n data: error\n };\n};\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(84);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var site = _ref.site;\n var defaultDescription = site.defaultDescription,\n defaultThumbnail = site.defaultThumbnail,\n siteDescription = site.description,\n siteHost = site.host,\n siteTitle = site.title,\n siteTwitter = site.twitter;\n\n return {\n defaultDescription: defaultDescription,\n defaultThumbnail: defaultThumbnail,\n siteDescription: siteDescription,\n siteHost: siteHost,\n siteTitle: siteTitle,\n siteTwitter: siteTwitter\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"prop-types\");\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = request;\n\n__webpack_require__(91);\n\n/**\n * Parses the JSON returned by a network request\n *\n * @param {object} response A response from a network request\n *\n * @return {object} The parsed JSON from the request\n */\nfunction parseJSON(response) {\n if (response.status === 204 || response.status === 205) {\n return null;\n }\n return response.json();\n}\n\n/**\n * Parses the status returned by a network request\n *\n * @param {object} response A response from a network request\n * @param {object} response The parsed JSON from the network request\n *\n * @return {object | undefined} Returns object with status and statusText, or undefined\n */\nfunction checkStatus(response, jsonResponse) {\n if (response.status >= 200 && response.status < 300) {\n return jsonResponse;\n }\n var error = new Error(jsonResponse.message);\n error.response = response;\n throw error;\n}\n\n/**\n * Requests a URL, returning a promise\n *\n * @param {string} url The URL we want to request\n * @param {object} [options] The options we want to pass to \"fetch\"\n *\n * @return {object} The response data\n */\n\nfunction request(url, options) {\n return fetch(url, options).then(function (response) {\n return Promise.all([response, parseJSON(response)]);\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n response = _ref2[0],\n jsonResponse = _ref2[1];\n\n return checkStatus(response, jsonResponse);\n });\n}\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// request actions\nvar HANDLE_SHOW_URI = exports.HANDLE_SHOW_URI = 'HANDLE_SHOW_URI';\nvar REQUEST_ERROR = exports.REQUEST_ERROR = 'REQUEST_ERROR';\nvar REQUEST_UPDATE = exports.REQUEST_UPDATE = 'REQUEST_UPDATE';\nvar ASSET_REQUEST_NEW = exports.ASSET_REQUEST_NEW = 'ASSET_REQUEST_NEW';\nvar CHANNEL_REQUEST_NEW = exports.CHANNEL_REQUEST_NEW = 'CHANNEL_REQUEST_NEW';\nvar REQUEST_LIST_ADD = exports.REQUEST_LIST_ADD = 'REQUEST_LIST_ADD';\n\n// asset actions\nvar ASSET_ADD = exports.ASSET_ADD = 'ASSET_ADD';\n\n// channel actions\nvar CHANNEL_ADD = exports.CHANNEL_ADD = 'CHANNEL_ADD';\n\nvar CHANNEL_CLAIMS_UPDATE_ASYNC = exports.CHANNEL_CLAIMS_UPDATE_ASYNC = 'CHANNEL_CLAIMS_UPDATE_ASYNC';\nvar CHANNEL_CLAIMS_UPDATE_SUCCESS = exports.CHANNEL_CLAIMS_UPDATE_SUCCESS = 'CHANNEL_CLAIMS_UPDATE_SUCCESS';\n\n// asset/file display actions\nvar FILE_REQUESTED = exports.FILE_REQUESTED = 'FILE_REQUESTED';\nvar FILE_AVAILABILITY_UPDATE = exports.FILE_AVAILABILITY_UPDATE = 'FILE_AVAILABILITY_UPDATE';\nvar DISPLAY_ASSET_ERROR = exports.DISPLAY_ASSET_ERROR = 'DISPLAY_ASSET_ERROR';\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar selectAsset = exports.selectAsset = function selectAsset(show) {\n var request = show.requestList[show.request.id];\n var assetKey = request.key;\n return show.assetList[assetKey];\n};\n\nvar selectShowState = exports.selectShowState = function selectShowState(state) {\n return state.show;\n};\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-helmet\");\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"redux-saga/effects\");\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar axios = __webpack_require__(58);\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(59),\n _require$api = _require.api,\n apiHost = _require$api.apiHost,\n apiPort = _require$api.apiPort;\n\nvar lbryApiUri = 'http://' + apiHost + ':' + apiPort;\n\nvar _require2 = __webpack_require__(17),\n chooseGaLbrynetPublishLabel = _require2.chooseGaLbrynetPublishLabel,\n sendGATimingEvent = _require2.sendGATimingEvent;\n\nvar handleLbrynetResponse = function handleLbrynetResponse(_ref, resolve, reject) {\n var data = _ref.data;\n\n logger.debug('lbry api data:', data);\n if (data.result) {\n // check for an error\n if (data.result.error) {\n logger.debug('Lbrynet api error:', data.result.error);\n reject(new Error(data.result.error));\n return;\n };\n resolve(data.result);\n return;\n }\n // fallback in case it just timed out\n reject(JSON.stringify(data));\n};\n\nmodule.exports = {\n publishClaim: function publishClaim(publishParams) {\n logger.debug('lbryApi >> Publishing claim to \"' + publishParams.name + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'publish',\n params: publishParams\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'publish', chooseGaLbrynetPublishLabel(publishParams), gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getClaim: function getClaim(uri) {\n logger.debug('lbryApi >> Getting Claim for \"' + uri + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'get',\n params: { uri: uri, timeout: 20 }\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'getClaim', 'GET', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getClaimList: function getClaimList(claimName) {\n logger.debug('lbryApi >> Getting claim_list for \"' + claimName + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'claim_list',\n params: { name: claimName }\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'getClaimList', 'CLAIM_LIST', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n resolveUri: function resolveUri(uri) {\n logger.debug('lbryApi >> Resolving URI for \"' + uri + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'resolve',\n params: { uri: uri }\n }).then(function (_ref2) {\n var data = _ref2.data;\n\n sendGATimingEvent('lbrynet', 'resolveUri', 'RESOLVE', gaStartTime, Date.now());\n if (data.result[uri].error) {\n // check for errors\n reject(data.result[uri].error);\n } else {\n // if no errors, resolve\n resolve(data.result[uri]);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getDownloadDirectory: function getDownloadDirectory() {\n logger.debug('lbryApi >> Retrieving the download directory path from lbry daemon...');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'settings_get'\n }).then(function (_ref3) {\n var data = _ref3.data;\n\n sendGATimingEvent('lbrynet', 'getDownloadDirectory', 'SETTINGS_GET', gaStartTime, Date.now());\n if (data.result) {\n resolve(data.result.download_directory);\n } else {\n return new Error('Successfully connected to lbry daemon, but unable to retrieve the download directory.');\n }\n }).catch(function (error) {\n logger.error('Lbrynet Error:', error);\n resolve('/home/lbry/Downloads/');\n });\n });\n },\n createChannel: function createChannel(name) {\n logger.debug('lbryApi >> Creating channel for ' + name + '...');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'channel_new',\n params: {\n channel_name: name,\n amount: 0.1\n }\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'createChannel', 'CHANNEL_NEW', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n }\n};\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\nvar ua = __webpack_require__(60);\n\nvar _require = __webpack_require__(5),\n googleId = _require.analytics.googleId,\n title = _require.details.title;\n\nfunction createServeEventParams(headers, ip, originalUrl) {\n return {\n eventCategory: 'client requests',\n eventAction: 'serve request',\n eventLabel: originalUrl,\n ipOverride: ip,\n userAgentOverride: headers['user-agent']\n };\n};\n\nfunction createPublishTimingEventParams(category, variable, label, startTime, endTime) {\n var duration = endTime - startTime;\n return {\n userTimingCategory: category,\n userTimingVariableName: variable,\n userTimingTime: duration,\n userTimingLabel: label\n };\n};\n\nfunction sendGoogleAnalyticsEvent(ip, params) {\n var visitorId = ip.replace(/\\./g, '-');\n var visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.event(params, function (err) {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n });\n};\n\nfunction sendGoogleAnalyticsTiming(visitorId, params) {\n var visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.timing(params, function (err) {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n logger.debug('Timing event successfully sent to google analytics');\n });\n};\n\nmodule.exports = {\n sendGAServeEvent: function sendGAServeEvent(headers, ip, originalUrl) {\n var params = createServeEventParams(headers, ip, originalUrl);\n sendGoogleAnalyticsEvent(ip, params);\n },\n sendGATimingEvent: function sendGATimingEvent(category, variable, label, startTime, endTime) {\n var params = createPublishTimingEventParams(category, variable, label, startTime, endTime);\n sendGoogleAnalyticsTiming(title, params);\n },\n chooseGaLbrynetPublishLabel: function chooseGaLbrynetPublishLabel(_ref) {\n var channelName = _ref.channel_name,\n channelId = _ref.channel_id;\n\n return channelName || channelId ? 'PUBLISH_IN_CHANNEL_CLAIM' : 'PUBLISH_ANONYMOUS_CLAIM';\n }\n};\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"redux\");\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.updateLoggedInChannel = updateLoggedInChannel;\n\nvar _channel_action_types = __webpack_require__(34);\n\nvar actions = _interopRequireWildcard(_channel_action_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// export action creators\n\nfunction updateLoggedInChannel(name, shortId, longId) {\n return {\n type: actions.CHANNEL_UPDATE,\n data: {\n name: name,\n shortId: shortId,\n longId: longId\n }\n };\n};\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _ActiveStatusBar = __webpack_require__(113);\n\nvar _ActiveStatusBar2 = _interopRequireDefault(_ActiveStatusBar);\n\nvar _InactiveStatusBar = __webpack_require__(114);\n\nvar _InactiveStatusBar2 = _interopRequireDefault(_InactiveStatusBar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ProgressBar = function (_React$Component) {\n _inherits(ProgressBar, _React$Component);\n\n function ProgressBar(props) {\n _classCallCheck(this, ProgressBar);\n\n var _this = _possibleConstructorReturn(this, (ProgressBar.__proto__ || Object.getPrototypeOf(ProgressBar)).call(this, props));\n\n _this.state = {\n bars: [],\n index: 0,\n incrementer: 1\n };\n _this.createBars = _this.createBars.bind(_this);\n _this.startProgressBar = _this.startProgressBar.bind(_this);\n _this.updateProgressBar = _this.updateProgressBar.bind(_this);\n _this.stopProgressBar = _this.stopProgressBar.bind(_this);\n return _this;\n }\n\n _createClass(ProgressBar, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.createBars();\n this.startProgressBar();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.stopProgressBar();\n }\n }, {\n key: 'createBars',\n value: function createBars() {\n var bars = [];\n for (var i = 0; i <= this.props.size; i++) {\n bars.push({ isActive: false });\n }\n this.setState({ bars: bars });\n }\n }, {\n key: 'startProgressBar',\n value: function startProgressBar() {\n this.updateInterval = setInterval(this.updateProgressBar.bind(this), 300);\n }\n }, {\n key: 'updateProgressBar',\n value: function updateProgressBar() {\n var index = this.state.index;\n var incrementer = this.state.incrementer;\n var bars = this.state.bars;\n // flip incrementer if necessary, to stay in bounds\n if (index < 0 || index > this.props.size) {\n incrementer = incrementer * -1;\n index += incrementer;\n }\n // update the indexed bar\n if (incrementer > 0) {\n bars[index].isActive = true;\n } else {\n bars[index].isActive = false;\n };\n // increment index\n index += incrementer;\n // update state\n this.setState({\n bars: bars,\n incrementer: incrementer,\n index: index\n });\n }\n }, {\n key: 'stopProgressBar',\n value: function stopProgressBar() {\n clearInterval(this.updateInterval);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n this.state.bars.map(function (bar, index) {\n return bar.isActive ? _react2.default.createElement(_ActiveStatusBar2.default, { key: index }) : _react2.default.createElement(_InactiveStatusBar2.default, { key: index });\n })\n );\n }\n }]);\n\n return ProgressBar;\n}(_react2.default.Component);\n\n;\n\nProgressBar.propTypes = {\n size: _propTypes2.default.number.isRequired\n};\n\nexports.default = ProgressBar;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ErrorPage = function (_React$Component) {\n _inherits(ErrorPage, _React$Component);\n\n function ErrorPage() {\n _classCallCheck(this, ErrorPage);\n\n return _possibleConstructorReturn(this, (ErrorPage.__proto__ || Object.getPrototypeOf(ErrorPage)).apply(this, arguments));\n }\n\n _createClass(ErrorPage, [{\n key: 'render',\n value: function render() {\n var error = this.props.error;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'p',\n null,\n error\n )\n )\n );\n }\n }]);\n\n return ErrorPage;\n}(_react2.default.Component);\n\n;\n\nErrorPage.propTypes = {\n error: _propTypes2.default.string.isRequired\n};\n\nexports.default = ErrorPage;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"passport\");\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"passport-local\");\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"sequelize\");\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = {\n returnShortId: function returnShortId(claimsArray, longId) {\n var claimIndex = void 0;\n var shortId = longId.substring(0, 1); // default short id is the first letter\n var shortIdLength = 0;\n // find the index of this claim id\n claimIndex = claimsArray.findIndex(function (element) {\n return element.claimId === longId;\n });\n if (claimIndex < 0) {\n throw new Error('claim id not found in claims list');\n }\n // get an array of all claims with lower height\n var possibleMatches = claimsArray.slice(0, claimIndex);\n // remove certificates with the same prefixes until none are left.\n while (possibleMatches.length > 0) {\n shortIdLength += 1;\n shortId = longId.substring(0, shortIdLength);\n possibleMatches = possibleMatches.filter(function (element) {\n return element.claimId && element.claimId.substring(0, shortIdLength) === shortId;\n });\n }\n return shortId;\n }\n};\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\nvar fs = __webpack_require__(74);\n\nvar _require = __webpack_require__(5),\n details = _require.details,\n publishing = _require.publishing;\n\nmodule.exports = {\n parsePublishApiRequestBody: function parsePublishApiRequestBody(_ref) {\n var name = _ref.name,\n nsfw = _ref.nsfw,\n license = _ref.license,\n title = _ref.title,\n description = _ref.description,\n thumbnail = _ref.thumbnail;\n\n // validate name\n if (!name) {\n throw new Error('no name field found in request');\n }\n var invalidNameCharacters = /[^A-Za-z0-9,-]/.exec(name);\n if (invalidNameCharacters) {\n throw new Error('The claim name you provided is not allowed. Only the following characters are allowed: A-Z, a-z, 0-9, and \"-\"');\n }\n // optional parameters\n nsfw = nsfw === 'true';\n license = license || null;\n title = title || null;\n description = description || null;\n thumbnail = thumbnail || null;\n // return results\n return {\n name: name,\n nsfw: nsfw,\n license: license,\n title: title,\n description: description,\n thumbnail: thumbnail\n };\n },\n parsePublishApiRequestFiles: function parsePublishApiRequestFiles(_ref2) {\n var file = _ref2.file,\n thumbnail = _ref2.thumbnail;\n\n // make sure a file was provided\n if (!file) {\n throw new Error('no file with key of [file] found in request');\n }\n if (!file.path) {\n throw new Error('no file path found');\n }\n if (!file.type) {\n throw new Error('no file type found');\n }\n if (!file.size) {\n throw new Error('no file type found');\n }\n // validate the file name\n if (/'/.test(file.name)) {\n throw new Error('apostrophes are not allowed in the file name');\n }\n // validate the file\n module.exports.validateFileTypeAndSize(file);\n // return results\n return {\n fileName: file.name,\n filePath: file.path,\n fileType: file.type,\n thumbnailFileName: thumbnail ? thumbnail.name : null,\n thumbnailFilePath: thumbnail ? thumbnail.path : null,\n thumbnailFileType: thumbnail ? thumbnail.type : null\n };\n },\n validateFileTypeAndSize: function validateFileTypeAndSize(file) {\n // check file type and size\n switch (file.type) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n if (file.size > 10000000) {\n logger.debug('publish > file validation > .jpeg/.jpg/.png was too big');\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .gif was too big');\n throw new Error('Sorry, .gifs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .mp4 was too big');\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n logger.debug('publish > file validation > unrecognized file type');\n throw new Error('The ' + file.type + ' content type is not supported. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n return file;\n },\n createBasicPublishParams: function createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail) {\n logger.debug('Creating Publish Parameters');\n // provide defaults for title\n if (title === null || title.trim() === '') {\n title = name;\n }\n // provide default for description\n if (description === null || description.trim() === '') {\n description = '';\n }\n // provide default for license\n if (license === null || license.trim() === '') {\n license = ' '; // default to empty string\n }\n // create the publish params\n var publishParams = {\n name: name,\n file_path: filePath,\n bid: 0.01,\n metadata: {\n description: description,\n title: title,\n author: details.title,\n language: 'en',\n license: license,\n nsfw: nsfw\n },\n claim_address: publishing.primaryClaimAddress\n };\n // add thumbnail to channel if video\n if (thumbnail) {\n publishParams['metadata']['thumbnail'] = thumbnail;\n }\n return publishParams;\n },\n createThumbnailPublishParams: function createThumbnailPublishParams(thumbnailFilePath, claimName, license, nsfw) {\n if (!thumbnailFilePath) {\n return;\n }\n logger.debug('Creating Thumbnail Publish Parameters');\n // create the publish params\n return {\n name: claimName + '-thumb',\n file_path: thumbnailFilePath,\n bid: 0.01,\n metadata: {\n title: claimName + ' thumbnail',\n description: 'a thumbnail for ' + claimName,\n author: details.title,\n language: 'en',\n license: license,\n nsfw: nsfw\n },\n claim_address: publishing.primaryClaimAddress,\n channel_name: publishing.thumbnailChannel,\n channel_id: publishing.thumbnailChannelId\n };\n },\n deleteTemporaryFile: function deleteTemporaryFile(filePath) {\n fs.unlink(filePath, function (err) {\n if (err) {\n logger.error('error deleting temporary file ' + filePath);\n throw err;\n }\n logger.debug('successfully deleted ' + filePath);\n });\n },\n addGetResultsToFileData: function addGetResultsToFileData(fileInfo, getResult) {\n fileInfo.fileName = getResult.file_name;\n fileInfo.filePath = getResult.download_path;\n return fileInfo;\n },\n createFileData: function createFileData(_ref3) {\n var name = _ref3.name,\n claimId = _ref3.claimId,\n outpoint = _ref3.outpoint,\n height = _ref3.height,\n address = _ref3.address,\n nsfw = _ref3.nsfw,\n contentType = _ref3.contentType;\n\n return {\n name: name,\n claimId: claimId,\n outpoint: outpoint,\n height: height,\n address: address,\n fileName: '',\n filePath: '',\n fileType: contentType,\n nsfw: nsfw\n };\n }\n};\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n handleErrorResponse: function handleErrorResponse(originalUrl, ip, error, res) {\n logger.error('Error on ' + originalUrl, module.exports.useObjectPropertiesIfNoKeys(error));\n\n var _module$exports$retur = module.exports.returnErrorMessageAndStatus(error),\n _module$exports$retur2 = _slicedToArray(_module$exports$retur, 2),\n status = _module$exports$retur2[0],\n message = _module$exports$retur2[1];\n\n res.status(status).json(module.exports.createErrorResponsePayload(status, message));\n },\n returnErrorMessageAndStatus: function returnErrorMessageAndStatus(error) {\n var status = void 0,\n message = void 0;\n // check for daemon being turned off\n if (error.code === 'ECONNREFUSED') {\n status = 503;\n message = 'Connection refused. The daemon may not be running.';\n // fallback for everything else\n } else {\n status = 400;\n if (error.message) {\n message = error.message;\n } else {\n message = error;\n };\n };\n return [status, message];\n },\n useObjectPropertiesIfNoKeys: function useObjectPropertiesIfNoKeys(err) {\n if (Object.keys(err).length === 0) {\n var newErrorObject = {};\n Object.getOwnPropertyNames(err).forEach(function (key) {\n newErrorObject[key] = err[key];\n });\n return newErrorObject;\n }\n return err;\n },\n createErrorResponsePayload: function createErrorResponsePayload(status, message) {\n return {\n status: status,\n success: false,\n message: message\n };\n }\n};\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar db = __webpack_require__(6);\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(76),\n returnPaginatedChannelClaims = _require.returnPaginatedChannelClaims;\n\nvar NO_CHANNEL = 'NO_CHANNEL';\nvar NO_CLAIM = 'NO_CLAIM';\nvar NO_FILE = 'NO_FILE';\n\nmodule.exports = {\n getClaimId: function getClaimId(channelName, channelClaimId, name, claimId) {\n if (channelName) {\n return module.exports.getClaimIdByChannel(channelName, channelClaimId, name);\n } else {\n return module.exports.getClaimIdByClaim(name, claimId);\n }\n },\n getClaimIdByClaim: function getClaimIdByClaim(claimName, claimId) {\n logger.debug('getClaimIdByClaim(' + claimName + ', ' + claimId + ')');\n return new Promise(function (resolve, reject) {\n db.Claim.getLongClaimId(claimName, claimId).then(function (longClaimId) {\n if (!longClaimId) {\n resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getClaimIdByChannel: function getClaimIdByChannel(channelName, channelClaimId, claimName) {\n logger.debug('getClaimIdByChannel(' + channelName + ', ' + channelClaimId + ', ' + claimName + ')');\n return new Promise(function (resolve, reject) {\n db.Certificate.getLongChannelId(channelName, channelClaimId) // 1. get the long channel id\n .then(function (longChannelId) {\n if (!longChannelId) {\n return [null, null];\n }\n return Promise.all([longChannelId, db.Claim.getClaimIdByLongChannelId(longChannelId, claimName)]); // 2. get the long claim id\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n longChannelId = _ref2[0],\n longClaimId = _ref2[1];\n\n if (!longChannelId) {\n return resolve(NO_CHANNEL);\n }\n if (!longClaimId) {\n return resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getChannelData: function getChannelData(channelName, channelClaimId, page) {\n return new Promise(function (resolve, reject) {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId).then(function (longChannelClaimId) {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Certificate.getShortChannelIdFromLongChannelId(longChannelClaimId, channelName)]);\n }).then(function (_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n longChannelClaimId = _ref4[0],\n shortChannelClaimId = _ref4[1];\n\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. return all the channel information\n resolve({\n channelName: channelName,\n longChannelClaimId: longChannelClaimId,\n shortChannelClaimId: shortChannelClaimId\n });\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getChannelClaims: function getChannelClaims(channelName, channelClaimId, page) {\n return new Promise(function (resolve, reject) {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId).then(function (longChannelClaimId) {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Claim.getAllChannelClaims(longChannelClaimId)]);\n }).then(function (_ref5) {\n var _ref6 = _slicedToArray(_ref5, 2),\n longChannelClaimId = _ref6[0],\n channelClaimsArray = _ref6[1];\n\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. format the data for the view, including pagination\n var paginatedChannelViewData = returnPaginatedChannelClaims(channelName, longChannelClaimId, channelClaimsArray, page);\n // 4. return all the channel information and contents\n resolve(paginatedChannelViewData);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getLocalFileRecord: function getLocalFileRecord(claimId, name) {\n return db.File.findOne({ where: { claimId: claimId, name: name } }).then(function (file) {\n if (!file) {\n return NO_FILE;\n }\n return file.dataValues;\n });\n }\n};\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _server = __webpack_require__(30);\n\nvar _redux = __webpack_require__(18);\n\nvar _index = __webpack_require__(31);\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _index3 = __webpack_require__(36);\n\nvar _index4 = _interopRequireDefault(_index3);\n\nvar _app = __webpack_require__(37);\n\nvar _app2 = _interopRequireDefault(_app);\n\nvar _renderFullPage = __webpack_require__(43);\n\nvar _renderFullPage2 = _interopRequireDefault(_renderFullPage);\n\nvar _reactHelmet = __webpack_require__(14);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = function (req, res) {\n var context = {};\n\n // create a new Redux store instance\n var store = (0, _redux.createStore)(_index2.default);\n\n // render component to a string\n var html = (0, _server.renderToString)(_react2.default.createElement(\n _reactRedux.Provider,\n { store: store },\n _react2.default.createElement(\n _reactRouterDom.StaticRouter,\n { location: req.url, context: context },\n _react2.default.createElement(\n _index4.default,\n null,\n _react2.default.createElement(_app2.default, null)\n )\n )\n ));\n\n // get head tags from helmet\n var helmet = _reactHelmet2.default.renderStatic();\n\n // check for a redirect\n if (context.url) {\n // Somewhere a `` was rendered\n return res.redirect(301, context.url);\n } else {}\n // we're good, send the response\n\n\n // get the initial state from our Redux store\n var preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send((0, _renderFullPage2.default)(helmet, html, preloadedState));\n};\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-dom/server\");\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _redux = __webpack_require__(18);\n\nvar _publish = __webpack_require__(78);\n\nvar _publish2 = _interopRequireDefault(_publish);\n\nvar _channel = __webpack_require__(79);\n\nvar _channel2 = _interopRequireDefault(_channel);\n\nvar _show = __webpack_require__(80);\n\nvar _show2 = _interopRequireDefault(_show);\n\nvar _site = __webpack_require__(81);\n\nvar _site2 = _interopRequireDefault(_site);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = (0, _redux.combineReducers)({\n channel: _channel2.default,\n publish: _publish2.default,\n show: _show2.default,\n site: _site2.default\n});\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar FILE_SELECTED = exports.FILE_SELECTED = 'FILE_SELECTED';\nvar FILE_CLEAR = exports.FILE_CLEAR = 'FILE_CLEAR';\nvar METADATA_UPDATE = exports.METADATA_UPDATE = 'METADATA_UPDATE';\nvar CLAIM_UPDATE = exports.CLAIM_UPDATE = 'CLAIM_UPDATE';\nvar SET_PUBLISH_IN_CHANNEL = exports.SET_PUBLISH_IN_CHANNEL = 'SET_PUBLISH_IN_CHANNEL';\nvar PUBLISH_STATUS_UPDATE = exports.PUBLISH_STATUS_UPDATE = 'PUBLISH_STATUS_UPDATE';\nvar ERROR_UPDATE = exports.ERROR_UPDATE = 'ERROR_UPDATE';\nvar SELECTED_CHANNEL_UPDATE = exports.SELECTED_CHANNEL_UPDATE = 'SELECTED_CHANNEL_UPDATE';\nvar TOGGLE_METADATA_INPUTS = exports.TOGGLE_METADATA_INPUTS = 'TOGGLE_METADATA_INPUTS';\nvar THUMBNAIL_NEW = exports.THUMBNAIL_NEW = 'THUMBNAIL_NEW';\nvar PUBLISH_START = exports.PUBLISH_START = 'PUBLISH_START';\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LOGIN = exports.LOGIN = 'Existing';\nvar CREATE = exports.CREATE = 'New';\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CHANNEL_UPDATE = exports.CHANNEL_UPDATE = 'CHANNEL_UPDATE';\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LOCAL_CHECK = exports.LOCAL_CHECK = 'LOCAL_CHECK';\nvar UNAVAILABLE = exports.UNAVAILABLE = 'UNAVAILABLE';\nvar ERROR = exports.ERROR = 'ERROR';\nvar AVAILABLE = exports.AVAILABLE = 'AVAILABLE';\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactGa = __webpack_require__(82);\n\nvar _reactGa2 = _interopRequireDefault(_reactGa);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(5),\n googleId = _require.analytics.googleId;\n\n_reactGa2.default.initialize(googleId);\n\nvar GAListener = function (_React$Component) {\n _inherits(GAListener, _React$Component);\n\n function GAListener() {\n _classCallCheck(this, GAListener);\n\n return _possibleConstructorReturn(this, (GAListener.__proto__ || Object.getPrototypeOf(GAListener)).apply(this, arguments));\n }\n\n _createClass(GAListener, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.sendPageView(this.props.history.location);\n this.props.history.listen(this.sendPageView);\n }\n }, {\n key: 'sendPageView',\n value: function sendPageView(location) {\n _reactGa2.default.set({ page: location.pathname });\n _reactGa2.default.pageview(location.pathname);\n }\n }, {\n key: 'render',\n value: function render() {\n return this.props.children;\n }\n }]);\n\n return GAListener;\n}(_react2.default.Component);\n\nexports.default = (0, _reactRouterDom.withRouter)(GAListener);\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _HomePage = __webpack_require__(83);\n\nvar _HomePage2 = _interopRequireDefault(_HomePage);\n\nvar _AboutPage = __webpack_require__(120);\n\nvar _AboutPage2 = _interopRequireDefault(_AboutPage);\n\nvar _LoginPage = __webpack_require__(121);\n\nvar _LoginPage2 = _interopRequireDefault(_LoginPage);\n\nvar _ShowPage = __webpack_require__(123);\n\nvar _ShowPage2 = _interopRequireDefault(_ShowPage);\n\nvar _FourOhFourPage = __webpack_require__(140);\n\nvar _FourOhFourPage2 = _interopRequireDefault(_FourOhFourPage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// or use the provided local homepage\nvar App = function App() {\n return _react2.default.createElement(\n _reactRouterDom.Switch,\n null,\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/', component: _HomePage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/about', component: _AboutPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/login', component: _LoginPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/:identifier/:claim', component: _ShowPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/:claim', component: _ShowPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { component: _FourOhFourPage2.default })\n );\n};\n\nexports.default = App;\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(94);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n file: publish.file,\n thumbnail: publish.thumbnail,\n fileError: publish.error.file\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n selectFile: function selectFile(file) {\n dispatch((0, _publish.selectFile)(file));\n },\n setFileError: function setFileError(value) {\n dispatch((0, _publish.clearFile)());\n dispatch((0, _publish.updateError)('file', value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _channel = __webpack_require__(19);\n\nvar _view = __webpack_require__(111);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _publish = __webpack_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onChannelLogin: function onChannelLogin(name, shortId, longId) {\n dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));\n dispatch((0, _publish.updateSelectedChannel)(name));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(null, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _channel = __webpack_require__(19);\n\nvar _view = __webpack_require__(112);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _publish = __webpack_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onChannelLogin: function onChannelLogin(name, shortId, longId) {\n dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));\n dispatch((0, _publish.updateSelectedChannel)(name));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(null, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CHANNEL = exports.CHANNEL = 'CHANNEL';\nvar ASSET_LITE = exports.ASSET_LITE = 'ASSET_LITE';\nvar ASSET_DETAILS = exports.ASSET_DETAILS = 'ASSET_DETAILS';\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(127);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _show = __webpack_require__(8);\n\nvar _show2 = __webpack_require__(13);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select error and status\n var error = show.displayAsset.error;\n var status = show.displayAsset.status;\n // select asset\n var asset = (0, _show2.selectAsset)(show);\n // return props\n return {\n error: error,\n status: status,\n asset: asset\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onFileRequest: function onFileRequest(name, claimId) {\n dispatch((0, _show.fileRequested)(name, claimId));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (helmet, html, preloadedState) {\n // take the html and preloadedState and return the full page\n return '\\n \\n \\n \\n \\n \\n \\n \\n ' + helmet.title.toString() + '\\n ' + helmet.meta.toString() + '\\n ' + helmet.link.toString() + '\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
' + html + '
\\n
\\n \\n \\n \\n \\n ';\n};\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar selectSiteState = exports.selectSiteState = function selectSiteState(state) {\n return state.site;\n};\n\nvar selectSiteHost = exports.selectSiteHost = function selectSiteHost(state) {\n return state.site.host;\n};\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(46);\n__webpack_require__(47);\nmodule.exports = __webpack_require__(48);\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"babel-polyfill\");\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"whatwg-fetch\");\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// app dependencies\nvar express = __webpack_require__(49);\nvar bodyParser = __webpack_require__(50);\nvar expressHandlebars = __webpack_require__(51);\nvar Handlebars = __webpack_require__(52);\nvar helmet = __webpack_require__(53);\nvar passport = __webpack_require__(22);\n\nvar _require = __webpack_require__(54),\n serializeSpeechUser = _require.serializeSpeechUser,\n deserializeSpeechUser = _require.deserializeSpeechUser;\n\nvar cookieSession = __webpack_require__(55);\nvar http = __webpack_require__(56);\n// logging dependencies\nvar logger = __webpack_require__(2);\n\nvar _require2 = __webpack_require__(5),\n sessionKey = _require2.auth.sessionKey,\n PORT = _require2.details.port;\n\n// create an Express application\n\n\nvar app = express();\n\n// trust the proxy to get ip address for us\napp.enable('trust proxy');\n\n// add middleware\napp.use(helmet()); // set HTTP headers to protect against well-known web vulnerabilties\napp.use(express.static(__dirname + '/public')); // 'express.static' to serve static files from public directory\napp.use(bodyParser.json()); // 'body parser' for parsing application/json\napp.use(bodyParser.urlencoded({ extended: true })); // 'body parser' for parsing application/x-www-form-urlencoded\napp.use(function (req, res, next) {\n // custom logging middleware to log all incoming http requests\n logger.verbose('Request on ' + req.originalUrl + ' from ' + req.ip);\n next();\n});\n\n// configure passport\npassport.serializeUser(serializeSpeechUser);\npassport.deserializeUser(deserializeSpeechUser);\nvar localSignupStrategy = __webpack_require__(57);\nvar localLoginStrategy = __webpack_require__(69);\npassport.use('local-signup', localSignupStrategy);\npassport.use('local-login', localLoginStrategy);\n// initialize passport\napp.use(cookieSession({\n name: 'session',\n keys: [sessionKey],\n maxAge: 24 * 60 * 60 * 1000 // i.e. 24 hours\n}));\napp.use(passport.initialize());\napp.use(passport.session());\n\n// configure handlebars & register it with express app\nvar hbs = expressHandlebars.create({\n defaultLayout: 'embed',\n handlebars: Handlebars\n});\napp.engine('handlebars', hbs.engine);\napp.set('view engine', 'handlebars');\n\n// set the routes on the app\n__webpack_require__(70)(app);\n__webpack_require__(71)(app);\n__webpack_require__(77)(app);\n__webpack_require__(142)(app);\n__webpack_require__(153)(app);\n\n// create server\nvar server = http.Server(app);\n\n// configure logger\n__webpack_require__(154)(logger);\n__webpack_require__(156)(logger);\n\n// sync sequelize\nvar db = __webpack_require__(6);\ndb.sequelize.sync()\n// start the server\n.then(function () {\n server.listen(PORT, function () {\n logger.info('Server is listening on PORT ' + PORT);\n });\n}).catch(function (error) {\n logger.error('Startup Error:', error);\n});\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"express\");\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"body-parser\");\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"express-handlebars\");\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"handlebars\");\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"helmet\");\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n serializeSpeechUser: function serializeSpeechUser(user, done) {\n // returns user data to be serialized into session\n logger.debug('serializing user');\n done(null, user);\n },\n deserializeSpeechUser: function deserializeSpeechUser(user, done) {\n // deserializes session and populates additional info to req.user\n logger.debug('deserializing user');\n done(null, user);\n }\n};\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"cookie-session\");\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"http\");\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar PassportLocalStrategy = __webpack_require__(23).Strategy;\nvar lbryApi = __webpack_require__(16);\nvar logger = __webpack_require__(2);\nvar db = __webpack_require__(6);\n\nmodule.exports = new PassportLocalStrategy({\n usernameField: 'username',\n passwordField: 'password'\n}, function (username, password, done) {\n logger.verbose('new channel signup request. user: ' + username + ' pass: ' + password + ' .');\n var userInfo = {};\n // server-side validaton of inputs (username, password)\n\n // create the channel and retrieve the metadata\n return lbryApi.createChannel('@' + username).then(function (tx) {\n // create user record\n var userData = {\n userName: username,\n password: password\n };\n logger.verbose('userData >', userData);\n // create user record\n var channelData = {\n channelName: '@' + username,\n channelClaimId: tx.claim_id\n };\n logger.verbose('channelData >', channelData);\n // create certificate record\n var certificateData = {\n claimId: tx.claim_id,\n name: '@' + username\n // address,\n };\n logger.verbose('certificateData >', certificateData);\n // save user and certificate to db\n return Promise.all([db.User.create(userData), db.Channel.create(channelData), db.Certificate.create(certificateData)]);\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 3),\n newUser = _ref2[0],\n newChannel = _ref2[1],\n newCertificate = _ref2[2];\n\n logger.verbose('user and certificate successfully created');\n // store the relevant newUser info to be passed back for req.User\n userInfo['id'] = newUser.id;\n userInfo['userName'] = newUser.userName;\n userInfo['channelName'] = newChannel.channelName;\n userInfo['channelClaimId'] = newChannel.channelClaimId;\n // associate the instances\n return Promise.all([newCertificate.setChannel(newChannel), newChannel.setUser(newUser)]);\n }).then(function () {\n logger.verbose('user and certificate successfully associated');\n return db.Certificate.getShortChannelIdFromLongChannelId(userInfo.channelClaimId, userInfo.channelName);\n }).then(function (shortChannelId) {\n userInfo['shortChannelId'] = shortChannelId;\n return done(null, userInfo);\n }).catch(function (error) {\n logger.error('signup error', error);\n return done(error);\n });\n});\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"axios\");\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar lbryConfig = {\n api: {\n apiHost: 'localhost',\n apiPort: '5279'\n }\n};\n\nmodule.exports = lbryConfig;\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"universal-analytics\");\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction MysqlConfig() {\n this.database = 'default';\n this.username = 'default';\n this.password = 'default';\n};\n\nmodule.exports = new MysqlConfig();\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(25),\n returnShortId = _require.returnShortId;\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n INTEGER = _ref.INTEGER,\n TEXT = _ref.TEXT,\n DECIMAL = _ref.DECIMAL;\n\n var Certificate = sequelize.define('Certificate', {\n address: {\n type: STRING,\n default: null\n },\n amount: {\n type: DECIMAL(19, 8),\n default: null\n },\n claimId: {\n type: STRING,\n default: null\n },\n claimSequence: {\n type: INTEGER,\n default: null\n },\n decodedClaim: {\n type: BOOLEAN,\n default: null\n },\n depth: {\n type: INTEGER,\n default: null\n },\n effectiveAmount: {\n type: DECIMAL(19, 8),\n default: null\n },\n hasSignature: {\n type: BOOLEAN,\n default: null\n },\n height: {\n type: INTEGER,\n default: null\n },\n hex: {\n type: TEXT('long'),\n default: null\n },\n name: {\n type: STRING,\n default: null\n },\n nout: {\n type: INTEGER,\n default: null\n },\n txid: {\n type: STRING,\n default: null\n },\n validAtHeight: {\n type: INTEGER,\n default: null\n },\n outpoint: {\n type: STRING,\n default: null\n },\n valueVersion: {\n type: STRING,\n default: null\n },\n claimType: {\n type: STRING,\n default: null\n },\n certificateVersion: {\n type: STRING,\n default: null\n },\n keyType: {\n type: STRING,\n default: null\n },\n publicKey: {\n type: TEXT('long'),\n default: null\n }\n }, {\n freezeTableName: true\n });\n\n Certificate.associate = function (db) {\n Certificate.belongsTo(db.Channel, {\n foreignKey: {\n allowNull: true\n }\n });\n };\n\n Certificate.getShortChannelIdFromLongChannelId = function (longChannelId, channelName) {\n var _this = this;\n\n logger.debug('getShortChannelIdFromLongChannelId ' + channelName + ':' + longChannelId);\n return new Promise(function (resolve, reject) {\n _this.findAll({\n where: { name: channelName },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n throw new Error('No channel(s) found with that channel name');\n default:\n return resolve(returnShortId(result, longChannelId));\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromShortChannelId = function (channelName, channelClaimId) {\n var _this2 = this;\n\n logger.debug('getLongChannelIdFromShortChannelId(' + channelName + ', ' + channelClaimId + ')');\n return new Promise(function (resolve, reject) {\n _this2.findAll({\n where: {\n name: channelName,\n claimId: {\n $like: channelClaimId + '%'\n }\n },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n // note results must be sorted\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromChannelName = function (channelName) {\n var _this3 = this;\n\n logger.debug('getLongChannelIdFromChannelName(' + channelName + ')');\n return new Promise(function (resolve, reject) {\n _this3.findAll({\n where: { name: channelName },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.validateLongChannelId = function (name, claimId) {\n var _this4 = this;\n\n logger.debug('validateLongChannelId(' + name + ', ' + claimId + ')');\n return new Promise(function (resolve, reject) {\n _this4.findOne({\n where: { name: name, claimId: claimId }\n }).then(function (result) {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelId = function (channelName, channelClaimId) {\n logger.debug('getLongChannelId(' + channelName + ', ' + channelClaimId + ')');\n if (channelClaimId && channelClaimId.length === 40) {\n // if a full channel id is provided\n return this.validateLongChannelId(channelName, channelClaimId);\n } else if (channelClaimId && channelClaimId.length < 40) {\n // if a short channel id is provided\n return this.getLongChannelIdFromShortChannelId(channelName, channelClaimId);\n } else {\n return this.getLongChannelIdFromChannelName(channelName); // if no channel id provided\n }\n };\n\n return Certificate;\n};\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING;\n\n var Channel = sequelize.define('Channel', {\n channelName: {\n type: STRING,\n allowNull: false\n },\n channelClaimId: {\n type: STRING,\n allowNull: false\n }\n }, {\n freezeTableName: true\n });\n\n Channel.associate = function (db) {\n Channel.belongsTo(db.User);\n Channel.hasOne(db.Certificate);\n };\n\n return Channel;\n};\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(25),\n returnShortId = _require.returnShortId;\n\nvar _require2 = __webpack_require__(5),\n defaultThumbnail = _require2.assetDefaults.thumbnail,\n host = _require2.details.host;\n\nfunction determineFileExtensionFromContentType(contentType) {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n return 'jpeg';\n case 'image/png':\n return 'png';\n case 'image/gif':\n return 'gif';\n case 'video/mp4':\n return 'mp4';\n default:\n logger.debug('setting unknown file type as file extension jpeg');\n return 'jpeg';\n }\n};\n\nfunction determineThumbnail(storedThumbnail, defaultThumbnail) {\n if (storedThumbnail === '') {\n return defaultThumbnail;\n }\n return storedThumbnail;\n};\n\nfunction prepareClaimData(claim) {\n // logger.debug('preparing claim data based on resolved data:', claim);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['host'] = host;\n return claim;\n};\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n INTEGER = _ref.INTEGER,\n TEXT = _ref.TEXT,\n DECIMAL = _ref.DECIMAL;\n\n var Claim = sequelize.define('Claim', {\n address: {\n type: STRING,\n default: null\n },\n amount: {\n type: DECIMAL(19, 8),\n default: null\n },\n claimId: {\n type: STRING,\n default: null\n },\n claimSequence: {\n type: INTEGER,\n default: null\n },\n decodedClaim: {\n type: BOOLEAN,\n default: null\n },\n depth: {\n type: INTEGER,\n default: null\n },\n effectiveAmount: {\n type: DECIMAL(19, 8),\n default: null\n },\n hasSignature: {\n type: BOOLEAN,\n default: null\n },\n height: {\n type: INTEGER,\n default: null\n },\n hex: {\n type: TEXT('long'),\n default: null\n },\n name: {\n type: STRING,\n default: null\n },\n nout: {\n type: INTEGER,\n default: null\n },\n txid: {\n type: STRING,\n default: null\n },\n validAtHeight: {\n type: INTEGER,\n default: null\n },\n outpoint: {\n type: STRING,\n default: null\n },\n claimType: {\n type: STRING,\n default: null\n },\n certificateId: {\n type: STRING,\n default: null\n },\n author: {\n type: STRING,\n default: null\n },\n description: {\n type: TEXT('long'),\n default: null\n },\n language: {\n type: STRING,\n default: null\n },\n license: {\n type: STRING,\n default: null\n },\n licenseUrl: {\n type: STRING,\n default: null\n },\n nsfw: {\n type: BOOLEAN,\n default: null\n },\n preview: {\n type: STRING,\n default: null\n },\n thumbnail: {\n type: STRING,\n default: null\n },\n title: {\n type: STRING,\n default: null\n },\n metadataVersion: {\n type: STRING,\n default: null\n },\n contentType: {\n type: STRING,\n default: null\n },\n source: {\n type: STRING,\n default: null\n },\n sourceType: {\n type: STRING,\n default: null\n },\n sourceVersion: {\n type: STRING,\n default: null\n },\n streamVersion: {\n type: STRING,\n default: null\n },\n valueVersion: {\n type: STRING,\n default: null\n },\n channelName: {\n type: STRING,\n allowNull: true,\n default: null\n }\n }, {\n freezeTableName: true\n });\n\n Claim.associate = function (db) {\n Claim.belongsTo(db.File, {\n foreignKey: {\n allowNull: true\n }\n });\n };\n\n Claim.getShortClaimIdFromLongClaimId = function (claimId, claimName) {\n var _this = this;\n\n logger.debug('Claim.getShortClaimIdFromLongClaimId for ' + claimName + '#' + claimId);\n return new Promise(function (resolve, reject) {\n _this.findAll({\n where: { name: claimName },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n throw new Error('No claim(s) found with that claim name');\n default:\n resolve(returnShortId(result, claimId));\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getAllChannelClaims = function (channelClaimId) {\n var _this2 = this;\n\n logger.debug('Claim.getAllChannelClaims for ' + channelClaimId);\n return new Promise(function (resolve, reject) {\n _this2.findAll({\n where: { certificateId: channelClaimId },\n order: [['height', 'ASC']],\n raw: true // returns an array of only data, not an array of instances\n }).then(function (channelClaimsArray) {\n // logger.debug('channelclaimsarray length:', channelClaimsArray.length);\n switch (channelClaimsArray.length) {\n case 0:\n return resolve(null);\n default:\n channelClaimsArray.forEach(function (claim) {\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n return claim;\n });\n return resolve(channelClaimsArray);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getClaimIdByLongChannelId = function (channelClaimId, claimName) {\n var _this3 = this;\n\n logger.debug('finding claim id for claim ' + claimName + ' from channel ' + channelClaimId);\n return new Promise(function (resolve, reject) {\n _this3.findAll({\n where: { name: claimName, certificateId: channelClaimId },\n order: [['id', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(result[0].claimId);\n default:\n logger.error(result.length + ' records found for \"' + claimName + '\" in channel \"' + channelClaimId + '\"');\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimIdFromShortClaimId = function (name, shortId) {\n var _this4 = this;\n\n return new Promise(function (resolve, reject) {\n _this4.findAll({\n where: {\n name: name,\n claimId: {\n $like: shortId + '%'\n } },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n // note results must be sorted\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getTopFreeClaimIdByClaimName = function (name) {\n var _this5 = this;\n\n return new Promise(function (resolve, reject) {\n _this5.findAll({\n where: { name: name },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']] // note: maybe height and effective amount need to switch?\n }).then(function (result) {\n logger.debug('length of result', result.length);\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].dataValues.claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.validateLongClaimId = function (name, claimId) {\n var _this6 = this;\n\n return new Promise(function (resolve, reject) {\n _this6.findOne({\n where: { name: name, claimId: claimId }\n }).then(function (result) {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimId = function (claimName, claimId) {\n logger.debug('getLongClaimId(' + claimName + ', ' + claimId + ')');\n if (claimId && claimId.length === 40) {\n // if a full claim id is provided\n return this.validateLongClaimId(claimName, claimId);\n } else if (claimId && claimId.length < 40) {\n return this.getLongClaimIdFromShortClaimId(claimName, claimId); // if a short claim id is provided\n } else {\n return this.getTopFreeClaimIdByClaimName(claimName); // if no claim id is provided\n }\n };\n\n Claim.resolveClaim = function (name, claimId) {\n var _this7 = this;\n\n logger.debug('Claim.resolveClaim: ' + name + ' ' + claimId);\n return new Promise(function (resolve, reject) {\n _this7.findAll({\n where: { name: name, claimId: claimId }\n }).then(function (claimArray) {\n switch (claimArray.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(prepareClaimData(claimArray[0].dataValues));\n default:\n logger.error('more than one record matches ' + name + '#' + claimId + ' in db.Claim');\n return resolve(prepareClaimData(claimArray[0].dataValues));\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n return Claim;\n};\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n INTEGER = _ref.INTEGER;\n\n var File = sequelize.define('File', {\n name: {\n type: STRING,\n allowNull: false\n },\n claimId: {\n type: STRING,\n allowNull: false\n },\n address: {\n type: STRING,\n allowNull: false\n },\n outpoint: {\n type: STRING,\n allowNull: false\n },\n height: {\n type: INTEGER,\n allowNull: false,\n default: 0\n },\n fileName: {\n type: STRING,\n allowNull: false\n },\n filePath: {\n type: STRING,\n allowNull: false\n },\n fileType: {\n type: STRING\n },\n nsfw: {\n type: BOOLEAN,\n allowNull: false,\n defaultValue: false\n },\n trendingEligible: {\n type: BOOLEAN,\n allowNull: false,\n defaultValue: true\n }\n }, {\n freezeTableName: true\n });\n\n File.associate = function (db) {\n File.hasMany(db.Request);\n File.hasOne(db.Claim);\n };\n\n File.getRecentClaims = function () {\n return this.findAll({\n where: { nsfw: false, trendingEligible: true },\n order: [['createdAt', 'DESC']],\n limit: 25\n });\n };\n\n return File;\n};\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n TEXT = _ref.TEXT;\n\n var Request = sequelize.define('Request', {\n action: {\n type: STRING,\n allowNull: false\n },\n url: {\n type: STRING,\n allowNull: false\n },\n ipAddress: {\n type: STRING,\n allowNull: true\n },\n result: {\n type: TEXT('long'),\n allowNull: true,\n default: null\n }\n }, {\n freezeTableName: true\n });\n\n Request.associate = function (db) {\n Request.belongsTo(db.File, {\n foreignKey: {\n allowNull: true\n }\n });\n };\n\n return Request;\n};\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar bcrypt = __webpack_require__(68);\nvar logger = __webpack_require__(2);\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING;\n\n var User = sequelize.define('User', {\n userName: {\n type: STRING,\n allowNull: false\n },\n password: {\n type: STRING,\n allowNull: false\n }\n }, {\n freezeTableName: true\n });\n\n User.associate = function (db) {\n User.hasOne(db.Channel);\n };\n\n User.prototype.comparePassword = function (password) {\n return bcrypt.compare(password, this.password);\n };\n\n User.prototype.changePassword = function (newPassword) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n // generate a salt string to use for hashing\n bcrypt.genSalt(function (saltError, salt) {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(newPassword, salt, function (hashError, hash) {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the current password with the new hash\n _this.update({ password: hash }).then(function () {\n resolve();\n }).catch(function (error) {\n reject(error);\n });\n });\n });\n });\n };\n\n // pre-save hook method to hash the user's password before the user's info is saved to the db.\n User.hook('beforeCreate', function (user, options) {\n logger.debug('User.beforeCreate hook...');\n return new Promise(function (resolve, reject) {\n // generate a salt string to use for hashing\n bcrypt.genSalt(function (saltError, salt) {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(user.password, salt, function (hashError, hash) {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the password string with the hash password value\n user.password = hash;\n resolve();\n });\n });\n });\n });\n\n return User;\n};\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"bcrypt\");\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar PassportLocalStrategy = __webpack_require__(23).Strategy;\nvar logger = __webpack_require__(2);\nvar db = __webpack_require__(6);\n\nvar returnUserAndChannelInfo = function returnUserAndChannelInfo(userInstance) {\n return new Promise(function (resolve, reject) {\n var userInfo = {};\n userInfo['id'] = userInstance.id;\n userInfo['userName'] = userInstance.userName;\n userInstance.getChannel().then(function (_ref) {\n var channelName = _ref.channelName,\n channelClaimId = _ref.channelClaimId;\n\n userInfo['channelName'] = channelName;\n userInfo['channelClaimId'] = channelClaimId;\n return db.Certificate.getShortChannelIdFromLongChannelId(channelClaimId, channelName);\n }).then(function (shortChannelId) {\n userInfo['shortChannelId'] = shortChannelId;\n resolve(userInfo);\n }).catch(function (error) {\n reject(error);\n });\n });\n};\n\nmodule.exports = new PassportLocalStrategy({\n usernameField: 'username',\n passwordField: 'password'\n}, function (username, password, done) {\n return db.User.findOne({\n where: { userName: username }\n }).then(function (user) {\n if (!user) {\n logger.debug('no user found');\n return done(null, false, { message: 'Incorrect username or password' });\n }\n return user.comparePassword(password).then(function (isMatch) {\n if (!isMatch) {\n logger.debug('incorrect password');\n return done(null, false, { message: 'Incorrect username or password' });\n }\n logger.debug('Password was a match, returning User');\n return returnUserAndChannelInfo(user).then(function (userInfo) {\n return done(null, userInfo);\n }).catch(function (error) {\n return error;\n });\n }).catch(function (error) {\n return error;\n });\n }).catch(function (error) {\n return done(error);\n });\n});\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\nvar passport = __webpack_require__(22);\n\nmodule.exports = function (app) {\n // route for sign up\n app.post('/signup', passport.authenticate('local-signup'), function (req, res) {\n logger.verbose('successful signup for ' + req.user.channelName);\n res.status(200).json({\n success: true,\n channelName: req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId\n });\n });\n // route for log in\n app.post('/login', function (req, res, next) {\n passport.authenticate('local-login', function (err, user, info) {\n if (err) {\n return next(err);\n }\n if (!user) {\n return res.status(400).json({\n success: false,\n message: info.message\n });\n }\n logger.debug('successful login');\n req.logIn(user, function (err) {\n if (err) {\n return next(err);\n }\n return res.status(200).json({\n success: true,\n channelName: req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId\n });\n });\n })(req, res, next);\n });\n // route to log out\n app.get('/logout', function (req, res) {\n req.logout();\n res.status(200).json({ success: true, message: 'you successfully logged out' });\n });\n // see if user is authenticated, and return credentials if so\n app.get('/user', function (req, res) {\n if (req.user) {\n res.status(200).json({ success: true, data: req.user });\n } else {\n res.status(401).json({ success: false, message: 'user is not logged in' });\n }\n });\n};\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar logger = __webpack_require__(2);\nvar multipart = __webpack_require__(72);\n\nvar _require = __webpack_require__(5),\n uploadDirectory = _require.publishing.uploadDirectory,\n host = _require.details.host;\n\nvar multipartMiddleware = multipart({ uploadDir: uploadDirectory });\nvar db = __webpack_require__(6);\n\nvar _require2 = __webpack_require__(73),\n claimNameIsAvailable = _require2.claimNameIsAvailable,\n checkChannelAvailability = _require2.checkChannelAvailability,\n publish = _require2.publish;\n\nvar _require3 = __webpack_require__(16),\n getClaimList = _require3.getClaimList,\n resolveUri = _require3.resolveUri,\n getClaim = _require3.getClaim;\n\nvar _require4 = __webpack_require__(26),\n addGetResultsToFileData = _require4.addGetResultsToFileData,\n createBasicPublishParams = _require4.createBasicPublishParams,\n createThumbnailPublishParams = _require4.createThumbnailPublishParams,\n parsePublishApiRequestBody = _require4.parsePublishApiRequestBody,\n parsePublishApiRequestFiles = _require4.parsePublishApiRequestFiles,\n createFileData = _require4.createFileData;\n\nvar errorHandlers = __webpack_require__(27);\n\nvar _require5 = __webpack_require__(17),\n sendGATimingEvent = _require5.sendGATimingEvent;\n\nvar _require6 = __webpack_require__(75),\n authenticateUser = _require6.authenticateUser;\n\nvar _require7 = __webpack_require__(28),\n getChannelData = _require7.getChannelData,\n getChannelClaims = _require7.getChannelClaims,\n getClaimId = _require7.getClaimId;\n\nvar NO_CHANNEL = 'NO_CHANNEL';\nvar NO_CLAIM = 'NO_CLAIM';\n\nmodule.exports = function (app) {\n // route to check whether site has published to a channel\n app.get('/api/channel/availability/:name', function (_ref, res) {\n var ip = _ref.ip,\n originalUrl = _ref.originalUrl,\n name = _ref.params.name;\n\n var gaStartTime = Date.now();\n checkChannelAvailability(name).then(function (availableName) {\n res.status(200).json(availableName);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short channel id from long channel Id\n app.get('/api/channel/short-id/:longId/:name', function (_ref2, res) {\n var ip = _ref2.ip,\n originalUrl = _ref2.originalUrl,\n params = _ref2.params;\n\n db.Certificate.getShortChannelIdFromLongChannelId(params.longId, params.name).then(function (shortId) {\n res.status(200).json(shortId);\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/data/:channelName/:channelClaimId', function (_ref3, res) {\n var ip = _ref3.ip,\n originalUrl = _ref3.originalUrl,\n body = _ref3.body,\n params = _ref3.params;\n\n var channelName = params.channelName;\n var channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n getChannelData(channelName, channelClaimId, 0).then(function (data) {\n if (data === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'No matching channel was found' });\n }\n res.status(200).json({ success: true, data: data });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/claims/:channelName/:channelClaimId/:page', function (_ref4, res) {\n var ip = _ref4.ip,\n originalUrl = _ref4.originalUrl,\n body = _ref4.body,\n params = _ref4.params;\n\n var channelName = params.channelName;\n var channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n var page = params.page;\n getChannelClaims(channelName, channelClaimId, page).then(function (data) {\n if (data === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'No matching channel was found' });\n }\n res.status(200).json({ success: true, data: data });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a claim_list request on the daemon\n app.get('/api/claim/list/:name', function (_ref5, res) {\n var ip = _ref5.ip,\n originalUrl = _ref5.originalUrl,\n params = _ref5.params;\n\n getClaimList(params.name).then(function (claimsList) {\n res.status(200).json(claimsList);\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get an asset\n app.get('/api/claim/get/:name/:claimId', function (_ref6, res) {\n var ip = _ref6.ip,\n originalUrl = _ref6.originalUrl,\n params = _ref6.params;\n\n var name = params.name;\n var claimId = params.claimId;\n // resolve the claim\n db.Claim.resolveClaim(name, claimId).then(function (resolveResult) {\n // make sure a claim actually exists at that uri\n if (!resolveResult) {\n throw new Error('No matching uri found in Claim table');\n }\n var fileData = createFileData(resolveResult);\n // get the claim\n return Promise.all([fileData, getClaim(name + '#' + claimId)]);\n }).then(function (_ref7) {\n var _ref8 = _slicedToArray(_ref7, 2),\n fileData = _ref8[0],\n getResult = _ref8[1];\n\n fileData = addGetResultsToFileData(fileData, getResult);\n return Promise.all([db.upsert(db.File, fileData, { name: name, claimId: claimId }, 'File'), getResult]);\n }).then(function (_ref9) {\n var _ref10 = _slicedToArray(_ref9, 2),\n fileRecord = _ref10[0],\n _ref10$ = _ref10[1],\n message = _ref10$.message,\n completed = _ref10$.completed;\n\n res.status(200).json({ success: true, message: message, completed: completed });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to check whether this site published to a claim\n app.get('/api/claim/availability/:name', function (_ref11, res) {\n var ip = _ref11.ip,\n originalUrl = _ref11.originalUrl,\n name = _ref11.params.name;\n\n var gaStartTime = Date.now();\n claimNameIsAvailable(name).then(function (result) {\n res.status(200).json(result);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a resolve request on the daemon\n app.get('/api/claim/resolve/:name/:claimId', function (_ref12, res) {\n var headers = _ref12.headers,\n ip = _ref12.ip,\n originalUrl = _ref12.originalUrl,\n params = _ref12.params;\n\n resolveUri(params.name + '#' + params.claimId).then(function (resolvedUri) {\n res.status(200).json(resolvedUri);\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a publish request on the daemon\n app.post('/api/claim/publish', multipartMiddleware, function (_ref13, res) {\n var body = _ref13.body,\n files = _ref13.files,\n headers = _ref13.headers,\n ip = _ref13.ip,\n originalUrl = _ref13.originalUrl,\n user = _ref13.user;\n\n // define variables\n var channelName = void 0,\n channelId = void 0,\n channelPassword = void 0,\n description = void 0,\n fileName = void 0,\n filePath = void 0,\n fileType = void 0,\n gaStartTime = void 0,\n license = void 0,\n name = void 0,\n nsfw = void 0,\n thumbnail = void 0,\n thumbnailFileName = void 0,\n thumbnailFilePath = void 0,\n thumbnailFileType = void 0,\n title = void 0;\n // record the start time of the request\n gaStartTime = Date.now();\n // validate the body and files of the request\n try {\n var _parsePublishApiReque = parsePublishApiRequestBody(body);\n // validateApiPublishRequest(body, files);\n\n\n name = _parsePublishApiReque.name;\n nsfw = _parsePublishApiReque.nsfw;\n license = _parsePublishApiReque.license;\n title = _parsePublishApiReque.title;\n description = _parsePublishApiReque.description;\n thumbnail = _parsePublishApiReque.thumbnail;\n\n var _parsePublishApiReque2 = parsePublishApiRequestFiles(files);\n\n fileName = _parsePublishApiReque2.fileName;\n filePath = _parsePublishApiReque2.filePath;\n fileType = _parsePublishApiReque2.fileType;\n thumbnailFileName = _parsePublishApiReque2.thumbnailFileName;\n thumbnailFilePath = _parsePublishApiReque2.thumbnailFilePath;\n thumbnailFileType = _parsePublishApiReque2.thumbnailFileType;\n channelName = body.channelName;\n channelId = body.channelId;\n channelPassword = body.channelPassword;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n // check channel authorization\n Promise.all([authenticateUser(channelName, channelId, channelPassword, user), claimNameIsAvailable(name), createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail), createThumbnailPublishParams(thumbnailFilePath, name, license, nsfw)]).then(function (_ref14) {\n var _ref15 = _slicedToArray(_ref14, 4),\n _ref15$ = _ref15[0],\n channelName = _ref15$.channelName,\n channelClaimId = _ref15$.channelClaimId,\n validatedClaimName = _ref15[1],\n publishParams = _ref15[2],\n thumbnailPublishParams = _ref15[3];\n\n // add channel details to the publish params\n if (channelName && channelClaimId) {\n publishParams['channel_name'] = channelName;\n publishParams['channel_id'] = channelClaimId;\n }\n // publish the thumbnail\n if (thumbnailPublishParams) {\n publish(thumbnailPublishParams, thumbnailFileName, thumbnailFileType);\n }\n // publish the asset\n return publish(publishParams, fileName, fileType);\n }).then(function (result) {\n res.status(200).json({\n success: true,\n message: 'publish completed successfully',\n data: {\n name: name,\n claimId: result.claim_id,\n url: host + '/' + result.claim_id + '/' + name,\n lbryTx: result\n }\n });\n // record the publish end time and send to google analytics\n sendGATimingEvent('end-to-end', 'publish', fileType, gaStartTime, Date.now());\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short claim id from long claim Id\n app.get('/api/claim/short-id/:longId/:name', function (_ref16, res) {\n var ip = _ref16.ip,\n originalUrl = _ref16.originalUrl,\n body = _ref16.body,\n params = _ref16.params;\n\n db.Claim.getShortClaimIdFromLongClaimId(params.longId, params.name).then(function (shortId) {\n res.status(200).json({ success: true, data: shortId });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.post('/api/claim/long-id', function (_ref17, res) {\n var ip = _ref17.ip,\n originalUrl = _ref17.originalUrl,\n body = _ref17.body,\n params = _ref17.params;\n\n logger.debug('body:', body);\n var channelName = body.channelName;\n var channelClaimId = body.channelClaimId;\n var claimName = body.claimName;\n var claimId = body.claimId;\n getClaimId(channelName, channelClaimId, claimName, claimId).then(function (result) {\n if (result === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'No matching channel could be found' });\n }\n if (result === NO_CLAIM) {\n return res.status(404).json({ success: false, message: 'No matching claim id could be found' });\n }\n res.status(200).json({ success: true, data: result });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/claim/data/:claimName/:claimId', function (_ref18, res) {\n var ip = _ref18.ip,\n originalUrl = _ref18.originalUrl,\n body = _ref18.body,\n params = _ref18.params;\n\n var claimName = params.claimName;\n var claimId = params.claimId;\n if (claimId === 'none') claimId = null;\n db.Claim.resolveClaim(claimName, claimId).then(function (claimInfo) {\n if (!claimInfo) {\n return res.status(404).json({ success: false, message: 'No claim could be found' });\n }\n res.status(200).json({ success: true, data: claimInfo });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to see if asset is available locally\n app.get('/api/file/availability/:name/:claimId', function (_ref19, res) {\n var ip = _ref19.ip,\n originalUrl = _ref19.originalUrl,\n params = _ref19.params;\n\n var name = params.name;\n var claimId = params.claimId;\n db.File.findOne({ where: { name: name, claimId: claimId } }).then(function (result) {\n if (result) {\n return res.status(200).json({ success: true, data: true });\n }\n res.status(200).json({ success: true, data: false });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n};\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"connect-multiparty\");\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar logger = __webpack_require__(2);\nvar db = __webpack_require__(6);\nvar lbryApi = __webpack_require__(16);\nvar publishHelpers = __webpack_require__(26);\n\nvar _require = __webpack_require__(5),\n _require$publishing = _require.publishing,\n primaryClaimAddress = _require$publishing.primaryClaimAddress,\n additionalClaimAddresses = _require$publishing.additionalClaimAddresses;\n\nvar Sequelize = __webpack_require__(24);\nvar Op = Sequelize.Op;\n\nmodule.exports = {\n publish: function publish(publishParams, fileName, fileType) {\n return new Promise(function (resolve, reject) {\n var publishResults = void 0,\n certificateId = void 0,\n channelName = void 0;\n // publish the file\n return lbryApi.publishClaim(publishParams).then(function (tx) {\n logger.info('Successfully published ' + publishParams.name + ' ' + fileName, tx);\n publishResults = tx;\n // get the channel information\n if (publishParams.channel_name) {\n logger.debug('this claim was published in channel: ' + publishParams.channel_name);\n return db.Channel.findOne({ where: { channelName: publishParams.channel_name } });\n } else {\n logger.debug('this claim was not published in a channel');\n return null;\n }\n }).then(function (channel) {\n // set channel information\n certificateId = null;\n channelName = null;\n if (channel) {\n certificateId = channel.channelClaimId;\n channelName = channel.channelName;\n }\n logger.debug('certificateId: ' + certificateId);\n }).then(function () {\n // create the File record\n var fileRecord = {\n name: publishParams.name,\n claimId: publishResults.claim_id,\n title: publishParams.metadata.title,\n description: publishParams.metadata.description,\n address: publishParams.claim_address,\n outpoint: publishResults.txid + ':' + publishResults.nout,\n height: 0,\n fileName: fileName,\n filePath: publishParams.file_path,\n fileType: fileType,\n nsfw: publishParams.metadata.nsfw\n };\n // create the Claim record\n var claimRecord = {\n name: publishParams.name,\n claimId: publishResults.claim_id,\n title: publishParams.metadata.title,\n description: publishParams.metadata.description,\n address: publishParams.claim_address,\n thumbnail: publishParams.metadata.thumbnail,\n outpoint: publishResults.txid + ':' + publishResults.nout,\n height: 0,\n contentType: fileType,\n nsfw: publishParams.metadata.nsfw,\n amount: publishParams.bid,\n certificateId: certificateId,\n channelName: channelName\n };\n // upsert criteria\n var upsertCriteria = {\n name: publishParams.name,\n claimId: publishResults.claim_id\n };\n // upsert the records\n return Promise.all([db.upsert(db.File, fileRecord, upsertCriteria, 'File'), db.upsert(db.Claim, claimRecord, upsertCriteria, 'Claim')]);\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n file = _ref2[0],\n claim = _ref2[1];\n\n logger.debug('File and Claim records successfully created');\n return Promise.all([file.setClaim(claim), claim.setFile(file)]);\n }).then(function () {\n logger.debug('File and Claim records successfully associated');\n resolve(publishResults); // resolve the promise with the result from lbryApi.publishClaim;\n }).catch(function (error) {\n logger.error('PUBLISH ERROR', error);\n publishHelpers.deleteTemporaryFile(publishParams.file_path); // delete the local file\n reject(error);\n });\n });\n },\n claimNameIsAvailable: function claimNameIsAvailable(name) {\n var claimAddresses = additionalClaimAddresses || [];\n claimAddresses.push(primaryClaimAddress);\n // find any records where the name is used\n return db.Claim.findAll({\n attributes: ['address'],\n where: {\n name: name,\n address: _defineProperty({}, Op.or, claimAddresses)\n }\n }).then(function (result) {\n if (result.length >= 1) {\n throw new Error('That claim is already in use');\n };\n return name;\n }).catch(function (error) {\n throw error;\n });\n },\n checkChannelAvailability: function checkChannelAvailability(name) {\n return db.Channel.findAll({\n where: { channelName: name }\n }).then(function (result) {\n if (result.length >= 1) {\n throw new Error('That channel has already been claimed');\n }\n return name;\n }).catch(function (error) {\n throw error;\n });\n }\n};\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"fs\");\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar db = __webpack_require__(6);\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n authenticateUser: function authenticateUser(channelName, channelId, channelPassword, user) {\n // case: no channelName or channel Id are provided (anonymous), regardless of whether user token is provided\n if (!channelName && !channelId) {\n return {\n channelName: null,\n channelClaimId: null\n };\n }\n // case: channelName or channel Id are provided with user token\n if (user) {\n if (channelName && channelName !== user.channelName) {\n throw new Error('the provided channel name does not match user credentials');\n }\n if (channelId && channelId !== user.channelClaimId) {\n throw new Error('the provided channel id does not match user credentials');\n }\n return {\n channelName: user.channelName,\n channelClaimId: user.channelClaimId\n };\n }\n // case: channelName or channel Id are provided with password instead of user token\n if (!channelPassword) throw new Error('no channel password provided');\n return module.exports.authenticateChannelCredentials(channelName, channelId, channelPassword);\n },\n authenticateChannelCredentials: function authenticateChannelCredentials(channelName, channelId, userPassword) {\n return new Promise(function (resolve, reject) {\n // hoisted variables\n var channelData = void 0;\n // build the params for finding the channel\n var channelFindParams = {};\n if (channelName) channelFindParams['channelName'] = channelName;\n if (channelId) channelFindParams['channelClaimId'] = channelId;\n // find the channel\n db.Channel.findOne({\n where: channelFindParams\n }).then(function (channel) {\n if (!channel) {\n logger.debug('no channel found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n channelData = channel.get();\n logger.debug('channel data:', channelData);\n return db.User.findOne({\n where: { userName: channelData.channelName.substring(1) }\n });\n }).then(function (user) {\n if (!user) {\n logger.debug('no user found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n return user.comparePassword(userPassword);\n }).then(function (isMatch) {\n if (!isMatch) {\n logger.debug('incorrect password');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n logger.debug('...password was a match...');\n resolve(channelData);\n }).catch(function (error) {\n reject(error);\n });\n });\n }\n};\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar CLAIMS_PER_PAGE = 12;\n\nmodule.exports = {\n returnPaginatedChannelClaims: function returnPaginatedChannelClaims(channelName, longChannelClaimId, claims, page) {\n var totalPages = module.exports.determineTotalPages(claims);\n var paginationPage = module.exports.getPageFromQuery(page);\n var viewData = {\n channelName: channelName,\n longChannelClaimId: longChannelClaimId,\n claims: module.exports.extractPageFromClaims(claims, paginationPage),\n previousPage: module.exports.determinePreviousPage(paginationPage),\n currentPage: paginationPage,\n nextPage: module.exports.determineNextPage(totalPages, paginationPage),\n totalPages: totalPages,\n totalResults: module.exports.determineTotalClaims(claims)\n };\n return viewData;\n },\n getPageFromQuery: function getPageFromQuery(page) {\n if (page) {\n return parseInt(page);\n }\n return 1;\n },\n extractPageFromClaims: function extractPageFromClaims(claims, pageNumber) {\n if (!claims) {\n return []; // if no claims, return this default\n }\n // logger.debug('claims is array?', Array.isArray(claims));\n // logger.debug(`pageNumber ${pageNumber} is number?`, Number.isInteger(pageNumber));\n var claimStartIndex = (pageNumber - 1) * CLAIMS_PER_PAGE;\n var claimEndIndex = claimStartIndex + CLAIMS_PER_PAGE;\n var pageOfClaims = claims.slice(claimStartIndex, claimEndIndex);\n return pageOfClaims;\n },\n determineTotalPages: function determineTotalPages(claims) {\n if (!claims) {\n return 0;\n } else {\n var totalClaims = claims.length;\n if (totalClaims < CLAIMS_PER_PAGE) {\n return 1;\n }\n var fullPages = Math.floor(totalClaims / CLAIMS_PER_PAGE);\n var remainder = totalClaims % CLAIMS_PER_PAGE;\n if (remainder === 0) {\n return fullPages;\n }\n return fullPages + 1;\n }\n },\n determinePreviousPage: function determinePreviousPage(currentPage) {\n if (currentPage === 1) {\n return null;\n }\n return currentPage - 1;\n },\n determineNextPage: function determineNextPage(totalPages, currentPage) {\n if (currentPage === totalPages) {\n return null;\n }\n return currentPage + 1;\n },\n determineTotalClaims: function determineTotalClaims(claims) {\n if (!claims) {\n return 0;\n }\n return claims.length;\n }\n};\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _require = __webpack_require__(5),\n host = _require.details;\n\nvar handlePageRender = __webpack_require__(29);\n\nmodule.exports = function (app) {\n // route for the home page\n app.get('/', function (req, res) {\n handlePageRender(req, res);\n });\n // route to display login page\n app.get('/login', function (req, res) {\n handlePageRender(req, res);\n });\n // route to show 'about' page\n app.get('/about', function (req, res) {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/trending', function (req, res) {\n res.status(301).redirect('/popular');\n });\n app.get('/popular', function (req, res) {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/new', function (req, res) {\n handlePageRender(req, res);\n });\n // route to send embedable video player (for twitter)\n app.get('/embed/:claimId/:name', function (_ref, res) {\n var params = _ref.params;\n\n var claimId = params.claimId;\n var name = params.name;\n // get and render the content\n res.status(200).render('embed', { layout: 'embed', host: host, claimId: claimId, name: name });\n });\n};\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n case actions.FILE_SELECTED:\n return Object.assign({}, initialState, { // note: clears to initial state\n file: action.data\n });\n case actions.FILE_CLEAR:\n return initialState;\n case actions.METADATA_UPDATE:\n return Object.assign({}, state, {\n metadata: Object.assign({}, state.metadata, _defineProperty({}, action.data.name, action.data.value))\n });\n case actions.CLAIM_UPDATE:\n return Object.assign({}, state, {\n claim: action.data\n });\n case actions.SET_PUBLISH_IN_CHANNEL:\n return Object.assign({}, state, {\n publishInChannel: action.channel\n });\n case actions.PUBLISH_STATUS_UPDATE:\n return Object.assign({}, state, {\n status: action.data\n });\n case actions.ERROR_UPDATE:\n return Object.assign({}, state, {\n error: Object.assign({}, state.error, _defineProperty({}, action.data.name, action.data.value))\n });\n case actions.SELECTED_CHANNEL_UPDATE:\n return Object.assign({}, state, {\n selectedChannel: action.data\n });\n case actions.TOGGLE_METADATA_INPUTS:\n return Object.assign({}, state, {\n showMetadataInputs: action.data\n });\n case actions.THUMBNAIL_NEW:\n return Object.assign({}, state, {\n thumbnail: action.data\n });\n default:\n return state;\n }\n};\n\nvar _publish_action_types = __webpack_require__(32);\n\nvar actions = _interopRequireWildcard(_publish_action_types);\n\nvar _publish_channel_select_states = __webpack_require__(33);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _require = __webpack_require__(5),\n publishing = _require.publishing;\n\nvar initialState = {\n disabled: publishing.disabled,\n disabledMessage: publishing.disabledMessage,\n publishInChannel: false,\n selectedChannel: _publish_channel_select_states.LOGIN,\n showMetadataInputs: false,\n status: {\n status: null,\n message: null\n },\n error: {\n file: null,\n url: null,\n channel: null,\n publishSubmit: null\n },\n file: null,\n claim: '',\n metadata: {\n title: '',\n description: '',\n license: '',\n nsfw: false\n },\n thumbnail: null\n};\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n case actions.CHANNEL_UPDATE:\n return Object.assign({}, state, {\n loggedInChannel: action.data\n });\n default:\n return state;\n }\n};\n\nvar _channel_action_types = __webpack_require__(34);\n\nvar actions = _interopRequireWildcard(_channel_action_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar initialState = {\n loggedInChannel: {\n name: null,\n shortId: null,\n longId: null\n }\n};\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n // handle request\n case actions.REQUEST_ERROR:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n error: action.data\n })\n });\n case actions.REQUEST_UPDATE:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n type: action.data.requestType,\n id: action.data.requestId\n })\n });\n // store requests\n case actions.REQUEST_LIST_ADD:\n return Object.assign({}, state, {\n requestList: Object.assign({}, state.requestList, _defineProperty({}, action.data.id, {\n error: action.data.error,\n key: action.data.key\n }))\n });\n // asset data\n case actions.ASSET_ADD:\n return Object.assign({}, state, {\n assetList: Object.assign({}, state.assetList, _defineProperty({}, action.data.id, {\n error: action.data.error,\n name: action.data.name,\n claimId: action.data.claimId,\n shortId: action.data.shortId,\n claimData: action.data.claimData\n }))\n });\n // channel data\n case actions.CHANNEL_ADD:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.id, {\n name: action.data.name,\n longId: action.data.longId,\n shortId: action.data.shortId,\n claimsData: action.data.claimsData\n }))\n });\n case actions.CHANNEL_CLAIMS_UPDATE_SUCCESS:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.channelListId, Object.assign({}, state.channelList[action.data.channelListId], {\n claimsData: action.data.claimsData\n })))\n });\n // display an asset\n case actions.FILE_AVAILABILITY_UPDATE:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n status: action.data\n })\n });\n case actions.DISPLAY_ASSET_ERROR:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n error: action.data,\n status: _asset_display_states.ERROR\n })\n });\n default:\n return state;\n }\n};\n\nvar _show_action_types = __webpack_require__(12);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _asset_display_states = __webpack_require__(35);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar initialState = {\n request: {\n error: null,\n type: null,\n id: null\n },\n requestList: {},\n channelList: {},\n assetList: {},\n displayAsset: {\n error: null,\n status: _asset_display_states.LOCAL_CHECK\n }\n};\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n default:\n return state;\n }\n};\n\nvar siteConfig = __webpack_require__(5);\n\nvar googleAnalyticsId = siteConfig.analytics.googleId,\n _siteConfig$assetDefa = siteConfig.assetDefaults,\n defaultThumbnail = _siteConfig$assetDefa.thumbnail,\n defaultDescription = _siteConfig$assetDefa.description,\n _siteConfig$details = siteConfig.details,\n description = _siteConfig$details.description,\n host = _siteConfig$details.host,\n title = _siteConfig$details.title,\n twitter = _siteConfig$details.twitter;\n\n\nvar initialState = {\n description: description,\n googleAnalyticsId: googleAnalyticsId,\n host: host,\n title: title,\n twitter: twitter,\n defaultDescription: defaultDescription,\n defaultThumbnail: defaultThumbnail\n};\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-ga\");\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _PublishTool = __webpack_require__(92);\n\nvar _PublishTool2 = _interopRequireDefault(_PublishTool);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar HomePage = function (_React$Component) {\n _inherits(HomePage, _React$Component);\n\n function HomePage() {\n _classCallCheck(this, HomePage);\n\n return _possibleConstructorReturn(this, (HomePage.__proto__ || Object.getPrototypeOf(HomePage)).apply(this, arguments));\n }\n\n _createClass(HomePage, [{\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column' },\n _react2.default.createElement(_SEO2.default, null),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded flex-container--column' },\n _react2.default.createElement(_PublishTool2.default, null)\n )\n );\n }\n }]);\n\n return HomePage;\n}(_react2.default.Component);\n\n;\n\nexports.default = HomePage;\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactHelmet = __webpack_require__(14);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _pageTitle = __webpack_require__(85);\n\nvar _metaTags = __webpack_require__(86);\n\nvar _canonicalLink = __webpack_require__(87);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SEO = function (_React$Component) {\n _inherits(SEO, _React$Component);\n\n function SEO() {\n _classCallCheck(this, SEO);\n\n return _possibleConstructorReturn(this, (SEO.__proto__ || Object.getPrototypeOf(SEO)).apply(this, arguments));\n }\n\n _createClass(SEO, [{\n key: 'render',\n value: function render() {\n // props from state\n var _props = this.props,\n defaultDescription = _props.defaultDescription,\n defaultThumbnail = _props.defaultThumbnail,\n siteDescription = _props.siteDescription,\n siteHost = _props.siteHost,\n siteTitle = _props.siteTitle,\n siteTwitter = _props.siteTwitter;\n // props from parent\n\n var _props2 = this.props,\n asset = _props2.asset,\n channel = _props2.channel,\n pageUri = _props2.pageUri;\n var pageTitle = this.props.pageTitle;\n // create page title, tags, and canonical link\n\n pageTitle = (0, _pageTitle.createPageTitle)(siteTitle, pageTitle);\n var metaTags = (0, _metaTags.createMetaTags)(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail);\n var canonicalLink = (0, _canonicalLink.createCanonicalLink)(asset, channel, pageUri, siteHost);\n // render results\n return _react2.default.createElement(_reactHelmet2.default, {\n title: pageTitle,\n meta: metaTags,\n link: [{ rel: 'canonical', href: canonicalLink }]\n });\n }\n }]);\n\n return SEO;\n}(_react2.default.Component);\n\n;\n\nSEO.propTypes = {\n pageTitle: _propTypes2.default.string,\n pageUri: _propTypes2.default.string,\n channel: _propTypes2.default.object,\n asset: _propTypes2.default.object\n};\n\nexports.default = SEO;\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar createPageTitle = exports.createPageTitle = function createPageTitle(siteTitle, pageTitle) {\n if (!pageTitle) {\n return \"\" + siteTitle;\n }\n return siteTitle + \" - \" + pageTitle;\n};\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar determineOgThumbnailContentType = function determineOgThumbnailContentType(thumbnail) {\n if (thumbnail) {\n var fileExt = thumbnail.substring(thumbnail.lastIndexOf('.'));\n switch (fileExt) {\n case 'jpeg':\n case 'jpg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'gif':\n return 'image/gif';\n case 'mp4':\n return 'video/mp4';\n default:\n return 'image/jpeg';\n }\n }\n return '';\n};\n\nvar createBasicMetaTags = function createBasicMetaTags(siteHost, siteDescription, siteTitle, siteTwitter) {\n return [{ property: 'og:title', content: siteTitle }, { property: 'og:url', content: siteHost }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: siteDescription }, { property: 'twitter:site', content: siteTwitter }, { property: 'twitter:card', content: 'summary' }];\n};\n\nvar createChannelMetaTags = function createChannelMetaTags(siteTitle, siteHost, siteTwitter, channel) {\n var name = channel.name,\n longId = channel.longId;\n\n return [{ property: 'og:title', content: name + ' on ' + siteTitle }, { property: 'og:url', content: siteHost + '/' + name + ':' + longId }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: name + ', a channel on ' + siteTitle }, { property: 'twitter:site', content: siteTwitter }, { property: 'twitter:card', content: 'summary' }];\n};\n\nvar createAssetMetaTags = function createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail) {\n var claimData = asset.claimData;\n var contentType = claimData.contentType;\n\n var embedUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name;\n var showUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name;\n var source = siteHost + '/' + claimData.claimId + '/' + claimData.name + '.' + claimData.fileExt;\n var ogTitle = claimData.title || claimData.name;\n var ogDescription = claimData.description || defaultDescription;\n var ogThumbnailContentType = determineOgThumbnailContentType(claimData.thumbnail);\n var ogThumbnail = claimData.thumbnail || defaultThumbnail;\n var metaTags = [{ property: 'og:title', content: ogTitle }, { property: 'og:url', content: showUrl }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: ogDescription }, { property: 'og:image:width', content: 600 }, { property: 'og:image:height', content: 315 }, { property: 'twitter:site', content: siteTwitter }];\n if (contentType === 'video/mp4' || contentType === 'video/webm') {\n metaTags.push({ property: 'og:video', content: source });\n metaTags.push({ property: 'og:video:secure_url', content: source });\n metaTags.push({ property: 'og:video:type', content: contentType });\n metaTags.push({ property: 'og:image', content: ogThumbnail });\n metaTags.push({ property: 'og:image:type', content: ogThumbnailContentType });\n metaTags.push({ property: 'og:type', content: 'video' });\n metaTags.push({ property: 'twitter:card', content: 'player' });\n metaTags.push({ property: 'twitter:player', content: embedUrl });\n metaTags.push({ property: 'twitter:player:width', content: 600 });\n metaTags.push({ property: 'twitter:text:player_width', content: 600 });\n metaTags.push({ property: 'twitter:player:height', content: 337 });\n metaTags.push({ property: 'twitter:player:stream', content: source });\n metaTags.push({ property: 'twitter:player:stream:content_type', content: contentType });\n } else {\n metaTags.push({ property: 'og:image', content: source });\n metaTags.push({ property: 'og:image:type', content: contentType });\n metaTags.push({ property: 'og:type', content: 'article' });\n metaTags.push({ property: 'twitter:card', content: 'summary_large_image' });\n }\n return metaTags;\n};\n\nvar createMetaTags = exports.createMetaTags = function createMetaTags(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail) {\n if (asset) {\n return createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail);\n };\n if (channel) {\n return createChannelMetaTags(siteHost, siteTitle, siteTwitter, channel);\n };\n return createBasicMetaTags(siteDescription, siteHost, siteTitle, siteTwitter);\n};\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar createBasicCanonicalLink = function createBasicCanonicalLink(page, siteHost) {\n return siteHost + \"/\" + page;\n};\n\nvar createAssetCanonicalLink = function createAssetCanonicalLink(asset, siteHost) {\n var channelName = void 0,\n certificateId = void 0,\n name = void 0,\n claimId = void 0;\n if (asset.claimData) {\n var _asset$claimData = asset.claimData;\n channelName = _asset$claimData.channelName;\n certificateId = _asset$claimData.certificateId;\n name = _asset$claimData.name;\n claimId = _asset$claimData.claimId;\n };\n if (channelName) {\n return siteHost + \"/\" + channelName + \":\" + certificateId + \"/\" + name;\n };\n return siteHost + \"/\" + claimId + \"/\" + name;\n};\n\nvar createChannelCanonicalLink = function createChannelCanonicalLink(channel, siteHost) {\n var name = channel.name,\n longId = channel.longId;\n\n return siteHost + \"/\" + name + \":\" + longId;\n};\n\nvar createCanonicalLink = exports.createCanonicalLink = function createCanonicalLink(asset, channel, page, siteHost) {\n if (asset) {\n return createAssetCanonicalLink(asset, siteHost);\n }\n if (channel) {\n return createChannelCanonicalLink(channel, siteHost);\n }\n return createBasicCanonicalLink(page, siteHost);\n};\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _Logo = __webpack_require__(89);\n\nvar _Logo2 = _interopRequireDefault(_Logo);\n\nvar _NavBarChannelOptionsDropdown = __webpack_require__(90);\n\nvar _NavBarChannelOptionsDropdown2 = _interopRequireDefault(_NavBarChannelOptionsDropdown);\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar VIEW = 'VIEW';\nvar LOGOUT = 'LOGOUT';\n\nvar NavBar = function (_React$Component) {\n _inherits(NavBar, _React$Component);\n\n function NavBar(props) {\n _classCallCheck(this, NavBar);\n\n var _this = _possibleConstructorReturn(this, (NavBar.__proto__ || Object.getPrototypeOf(NavBar)).call(this, props));\n\n _this.checkForLoggedInUser = _this.checkForLoggedInUser.bind(_this);\n _this.logoutUser = _this.logoutUser.bind(_this);\n _this.handleSelection = _this.handleSelection.bind(_this);\n return _this;\n }\n\n _createClass(NavBar, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n // check to see if the user is already logged in\n this.checkForLoggedInUser();\n }\n }, {\n key: 'checkForLoggedInUser',\n value: function checkForLoggedInUser() {\n var _this2 = this;\n\n var params = { credentials: 'include' };\n (0, _request2.default)('/user', params).then(function (_ref) {\n var data = _ref.data;\n\n _this2.props.onChannelLogin(data.channelName, data.shortChannelId, data.channelClaimId);\n }).catch(function (error) {\n console.log('/user error:', error.message);\n });\n }\n }, {\n key: 'logoutUser',\n value: function logoutUser() {\n var _this3 = this;\n\n var params = { credentials: 'include' };\n (0, _request2.default)('/logout', params).then(function () {\n _this3.props.onChannelLogout();\n }).catch(function (error) {\n console.log('/logout error', error.message);\n });\n }\n }, {\n key: 'handleSelection',\n value: function handleSelection(event) {\n var value = event.target.selectedOptions[0].value;\n switch (value) {\n case LOGOUT:\n this.logoutUser();\n break;\n case VIEW:\n // redirect to channel page\n this.props.history.push('/' + this.props.channelName + ':' + this.props.channelLongId);\n break;\n default:\n break;\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var siteDescription = this.props.siteDescription;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--wide nav-bar' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--short flex-container--row flex-container--space-between-center' },\n _react2.default.createElement(_Logo2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'nav-bar--center' },\n _react2.default.createElement(\n 'span',\n { className: 'nav-bar-tagline' },\n siteDescription\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'nav-bar--right' },\n _react2.default.createElement(\n _reactRouterDom.NavLink,\n { className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/', exact: true },\n 'Publish'\n ),\n _react2.default.createElement(\n _reactRouterDom.NavLink,\n { className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/about' },\n 'About'\n ),\n this.props.channelName ? _react2.default.createElement(_NavBarChannelOptionsDropdown2.default, {\n channelName: this.props.channelName,\n handleSelection: this.handleSelection,\n defaultSelection: this.props.channelName,\n VIEW: VIEW,\n LOGOUT: LOGOUT\n }) : _react2.default.createElement(\n _reactRouterDom.NavLink,\n { id: 'nav-bar-login-link', className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/login' },\n 'Channel'\n )\n )\n )\n );\n }\n }]);\n\n return NavBar;\n}(_react2.default.Component);\n\nexports.default = (0, _reactRouterDom.withRouter)(NavBar);\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Logo() {\n return _react2.default.createElement(\n 'svg',\n { version: '1.1', id: 'Layer_1', x: '0px', y: '0px', height: '24px', viewBox: '0 0 80 31', enableBackground: 'new 0 0 80 31', className: 'nav-bar-logo' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { to: '/' },\n _react2.default.createElement(\n 'title',\n null,\n 'Logo'\n ),\n _react2.default.createElement(\n 'desc',\n null,\n 'Spee.ch logo'\n ),\n _react2.default.createElement(\n 'g',\n { id: 'About' },\n _react2.default.createElement(\n 'g',\n { id: 'Publish-Form-V2-_x28_filled_x29_', transform: 'translate(-42.000000, -23.000000)' },\n _react2.default.createElement(\n 'g',\n { id: 'Group-17', transform: 'translate(42.000000, 22.000000)' },\n _react2.default.createElement(\n 'text',\n { transform: 'matrix(1 0 0 1 0 20)', fontSize: '25', fontFamily: 'Roboto' },\n 'Spee 10000000) {\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n throw new Error('Sorry, GIFs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n throw new Error(file.type + ' is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n }\n};\n\n/***/ }),\n/* 96 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishPreview = function (_React$Component) {\n _inherits(PublishPreview, _React$Component);\n\n function PublishPreview(props) {\n _classCallCheck(this, PublishPreview);\n\n var _this = _possibleConstructorReturn(this, (PublishPreview.__proto__ || Object.getPrototypeOf(PublishPreview)).call(this, props));\n\n _this.state = {\n imgSource: '',\n defaultThumbnail: '/assets/img/video_thumb_default.png'\n };\n return _this;\n }\n\n _createClass(PublishPreview, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.setPreviewImageSource(this.props.file);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(newProps) {\n if (newProps.file !== this.props.file) {\n this.setPreviewImageSource(newProps.file);\n }\n if (newProps.thumbnail !== this.props.thumbnail) {\n if (newProps.thumbnail) {\n this.setPreviewImageSourceFromFile(newProps.thumbnail);\n } else {\n this.setState({ imgSource: this.state.defaultThumbnail });\n }\n }\n }\n }, {\n key: 'setPreviewImageSourceFromFile',\n value: function setPreviewImageSourceFromFile(file) {\n var _this2 = this;\n\n var previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = function () {\n _this2.setState({ imgSource: previewReader.result });\n };\n }\n }, {\n key: 'setPreviewImageSource',\n value: function setPreviewImageSource(file) {\n if (file.type !== 'video/mp4') {\n this.setPreviewImageSourceFromFile(file);\n } else {\n if (this.props.thumbnail) {\n this.setPreviewImageSourceFromFile(this.props.thumbnail);\n }\n this.setState({ imgSource: this.state.defaultThumbnail });\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement('img', {\n id: 'dropzone-preview',\n src: this.state.imgSource,\n className: this.props.dimPreview ? 'dim' : '',\n alt: 'publish preview'\n });\n }\n }]);\n\n return PublishPreview;\n}(_react2.default.Component);\n\n;\n\nPublishPreview.propTypes = {\n dimPreview: _propTypes2.default.bool.isRequired,\n file: _propTypes2.default.object.isRequired,\n thumbnail: _propTypes2.default.object\n};\n\nexports.default = PublishPreview;\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(98);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n publish = _ref.publish;\n\n return {\n file: publish.file\n };\n};\n\nvar mapDispatchToProps = {\n clearFile: _publish.clearFile,\n startPublish: _publish.startPublish\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _Dropzone = __webpack_require__(38);\n\nvar _Dropzone2 = _interopRequireDefault(_Dropzone);\n\nvar _PublishTitleInput = __webpack_require__(99);\n\nvar _PublishTitleInput2 = _interopRequireDefault(_PublishTitleInput);\n\nvar _PublishUrlInput = __webpack_require__(101);\n\nvar _PublishUrlInput2 = _interopRequireDefault(_PublishUrlInput);\n\nvar _PublishThumbnailInput = __webpack_require__(104);\n\nvar _PublishThumbnailInput2 = _interopRequireDefault(_PublishThumbnailInput);\n\nvar _PublishMetadataInputs = __webpack_require__(106);\n\nvar _PublishMetadataInputs2 = _interopRequireDefault(_PublishMetadataInputs);\n\nvar _ChannelSelect = __webpack_require__(109);\n\nvar _ChannelSelect2 = _interopRequireDefault(_ChannelSelect);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishDetails = function (_React$Component) {\n _inherits(PublishDetails, _React$Component);\n\n function PublishDetails(props) {\n _classCallCheck(this, PublishDetails);\n\n var _this = _possibleConstructorReturn(this, (PublishDetails.__proto__ || Object.getPrototypeOf(PublishDetails)).call(this, props));\n\n _this.onPublishSubmit = _this.onPublishSubmit.bind(_this);\n return _this;\n }\n\n _createClass(PublishDetails, [{\n key: 'onPublishSubmit',\n value: function onPublishSubmit() {\n this.props.startPublish(this.props.history);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { className: 'row row--no-bottom' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(_PublishTitleInput2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(_Dropzone2.default, null)\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { id: 'publish-active-area', className: 'row row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--wide' },\n _react2.default.createElement(_PublishUrlInput2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--wide' },\n _react2.default.createElement(_ChannelSelect2.default, null)\n ),\n this.props.file.type === 'video/mp4' && _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--wide ' },\n _react2.default.createElement(_PublishThumbnailInput2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--no-bottom row--wide' },\n _react2.default.createElement(_PublishMetadataInputs2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide align-content-center' },\n _react2.default.createElement(\n 'button',\n { id: 'publish-submit', className: 'button--primary button--large', onClick: this.onPublishSubmit },\n 'Publish'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-bottom align-content-center' },\n _react2.default.createElement(\n 'button',\n { className: 'button--cancel', onClick: this.props.clearFile },\n 'Cancel'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--short align-content-center' },\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'By clicking \\'Publish\\', you affirm that you have the rights to publish this content to the LBRY network, and that you understand the properties of publishing it to a decentralized, user-controlled network. ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://lbry.io/learn' },\n 'Read more.'\n )\n )\n )\n )\n )\n );\n }\n }]);\n\n return PublishDetails;\n}(_react2.default.Component);\n\n;\n\nexports.default = (0, _reactRouterDom.withRouter)(PublishDetails);\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(100);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n title: publish.metadata.title\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onMetadataChange: function onMetadataChange(name, value) {\n dispatch((0, _publish.updateMetadata)(name, value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishTitleInput = function (_React$Component) {\n _inherits(PublishTitleInput, _React$Component);\n\n function PublishTitleInput(props) {\n _classCallCheck(this, PublishTitleInput);\n\n var _this = _possibleConstructorReturn(this, (PublishTitleInput.__proto__ || Object.getPrototypeOf(PublishTitleInput)).call(this, props));\n\n _this.handleInput = _this.handleInput.bind(_this);\n return _this;\n }\n\n _createClass(PublishTitleInput, [{\n key: 'handleInput',\n value: function handleInput(e) {\n var name = e.target.name;\n var value = e.target.value;\n this.props.onMetadataChange(name, value);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement('input', { type: 'text', id: 'publish-title', className: 'input-text text--large input-text--full-width', name: 'title', placeholder: 'Give your post a title...', onChange: this.handleInput, value: this.props.title });\n }\n }]);\n\n return PublishTitleInput;\n}(_react2.default.Component);\n\nexports.default = PublishTitleInput;\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _publish = __webpack_require__(4);\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(102);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n publish = _ref.publish;\n\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n loggedInChannelShortId: channel.loggedInChannel.shortId,\n fileName: publish.file.name,\n publishInChannel: publish.publishInChannel,\n selectedChannel: publish.selectedChannel,\n claim: publish.claim,\n urlError: publish.error.url\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onClaimChange: function onClaimChange(value) {\n dispatch((0, _publish.updateClaim)(value));\n dispatch((0, _publish.updateError)('publishSubmit', null));\n },\n onUrlError: function onUrlError(value) {\n dispatch((0, _publish.updateError)('url', value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nvar _PublishUrlMiddleDisplay = __webpack_require__(103);\n\nvar _PublishUrlMiddleDisplay2 = _interopRequireDefault(_PublishUrlMiddleDisplay);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishUrlInput = function (_React$Component) {\n _inherits(PublishUrlInput, _React$Component);\n\n function PublishUrlInput(props) {\n _classCallCheck(this, PublishUrlInput);\n\n var _this = _possibleConstructorReturn(this, (PublishUrlInput.__proto__ || Object.getPrototypeOf(PublishUrlInput)).call(this, props));\n\n _this.handleInput = _this.handleInput.bind(_this);\n return _this;\n }\n\n _createClass(PublishUrlInput, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props = this.props,\n claim = _props.claim,\n fileName = _props.fileName;\n\n if (!claim) {\n this.setClaimName(fileName);\n }\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(_ref) {\n var claim = _ref.claim,\n fileName = _ref.fileName;\n\n // if a new file was chosen, update the claim name\n if (fileName !== this.props.fileName) {\n return this.setClaimName(fileName);\n }\n // if the claim has updated, check its availability\n if (claim !== this.props.claim) {\n this.validateClaim(claim);\n }\n }\n }, {\n key: 'handleInput',\n value: function handleInput(event) {\n var value = event.target.value;\n value = this.cleanseInput(value);\n // update the state\n this.props.onClaimChange(value);\n }\n }, {\n key: 'cleanseInput',\n value: function cleanseInput(input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n }, {\n key: 'setClaimName',\n value: function setClaimName(fileName) {\n var fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.'));\n var cleanClaimName = this.cleanseInput(fileNameWithoutEnding);\n this.props.onClaimChange(cleanClaimName);\n }\n }, {\n key: 'validateClaim',\n value: function validateClaim(claim) {\n var _this2 = this;\n\n if (!claim) {\n return this.props.onUrlError('Enter a url above');\n }\n (0, _request2.default)('/api/claim/availability/' + claim).then(function () {\n _this2.props.onUrlError(null);\n }).catch(function (error) {\n _this2.props.onUrlError(error.message);\n });\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n claim = _props2.claim,\n loggedInChannelName = _props2.loggedInChannelName,\n loggedInChannelShortId = _props2.loggedInChannelShortId,\n publishInChannel = _props2.publishInChannel,\n selectedChannel = _props2.selectedChannel,\n urlError = _props2.urlError;\n\n return _react2.default.createElement(\n 'div',\n { className: 'column column--10 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary span--relative' },\n _react2.default.createElement(\n 'span',\n { className: 'url-text--secondary' },\n 'spee.ch / '\n ),\n _react2.default.createElement(_PublishUrlMiddleDisplay2.default, {\n publishInChannel: publishInChannel,\n selectedChannel: selectedChannel,\n loggedInChannelName: loggedInChannelName,\n loggedInChannelShortId: loggedInChannelShortId\n }),\n _react2.default.createElement('input', { type: 'text', id: 'claim-name-input', className: 'input-text', name: 'claim', placeholder: 'your-url-here', onChange: this.handleInput, value: claim }),\n claim && !urlError && _react2.default.createElement(\n 'span',\n { id: 'input-success-claim-name', className: 'info-message--success span--absolute' },\n '\\u2713'\n ),\n urlError && _react2.default.createElement(\n 'span',\n { id: 'input-success-channel-name', className: 'info-message--failure span--absolute' },\n '\\u2716'\n )\n ),\n _react2.default.createElement(\n 'div',\n null,\n urlError ? _react2.default.createElement(\n 'p',\n { id: 'input-error-claim-name', className: 'info-message--failure' },\n urlError\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Choose a custom url'\n )\n )\n );\n }\n }]);\n\n return PublishUrlInput;\n}(_react2.default.Component);\n\nexports.default = PublishUrlInput;\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction UrlMiddle(_ref) {\n var publishInChannel = _ref.publishInChannel,\n selectedChannel = _ref.selectedChannel,\n loggedInChannelName = _ref.loggedInChannelName,\n loggedInChannelShortId = _ref.loggedInChannelShortId;\n\n if (publishInChannel) {\n if (selectedChannel === loggedInChannelName) {\n return _react2.default.createElement(\n 'span',\n { id: 'url-channel', className: 'url-text--secondary' },\n loggedInChannelName,\n ':',\n loggedInChannelShortId,\n ' /'\n );\n }\n return _react2.default.createElement(\n 'span',\n { id: 'url-channel-placeholder', className: 'url-text--secondary tooltip' },\n '@channel',\n _react2.default.createElement(\n 'span',\n {\n className: 'tooltip-text' },\n 'Select a channel below'\n ),\n ' /'\n );\n }\n return _react2.default.createElement(\n 'span',\n { id: 'url-no-channel-placeholder', className: 'url-text--secondary tooltip' },\n 'xyz',\n _react2.default.createElement(\n 'span',\n { className: 'tooltip-text' },\n 'This will be a random id'\n ),\n ' /'\n );\n}\n\nUrlMiddle.propTypes = {\n publishInChannel: _propTypes2.default.bool.isRequired,\n loggedInChannelName: _propTypes2.default.string,\n loggedInChannelShortId: _propTypes2.default.string\n};\n\nexports.default = UrlMiddle;\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(105);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var file = _ref.publish.file;\n\n return {\n file: file\n };\n};\n\nvar mapDispatchToProps = {\n onNewThumbnail: _publish.onNewThumbnail\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction dataURItoBlob(dataURI) {\n // convert base64/URLEncoded data component to raw binary data held in a string\n var byteString = atob(dataURI.split(',')[1]);\n // separate out the mime component\n var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n // write the bytes of the string to a typed array\n var ia = new Uint8Array(byteString.length);\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n return new Blob([ia], { type: mimeString });\n}\n\nvar PublishThumbnailInput = function (_React$Component) {\n _inherits(PublishThumbnailInput, _React$Component);\n\n function PublishThumbnailInput(props) {\n _classCallCheck(this, PublishThumbnailInput);\n\n var _this = _possibleConstructorReturn(this, (PublishThumbnailInput.__proto__ || Object.getPrototypeOf(PublishThumbnailInput)).call(this, props));\n\n _this.state = {\n videoSource: null,\n error: null,\n sliderMinRange: 1,\n sliderMaxRange: null,\n sliderValue: null\n };\n _this.handleVideoLoadedData = _this.handleVideoLoadedData.bind(_this);\n _this.handleSliderChange = _this.handleSliderChange.bind(_this);\n _this.createThumbnail = _this.createThumbnail.bind(_this);\n return _this;\n }\n\n _createClass(PublishThumbnailInput, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var file = this.props.file;\n\n this.setVideoSource(file);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n // if file changes\n if (nextProps.file && nextProps.file !== this.props.file) {\n var file = nextProps.file;\n\n this.setVideoSource(file);\n };\n }\n }, {\n key: 'setVideoSource',\n value: function setVideoSource(file) {\n var _this2 = this;\n\n var previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = function () {\n var dataUri = previewReader.result;\n var blob = dataURItoBlob(dataUri);\n var videoSource = URL.createObjectURL(blob);\n _this2.setState({ videoSource: videoSource });\n };\n }\n }, {\n key: 'handleVideoLoadedData',\n value: function handleVideoLoadedData(event) {\n var duration = event.target.duration;\n var totalMinutes = Math.floor(duration / 60);\n var totalSeconds = Math.floor(duration % 60);\n // set the slider\n this.setState({\n sliderMaxRange: duration * 100,\n sliderValue: duration * 100 / 2,\n totalMinutes: totalMinutes,\n totalSeconds: totalSeconds\n });\n // update the current time of the video\n var video = document.getElementById('video-thumb-player');\n video.currentTime = duration / 2;\n }\n }, {\n key: 'handleSliderChange',\n value: function handleSliderChange(event) {\n var value = parseInt(event.target.value);\n // update the slider value\n this.setState({\n sliderValue: value\n });\n // update the current time of the video\n var video = document.getElementById('video-thumb-player');\n video.currentTime = value / 100;\n }\n }, {\n key: 'createThumbnail',\n value: function createThumbnail() {\n // take a snapshot\n var video = document.getElementById('video-thumb-player');\n var canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);\n var dataUrl = canvas.toDataURL();\n var blob = dataURItoBlob(dataUrl);\n var snapshot = new File([blob], 'thumbnail.png', {\n type: 'image/png'\n });\n // set the thumbnail in redux store\n if (snapshot) {\n this.props.onNewThumbnail(snapshot);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _state = this.state,\n error = _state.error,\n videoSource = _state.videoSource,\n sliderMinRange = _state.sliderMinRange,\n sliderMaxRange = _state.sliderMaxRange,\n sliderValue = _state.sliderValue,\n totalMinutes = _state.totalMinutes,\n totalSeconds = _state.totalSeconds;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'label',\n { className: 'label' },\n 'Thumbnail:'\n ),\n _react2.default.createElement('video', {\n id: 'video-thumb-player',\n preload: 'metadata',\n muted: true,\n style: { display: 'none' },\n playsInline: true,\n onLoadedData: this.handleVideoLoadedData,\n src: videoSource,\n onSeeked: this.createThumbnail\n }),\n sliderValue ? _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'flex-container--row flex-container--space-between-center', style: { width: '100%' } },\n _react2.default.createElement(\n 'span',\n { className: 'info-message' },\n '0\\'00\"'\n ),\n _react2.default.createElement(\n 'span',\n { className: 'info-message' },\n totalMinutes,\n '\\'',\n totalSeconds,\n '\"'\n )\n ),\n _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement('input', {\n type: 'range',\n min: sliderMinRange,\n max: sliderMaxRange,\n value: sliderValue,\n className: 'slider',\n onChange: this.handleSliderChange\n })\n )\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'loading... '\n ),\n error ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n error\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Use slider to set thumbnail'\n )\n );\n }\n }]);\n\n return PublishThumbnailInput;\n}(_react2.default.Component);\n\nexports.default = PublishThumbnailInput;\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(107);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n showMetadataInputs: publish.showMetadataInputs,\n description: publish.metadata.description,\n license: publish.metadata.license,\n nsfw: publish.metadata.nsfw\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onMetadataChange: function onMetadataChange(name, value) {\n dispatch((0, _publish.updateMetadata)(name, value));\n },\n onToggleMetadataInputs: function onToggleMetadataInputs(value) {\n dispatch((0, _publish.toggleMetadataInputs)(value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ExpandingTextArea = __webpack_require__(108);\n\nvar _ExpandingTextArea2 = _interopRequireDefault(_ExpandingTextArea);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishMetadataInputs = function (_React$Component) {\n _inherits(PublishMetadataInputs, _React$Component);\n\n function PublishMetadataInputs(props) {\n _classCallCheck(this, PublishMetadataInputs);\n\n var _this = _possibleConstructorReturn(this, (PublishMetadataInputs.__proto__ || Object.getPrototypeOf(PublishMetadataInputs)).call(this, props));\n\n _this.toggleShowInputs = _this.toggleShowInputs.bind(_this);\n _this.handleInput = _this.handleInput.bind(_this);\n _this.handleSelect = _this.handleSelect.bind(_this);\n return _this;\n }\n\n _createClass(PublishMetadataInputs, [{\n key: 'toggleShowInputs',\n value: function toggleShowInputs() {\n this.props.onToggleMetadataInputs(!this.props.showMetadataInputs);\n }\n }, {\n key: 'handleInput',\n value: function handleInput(event) {\n var target = event.target;\n var value = target.type === 'checkbox' ? target.checked : target.value;\n var name = target.name;\n this.props.onMetadataChange(name, value);\n }\n }, {\n key: 'handleSelect',\n value: function handleSelect(event) {\n var name = event.target.name;\n var selectedOption = event.target.selectedOptions[0].value;\n this.props.onMetadataChange(name, selectedOption);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { id: 'publish-details', className: 'row row--padded row--no-top row--wide' },\n this.props.showMetadataInputs && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'row row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'label',\n { htmlFor: 'publish-license', className: 'label' },\n 'Description:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7 column--sml-10' },\n _react2.default.createElement(_ExpandingTextArea2.default, {\n id: 'publish-description',\n className: 'textarea textarea--primary textarea--full-width',\n rows: 1,\n maxLength: 2000,\n style: { maxHeight: 200 },\n name: 'description',\n placeholder: 'Optional description',\n value: this.props.description,\n onChange: this.handleInput })\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--med-10' },\n _react2.default.createElement(\n 'label',\n { htmlFor: 'publish-license', className: 'label' },\n 'License:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7 column--sml-10' },\n _react2.default.createElement(\n 'select',\n { type: 'text', name: 'license', id: 'publish-license', className: 'select select--primary', onChange: this.handleSelect },\n _react2.default.createElement(\n 'option',\n { value: ' ' },\n 'Unspecified'\n ),\n _react2.default.createElement(\n 'option',\n { value: 'Public Domain' },\n 'Public Domain'\n ),\n _react2.default.createElement(\n 'option',\n { value: 'Creative Commons' },\n 'Creative Commons'\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3' },\n _react2.default.createElement(\n 'label',\n { htmlFor: 'publish-nsfw', className: 'label' },\n 'Mature:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement('input', { className: 'input-checkbox', type: 'checkbox', id: 'publish-nsfw', name: 'nsfw', value: this.props.nsfw, onChange: this.handleInput })\n )\n )\n ),\n _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: this.toggleShowInputs },\n this.props.showMetadataInputs ? 'less' : 'more'\n )\n );\n }\n }]);\n\n return PublishMetadataInputs;\n}(_react2.default.Component);\n\nexports.default = PublishMetadataInputs;\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(10);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ExpandingTextarea = function (_Component) {\n _inherits(ExpandingTextarea, _Component);\n\n function ExpandingTextarea(props) {\n _classCallCheck(this, ExpandingTextarea);\n\n var _this = _possibleConstructorReturn(this, (ExpandingTextarea.__proto__ || Object.getPrototypeOf(ExpandingTextarea)).call(this, props));\n\n _this._handleChange = _this._handleChange.bind(_this);\n return _this;\n }\n\n _createClass(ExpandingTextarea, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.adjustTextarea({});\n }\n }, {\n key: '_handleChange',\n value: function _handleChange(event) {\n var onChange = this.props.onChange;\n\n if (onChange) onChange(event);\n this.adjustTextarea(event);\n }\n }, {\n key: 'adjustTextarea',\n value: function adjustTextarea(_ref) {\n var _ref$target = _ref.target,\n target = _ref$target === undefined ? this.el : _ref$target;\n\n target.style.height = 0;\n target.style.height = target.scrollHeight + 'px';\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var rest = _objectWithoutProperties(this.props, []);\n\n return _react2.default.createElement('textarea', _extends({}, rest, {\n ref: function ref(x) {\n return _this2.el = x;\n },\n onChange: this._handleChange\n }));\n }\n }]);\n\n return ExpandingTextarea;\n}(_react.Component);\n\nExpandingTextarea.propTypes = {\n onChange: _propTypes2.default.func\n};\n\nexports.default = ExpandingTextarea;\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(110);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n publish = _ref.publish;\n\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n publishInChannel: publish.publishInChannel,\n selectedChannel: publish.selectedChannel,\n channelError: publish.error.channel\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onPublishInChannelChange: function onPublishInChannelChange(value) {\n dispatch((0, _publish.updateError)('channel', null));\n dispatch((0, _publish.setPublishInChannel)(value));\n },\n onChannelSelect: function onChannelSelect(value) {\n dispatch((0, _publish.updateError)('channel', null));\n dispatch((0, _publish.updateSelectedChannel)(value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 110 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ChannelLoginForm = __webpack_require__(39);\n\nvar _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm);\n\nvar _ChannelCreateForm = __webpack_require__(40);\n\nvar _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm);\n\nvar _publish_channel_select_states = __webpack_require__(33);\n\nvar states = _interopRequireWildcard(_publish_channel_select_states);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelSelect = function (_React$Component) {\n _inherits(ChannelSelect, _React$Component);\n\n function ChannelSelect(props) {\n _classCallCheck(this, ChannelSelect);\n\n var _this = _possibleConstructorReturn(this, (ChannelSelect.__proto__ || Object.getPrototypeOf(ChannelSelect)).call(this, props));\n\n _this.toggleAnonymousPublish = _this.toggleAnonymousPublish.bind(_this);\n _this.handleSelection = _this.handleSelection.bind(_this);\n return _this;\n }\n\n _createClass(ChannelSelect, [{\n key: 'toggleAnonymousPublish',\n value: function toggleAnonymousPublish(event) {\n var value = event.target.value;\n if (value === 'anonymous') {\n this.props.onPublishInChannelChange(false);\n } else {\n this.props.onPublishInChannelChange(true);\n }\n }\n }, {\n key: 'handleSelection',\n value: function handleSelection(event) {\n var selectedOption = event.target.selectedOptions[0].value;\n this.props.onChannelSelect(selectedOption);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'form',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--med-10' },\n _react2.default.createElement('input', { type: 'radio', name: 'anonymous-or-channel', id: 'anonymous-radio', className: 'input-radio', value: 'anonymous', checked: !this.props.publishInChannel, onChange: this.toggleAnonymousPublish }),\n _react2.default.createElement(\n 'label',\n { className: 'label label--pointer', htmlFor: 'anonymous-radio' },\n 'Anonymous'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7 column--med-10' },\n _react2.default.createElement('input', { type: 'radio', name: 'anonymous-or-channel', id: 'channel-radio', className: 'input-radio', value: 'in a channel', checked: this.props.publishInChannel, onChange: this.toggleAnonymousPublish }),\n _react2.default.createElement(\n 'label',\n { className: 'label label--pointer', htmlFor: 'channel-radio' },\n 'In a channel'\n )\n ),\n this.props.channelError ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n this.props.channelError\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Publish anonymously or in a channel'\n )\n ),\n this.props.publishInChannel && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'column column--3' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'channel-name-select' },\n 'Channel:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement(\n 'select',\n { type: 'text', id: 'channel-name-select', className: 'select select--arrow', value: this.props.selectedChannel, onChange: this.handleSelection },\n this.props.loggedInChannelName && _react2.default.createElement(\n 'option',\n { value: this.props.loggedInChannelName, id: 'publish-channel-select-channel-option' },\n this.props.loggedInChannelName\n ),\n _react2.default.createElement(\n 'option',\n { value: states.LOGIN },\n 'Existing'\n ),\n _react2.default.createElement(\n 'option',\n { value: states.CREATE },\n 'New'\n )\n )\n ),\n this.props.selectedChannel === states.LOGIN && _react2.default.createElement(_ChannelLoginForm2.default, null),\n this.props.selectedChannel === states.CREATE && _react2.default.createElement(_ChannelCreateForm2.default, null)\n )\n );\n }\n }]);\n\n return ChannelSelect;\n}(_react2.default.Component);\n\nexports.default = ChannelSelect;\n\n/***/ }),\n/* 111 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelLoginForm = function (_React$Component) {\n _inherits(ChannelLoginForm, _React$Component);\n\n function ChannelLoginForm(props) {\n _classCallCheck(this, ChannelLoginForm);\n\n var _this = _possibleConstructorReturn(this, (ChannelLoginForm.__proto__ || Object.getPrototypeOf(ChannelLoginForm)).call(this, props));\n\n _this.state = {\n error: null,\n name: '',\n password: ''\n };\n _this.handleInput = _this.handleInput.bind(_this);\n _this.loginToChannel = _this.loginToChannel.bind(_this);\n return _this;\n }\n\n _createClass(ChannelLoginForm, [{\n key: 'handleInput',\n value: function handleInput(event) {\n var name = event.target.name;\n var value = event.target.value;\n this.setState(_defineProperty({}, name, value));\n }\n }, {\n key: 'loginToChannel',\n value: function loginToChannel(event) {\n var _this2 = this;\n\n event.preventDefault();\n var params = {\n method: 'POST',\n body: JSON.stringify({ username: this.state.name, password: this.state.password }),\n headers: new Headers({\n 'Content-Type': 'application/json'\n }),\n credentials: 'include'\n };\n (0, _request2.default)('login', params).then(function (_ref) {\n var success = _ref.success,\n channelName = _ref.channelName,\n shortChannelId = _ref.shortChannelId,\n channelClaimId = _ref.channelClaimId,\n message = _ref.message;\n\n if (success) {\n _this2.props.onChannelLogin(channelName, shortChannelId, channelClaimId);\n } else {\n _this2.setState({ 'error': message });\n };\n }).catch(function (error) {\n if (error.message) {\n _this2.setState({ 'error': error.message });\n } else {\n _this2.setState({ 'error': error });\n }\n });\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'form',\n { id: 'channel-login-form' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'channel-login-name-input' },\n 'Name:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary flex-container--row flex-container--left-bottom' },\n _react2.default.createElement(\n 'span',\n null,\n '@'\n ),\n _react2.default.createElement('input', { type: 'text', id: 'channel-login-name-input', className: 'input-text', name: 'name', placeholder: 'Your Channel Name', value: this.state.channelName, onChange: this.handleInput })\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'channel-login-password-input' },\n 'Password:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary' },\n _react2.default.createElement('input', { type: 'password', id: 'channel-login-password-input', name: 'password', className: 'input-text', placeholder: '', value: this.state.channelPassword, onChange: this.handleInput })\n )\n )\n ),\n this.state.error ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n this.state.error\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Enter the name and password for your channel'\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary', onClick: this.loginToChannel },\n 'Authenticate'\n )\n )\n );\n }\n }]);\n\n return ChannelLoginForm;\n}(_react2.default.Component);\n\nexports.default = ChannelLoginForm;\n\n/***/ }),\n/* 112 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ProgressBar = __webpack_require__(20);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelCreateForm = function (_React$Component) {\n _inherits(ChannelCreateForm, _React$Component);\n\n function ChannelCreateForm(props) {\n _classCallCheck(this, ChannelCreateForm);\n\n var _this = _possibleConstructorReturn(this, (ChannelCreateForm.__proto__ || Object.getPrototypeOf(ChannelCreateForm)).call(this, props));\n\n _this.state = {\n error: null,\n channel: '',\n password: '',\n status: null\n };\n _this.handleChannelInput = _this.handleChannelInput.bind(_this);\n _this.handleInput = _this.handleInput.bind(_this);\n _this.createChannel = _this.createChannel.bind(_this);\n return _this;\n }\n\n _createClass(ChannelCreateForm, [{\n key: 'cleanseChannelInput',\n value: function cleanseChannelInput(input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n }, {\n key: 'handleChannelInput',\n value: function handleChannelInput(event) {\n var value = event.target.value;\n value = this.cleanseChannelInput(value);\n this.setState({ channel: value });\n if (value) {\n this.updateIsChannelAvailable(value);\n } else {\n this.setState({ error: 'Please enter a channel name' });\n }\n }\n }, {\n key: 'handleInput',\n value: function handleInput(event) {\n var name = event.target.name;\n var value = event.target.value;\n this.setState(_defineProperty({}, name, value));\n }\n }, {\n key: 'updateIsChannelAvailable',\n value: function updateIsChannelAvailable(channel) {\n var _this2 = this;\n\n var channelWithAtSymbol = '@' + channel;\n (0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol).then(function () {\n _this2.setState({ 'error': null });\n }).catch(function (error) {\n _this2.setState({ 'error': error.message });\n });\n }\n }, {\n key: 'checkIsChannelAvailable',\n value: function checkIsChannelAvailable(channel) {\n var channelWithAtSymbol = '@' + channel;\n return (0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol);\n }\n }, {\n key: 'checkIsPasswordProvided',\n value: function checkIsPasswordProvided(password) {\n return new Promise(function (resolve, reject) {\n if (!password || password.length < 1) {\n return reject(new Error('Please provide a password'));\n }\n resolve();\n });\n }\n }, {\n key: 'makePublishChannelRequest',\n value: function makePublishChannelRequest(username, password) {\n var params = {\n method: 'POST',\n body: JSON.stringify({ username: username, password: password }),\n headers: new Headers({\n 'Content-Type': 'application/json'\n }),\n credentials: 'include'\n };\n return new Promise(function (resolve, reject) {\n (0, _request2.default)('/signup', params).then(function (result) {\n return resolve(result);\n }).catch(function (error) {\n reject(new Error('Unfortunately, we encountered an error while creating your channel. Please let us know in Discord! ' + error.message));\n });\n });\n }\n }, {\n key: 'createChannel',\n value: function createChannel(event) {\n var _this3 = this;\n\n event.preventDefault();\n this.checkIsPasswordProvided(this.state.password).then(function () {\n return _this3.checkIsChannelAvailable(_this3.state.channel);\n }).then(function () {\n _this3.setState({ status: 'We are publishing your new channel. Sit tight...' });\n return _this3.makePublishChannelRequest(_this3.state.channel, _this3.state.password);\n }).then(function (result) {\n _this3.setState({ status: null });\n _this3.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId);\n }).catch(function (error) {\n if (error.message) {\n _this3.setState({ 'error': error.message, status: null });\n } else {\n _this3.setState({ 'error': error, status: null });\n };\n });\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n !this.state.status ? _react2.default.createElement(\n 'form',\n { id: 'publish-channel-form' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'new-channel-name' },\n 'Name:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary flex-container--row flex-container--left-bottom span--relative' },\n _react2.default.createElement(\n 'span',\n null,\n '@'\n ),\n _react2.default.createElement('input', { type: 'text', name: 'channel', id: 'new-channel-name', className: 'input-text', placeholder: 'exampleChannelName', value: this.state.channel, onChange: this.handleChannelInput }),\n this.state.channel && !this.state.error && _react2.default.createElement(\n 'span',\n { id: 'input-success-channel-name', className: 'info-message--success span--absolute' },\n '\\u2713'\n ),\n this.state.error && _react2.default.createElement(\n 'span',\n { id: 'input-success-channel-name', className: 'info-message--failure span--absolute' },\n '\\u2716'\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'new-channel-password' },\n 'Password:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary' },\n _react2.default.createElement('input', { type: 'password', name: 'password', id: 'new-channel-password', className: 'input-text', placeholder: '', value: this.state.password, onChange: this.handleInput })\n )\n )\n ),\n this.state.error ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n this.state.error\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Choose a name and password for your channel'\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary', onClick: this.createChannel },\n 'Create Channel'\n )\n )\n ) : _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n this.state.status\n ),\n _react2.default.createElement(_ProgressBar2.default, { size: 12 })\n )\n );\n }\n }]);\n\n return ChannelCreateForm;\n}(_react2.default.Component);\n\nexports.default = ChannelCreateForm;\n\n/***/ }),\n/* 113 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ActiveStatusBar = function ActiveStatusBar() {\n return _react2.default.createElement(\n 'span',\n { className: 'progress-bar progress-bar--active' },\n '| '\n );\n};\n\nexports.default = ActiveStatusBar;\n\n/***/ }),\n/* 114 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar InactiveStatusBar = function InactiveStatusBar() {\n return _react2.default.createElement(\n 'span',\n { className: 'progress-bar progress-bar--inactive' },\n '| '\n );\n};\n\nexports.default = InactiveStatusBar;\n\n/***/ }),\n/* 115 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(4);\n\nvar _view = __webpack_require__(116);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n status: publish.status.status,\n message: publish.status.message\n };\n};\n\nvar mapDispatchToProps = {\n clearFile: _publish.clearFile\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 116 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ProgressBar = __webpack_require__(20);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _publish_claim_states = __webpack_require__(117);\n\nvar publishStates = _interopRequireWildcard(_publish_claim_states);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishStatus = function (_React$Component) {\n _inherits(PublishStatus, _React$Component);\n\n function PublishStatus() {\n _classCallCheck(this, PublishStatus);\n\n return _possibleConstructorReturn(this, (PublishStatus.__proto__ || Object.getPrototypeOf(PublishStatus)).apply(this, arguments));\n }\n\n _createClass(PublishStatus, [{\n key: 'render',\n value: function render() {\n var _props = this.props,\n status = _props.status,\n message = _props.message,\n clearFile = _props.clearFile;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column flex-container--center-center' },\n status === publishStates.LOAD_START && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'File is loading to server'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'blue' },\n '0%'\n )\n ),\n status === publishStates.LOADING && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'File is loading to server'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'blue' },\n message\n )\n )\n ),\n status === publishStates.PUBLISHING && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'Upload complete. Your file is now being published on the blockchain...'\n ),\n _react2.default.createElement(_ProgressBar2.default, { size: 12 }),\n _react2.default.createElement(\n 'p',\n null,\n 'Curious what magic is happening here? ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' },\n 'Learn more.'\n )\n )\n ),\n status === publishStates.SUCCESS && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'Your publish is complete! You are being redirected to it now.'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'If you are not automatically redirected, ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: message },\n 'click here.'\n )\n )\n ),\n status === publishStates.FAILED && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'Something went wrong...'\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'strong',\n null,\n message\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'For help, post the above error text in the #speech channel on the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' },\n 'lbry discord'\n )\n ),\n _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: clearFile },\n 'Reset'\n )\n )\n );\n }\n }]);\n\n return PublishStatus;\n}(_react2.default.Component);\n\n;\n\nexports.default = PublishStatus;\n\n/***/ }),\n/* 117 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LOAD_START = exports.LOAD_START = 'LOAD_START';\nvar LOADING = exports.LOADING = 'LOADING';\nvar PUBLISHING = exports.PUBLISHING = 'PUBLISHING';\nvar SUCCESS = exports.SUCCESS = 'SUCCESS';\nvar FAILED = exports.FAILED = 'FAILED';\n\n/***/ }),\n/* 118 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(119);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n message: publish.disabledMessage\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 119 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishDisabledMessage = function (_React$Component) {\n _inherits(PublishDisabledMessage, _React$Component);\n\n function PublishDisabledMessage() {\n _classCallCheck(this, PublishDisabledMessage);\n\n return _possibleConstructorReturn(this, (PublishDisabledMessage.__proto__ || Object.getPrototypeOf(PublishDisabledMessage)).apply(this, arguments));\n }\n\n _createClass(PublishDisabledMessage, [{\n key: 'render',\n value: function render() {\n var message = this.props.message;\n console.log('this.props.message:', message);\n return _react2.default.createElement(\n 'div',\n { className: 'row dropzone--disabled row--tall flex-container--column flex-container--center-center' },\n _react2.default.createElement(\n 'p',\n { className: 'text--disabled' },\n 'Publishing is currently disabled.'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'text--disabled' },\n message\n )\n );\n }\n }]);\n\n return PublishDisabledMessage;\n}(_react2.default.Component);\n\nexports.default = PublishDisabledMessage;\n\n/***/ }),\n/* 120 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AboutPage = function (_React$Component) {\n _inherits(AboutPage, _React$Component);\n\n function AboutPage() {\n _classCallCheck(this, AboutPage);\n\n return _possibleConstructorReturn(this, (AboutPage.__proto__ || Object.getPrototypeOf(AboutPage)).apply(this, arguments));\n }\n\n _createClass(AboutPage, [{\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: 'About', pageUri: 'about' }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'p',\n { className: 'pull-quote' },\n 'Spee.ch is an open-source project. Please contribute to the existing site, or fork it and make your own.'\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://twitter.com/spee_ch' },\n 'TWITTER'\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch' },\n 'GITHUB'\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://discord.gg/YjYbwhS' },\n 'DISCORD CHANNEL'\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch/blob/master/README.md' },\n 'DOCUMENTATION'\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'p',\n null,\n 'Spee.ch is a media-hosting site that reads from and publishes content to the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://lbry.io' },\n 'LBRY'\n ),\n ' blockchain.'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'Spee.ch is a hosting service, but with the added benefit that it stores your content on a decentralized network of computers -- the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://lbry.io/get' },\n 'LBRY'\n ),\n ' network. This means that your images are stored in multiple locations without a single point of failure.'\n ),\n _react2.default.createElement(\n 'h3',\n null,\n 'Contribute'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'If you have an idea for your own spee.ch-like site on top of LBRY, fork our ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://github.com/lbryio/spee.ch' },\n 'github repo'\n ),\n ' and go to town!'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'If you want to improve spee.ch, join our ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://discord.gg/YjYbwhS' },\n 'discord channel'\n ),\n ' or solve one of our ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://github.com/lbryio/spee.ch/issues' },\n 'github issues'\n ),\n '.'\n )\n )\n )\n )\n );\n }\n }]);\n\n return AboutPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = AboutPage;\n\n/***/ }),\n/* 121 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(122);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel;\n\n return {\n loggedInChannelName: channel.loggedInChannel.name\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 122 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _ChannelLoginForm = __webpack_require__(39);\n\nvar _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm);\n\nvar _ChannelCreateForm = __webpack_require__(40);\n\nvar _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LoginPage = function (_React$Component) {\n _inherits(LoginPage, _React$Component);\n\n function LoginPage() {\n _classCallCheck(this, LoginPage);\n\n return _possibleConstructorReturn(this, (LoginPage.__proto__ || Object.getPrototypeOf(LoginPage)).apply(this, arguments));\n }\n\n _createClass(LoginPage, [{\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(newProps) {\n // re-route the user to the homepage if the user is logged in\n if (newProps.loggedInChannelName !== this.props.loggedInChannelName) {\n this.props.history.push('/');\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: 'Login', pageUri: 'login' }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'p',\n null,\n 'Channels allow you to publish and group content under an identity. You can create a channel for yourself, or share one with like-minded friends. You can create 1 channel, or 100, so whether you\\'re ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: '/@catalonia2017:43dcf47163caa21d8404d9fe9b30f78ef3e146a8' },\n 'documenting important events'\n ),\n ', or making a public repository for ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: '/@catGifs' },\n 'cat gifs'\n ),\n ' (password: \\'1234\\'), try creating a channel for it!'\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'h3',\n { className: 'h3--no-bottom' },\n 'Log in to an existing channel:'\n ),\n _react2.default.createElement(_ChannelLoginForm2.default, null),\n _react2.default.createElement(\n 'h3',\n { className: 'h3--no-bottom' },\n 'Create a brand new channel:'\n ),\n _react2.default.createElement(_ChannelCreateForm2.default, null)\n )\n )\n )\n );\n }\n }]);\n\n return LoginPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = (0, _reactRouterDom.withRouter)(LoginPage);\n\n/***/ }),\n/* 123 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _show = __webpack_require__(8);\n\nvar _view = __webpack_require__(124);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n return {\n error: show.request.error,\n requestType: show.request.type\n };\n};\n\nvar mapDispatchToProps = {\n onHandleShowPageUri: _show.onHandleShowPageUri\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 124 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ErrorPage = __webpack_require__(21);\n\nvar _ErrorPage2 = _interopRequireDefault(_ErrorPage);\n\nvar _ShowAssetLite = __webpack_require__(125);\n\nvar _ShowAssetLite2 = _interopRequireDefault(_ShowAssetLite);\n\nvar _ShowAssetDetails = __webpack_require__(128);\n\nvar _ShowAssetDetails2 = _interopRequireDefault(_ShowAssetDetails);\n\nvar _ShowChannel = __webpack_require__(134);\n\nvar _ShowChannel2 = _interopRequireDefault(_ShowChannel);\n\nvar _show_request_types = __webpack_require__(41);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowPage = function (_React$Component) {\n _inherits(ShowPage, _React$Component);\n\n function ShowPage() {\n _classCallCheck(this, ShowPage);\n\n return _possibleConstructorReturn(this, (ShowPage.__proto__ || Object.getPrototypeOf(ShowPage)).apply(this, arguments));\n }\n\n _createClass(ShowPage, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.props.onHandleShowPageUri(this.props.match.params);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n if (nextProps.match.params !== this.props.match.params) {\n this.props.onHandleShowPageUri(nextProps.match.params);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n error = _props.error,\n requestType = _props.requestType;\n\n if (error) {\n return _react2.default.createElement(_ErrorPage2.default, { error: error });\n }\n switch (requestType) {\n case _show_request_types.CHANNEL:\n return _react2.default.createElement(_ShowChannel2.default, null);\n case _show_request_types.ASSET_LITE:\n return _react2.default.createElement(_ShowAssetLite2.default, null);\n case _show_request_types.ASSET_DETAILS:\n return _react2.default.createElement(_ShowAssetDetails2.default, null);\n default:\n return _react2.default.createElement(\n 'p',\n null,\n 'loading...'\n );\n }\n }\n }]);\n\n return ShowPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowPage;\n\n/***/ }),\n/* 125 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(126);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select request info\n var requestId = show.request.id;\n // select asset info\n var asset = void 0;\n var request = show.requestList[requestId] || null;\n var assetList = show.assetList;\n if (request && assetList) {\n var assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset: asset\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 126 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _AssetDisplay = __webpack_require__(42);\n\nvar _AssetDisplay2 = _interopRequireDefault(_AssetDisplay);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowLite = function (_React$Component) {\n _inherits(ShowLite, _React$Component);\n\n function ShowLite() {\n _classCallCheck(this, ShowLite);\n\n return _possibleConstructorReturn(this, (ShowLite.__proto__ || Object.getPrototypeOf(ShowLite)).apply(this, arguments));\n }\n\n _createClass(ShowLite, [{\n key: 'render',\n value: function render() {\n var asset = this.props.asset;\n\n if (asset) {\n var _asset$claimData = asset.claimData,\n name = _asset$claimData.name,\n claimId = _asset$claimData.claimId;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column flex-container--center-center show-lite-container' },\n _react2.default.createElement(_SEO2.default, { pageTitle: name, asset: asset }),\n _react2.default.createElement(_AssetDisplay2.default, null),\n _react2.default.createElement(\n _reactRouterDom.Link,\n { id: 'asset-boilerpate', className: 'link--primary fine-print', to: '/' + claimId + '/' + name },\n 'hosted via Spee.ch'\n )\n );\n }\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded flex-container--column flex-container--center-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'loading asset data...'\n )\n );\n }\n }]);\n\n return ShowLite;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowLite;\n\n/***/ }),\n/* 127 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ProgressBar = __webpack_require__(20);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _asset_display_states = __webpack_require__(35);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AssetDisplay = function (_React$Component) {\n _inherits(AssetDisplay, _React$Component);\n\n function AssetDisplay() {\n _classCallCheck(this, AssetDisplay);\n\n return _possibleConstructorReturn(this, (AssetDisplay.__proto__ || Object.getPrototypeOf(AssetDisplay)).apply(this, arguments));\n }\n\n _createClass(AssetDisplay, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props$asset$claimDat = this.props.asset.claimData,\n name = _props$asset$claimDat.name,\n claimId = _props$asset$claimDat.claimId;\n\n this.props.onFileRequest(name, claimId);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n status = _props.status,\n error = _props.error,\n _props$asset$claimDat2 = _props.asset.claimData,\n name = _props$asset$claimDat2.name,\n claimId = _props$asset$claimDat2.claimId,\n contentType = _props$asset$claimDat2.contentType,\n fileExt = _props$asset$claimDat2.fileExt,\n thumbnail = _props$asset$claimDat2.thumbnail;\n\n return _react2.default.createElement(\n 'div',\n { id: 'asset-display-component' },\n status === _asset_display_states.LOCAL_CHECK && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n null,\n 'Checking to see if Spee.ch has your asset locally...'\n )\n ),\n status === _asset_display_states.UNAVAILABLE && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n null,\n 'Sit tight, we\\'re searching the LBRY blockchain for your asset!'\n ),\n _react2.default.createElement(_ProgressBar2.default, { size: 12 }),\n _react2.default.createElement(\n 'p',\n null,\n 'Curious what magic is happening here? ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' },\n 'Learn more.'\n )\n )\n ),\n status === _asset_display_states.ERROR && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n null,\n 'Unfortunately, we couldn\\'t download your asset from LBRY. You can help us out by sharing the below error message in the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' },\n 'LBRY discord'\n ),\n '.'\n ),\n _react2.default.createElement(\n 'i',\n null,\n _react2.default.createElement(\n 'p',\n { id: 'error-message' },\n error\n )\n )\n ),\n status === _asset_display_states.AVAILABLE && function () {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n return _react2.default.createElement('img', {\n className: 'asset',\n src: '/' + claimId + '/' + name + '.' + fileExt,\n alt: name });\n case 'image/gif':\n return _react2.default.createElement('img', {\n className: 'asset',\n src: '/' + claimId + '/' + name + '.' + fileExt,\n alt: name\n });\n case 'video/mp4':\n return _react2.default.createElement(\n 'video',\n { className: 'asset video', controls: true, poster: thumbnail },\n _react2.default.createElement('source', {\n src: '/' + claimId + '/' + name + '.' + fileExt\n }),\n _react2.default.createElement(\n 'p',\n null,\n 'Your browser does not support the ',\n _react2.default.createElement(\n 'code',\n null,\n 'video'\n ),\n ' element.'\n )\n );\n default:\n return _react2.default.createElement(\n 'p',\n null,\n 'Unsupported file type'\n );\n }\n }()\n );\n }\n }]);\n\n return AssetDisplay;\n}(_react2.default.Component);\n\n;\n\nexports.default = AssetDisplay;\n\n/***/ }),\n/* 128 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(129);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select request info\n var requestId = show.request.id;\n // select asset info\n var asset = void 0;\n var request = show.requestList[requestId] || null;\n var assetList = show.assetList;\n if (request && assetList) {\n var assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset: asset\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 129 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _ErrorPage = __webpack_require__(21);\n\nvar _ErrorPage2 = _interopRequireDefault(_ErrorPage);\n\nvar _AssetTitle = __webpack_require__(130);\n\nvar _AssetTitle2 = _interopRequireDefault(_AssetTitle);\n\nvar _AssetDisplay = __webpack_require__(42);\n\nvar _AssetDisplay2 = _interopRequireDefault(_AssetDisplay);\n\nvar _AssetInfo = __webpack_require__(132);\n\nvar _AssetInfo2 = _interopRequireDefault(_AssetInfo);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowAssetDetails = function (_React$Component) {\n _inherits(ShowAssetDetails, _React$Component);\n\n function ShowAssetDetails() {\n _classCallCheck(this, ShowAssetDetails);\n\n return _possibleConstructorReturn(this, (ShowAssetDetails.__proto__ || Object.getPrototypeOf(ShowAssetDetails)).apply(this, arguments));\n }\n\n _createClass(ShowAssetDetails, [{\n key: 'render',\n value: function render() {\n var asset = this.props.asset;\n\n if (asset) {\n var name = asset.claimData.name;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: name + ' - details', asset: asset }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(_AssetTitle2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded show-details-container' },\n _react2.default.createElement(_AssetDisplay2.default, null)\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(_AssetInfo2.default, null)\n )\n )\n )\n );\n };\n return _react2.default.createElement(_ErrorPage2.default, { error: 'loading asset data...' });\n }\n }]);\n\n return ShowAssetDetails;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowAssetDetails;\n\n/***/ }),\n/* 130 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(131);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _show = __webpack_require__(13);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n var _selectAsset = (0, _show.selectAsset)(show),\n title = _selectAsset.claimData.title;\n\n return {\n title: title\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 131 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AssetTitle = function AssetTitle(_ref) {\n var title = _ref.title;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'span',\n { className: 'text--large' },\n title\n )\n );\n};\n\nexports.default = AssetTitle;\n\n/***/ }),\n/* 132 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(133);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _show = __webpack_require__(13);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select asset\n var asset = (0, _show.selectAsset)(show);\n // return props\n return {\n asset: asset\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 133 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AssetInfo = function (_React$Component) {\n _inherits(AssetInfo, _React$Component);\n\n function AssetInfo(props) {\n _classCallCheck(this, AssetInfo);\n\n var _this = _possibleConstructorReturn(this, (AssetInfo.__proto__ || Object.getPrototypeOf(AssetInfo)).call(this, props));\n\n _this.copyToClipboard = _this.copyToClipboard.bind(_this);\n return _this;\n }\n\n _createClass(AssetInfo, [{\n key: 'copyToClipboard',\n value: function copyToClipboard(event) {\n var elementToCopy = event.target.dataset.elementtocopy;\n var element = document.getElementById(elementToCopy);\n element.select();\n try {\n document.execCommand('copy');\n } catch (err) {\n this.setState({ error: 'Oops, unable to copy' });\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props$asset = this.props.asset,\n shortId = _props$asset.shortId,\n _props$asset$claimDat = _props$asset.claimData,\n channelName = _props$asset$claimDat.channelName,\n certificateId = _props$asset$claimDat.certificateId,\n description = _props$asset$claimDat.description,\n name = _props$asset$claimDat.name,\n claimId = _props$asset$claimDat.claimId,\n fileExt = _props$asset$claimDat.fileExt,\n contentType = _props$asset$claimDat.contentType,\n thumbnail = _props$asset$claimDat.thumbnail,\n host = _props$asset$claimDat.host;\n\n return _react2.default.createElement(\n 'div',\n null,\n channelName && _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Channel:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { to: '/' + channelName + ':' + certificateId },\n channelName\n )\n )\n )\n ),\n description && _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n description\n )\n ),\n _react2.default.createElement(\n 'div',\n { id: 'show-share-buttons' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Share:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'div',\n {\n className: 'row row--short row--wide flex-container--row flex-container--space-between-bottom flex-container--wrap' },\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://twitter.com/intent/tweet?text=' + host + '/' + shortId + '/' + name },\n 'twitter'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://www.facebook.com/sharer/sharer.php?u=' + host + '/' + shortId + '/' + name },\n 'facebook'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'http://tumblr.com/widgets/share/tool?canonicalUrl=' + host + '/' + shortId + '/' + name },\n 'tumblr'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://www.reddit.com/submit?url=' + host + '/' + shortId + '/' + name + '&title=' + name },\n 'reddit'\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'div',\n { id: 'show-short-link' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Link:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--short row--wide' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement(\n 'div',\n { className: 'input-error', id: 'input-error-copy-short-link', hidden: 'true' },\n 'error here'\n ),\n _react2.default.createElement('input', { type: 'text', id: 'short-link', className: 'input-disabled input-text--full-width', readOnly: true,\n spellCheck: 'false',\n value: host + '/' + shortId + '/' + name + '.' + fileExt,\n onClick: this.select })\n ),\n _react2.default.createElement('div', { className: 'column column--1' }),\n _react2.default.createElement(\n 'div',\n { className: 'column column--2' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary button--wide', 'data-elementtocopy': 'short-link',\n onClick: this.copyToClipboard },\n 'copy'\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { id: 'show-embed-code' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Embed:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--short row--wide' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement(\n 'div',\n { className: 'input-error', id: 'input-error-copy-embed-text', hidden: 'true' },\n 'error here'\n ),\n contentType === 'video/mp4' ? _react2.default.createElement('input', { type: 'text', id: 'embed-text', className: 'input-disabled input-text--full-width', readOnly: true,\n onClick: this.select, spellCheck: 'false',\n value: '' }) : _react2.default.createElement('input', { type: 'text', id: 'embed-text', className: 'input-disabled input-text--full-width', readOnly: true,\n onClick: this.select, spellCheck: 'false',\n value: ''\n })\n ),\n _react2.default.createElement('div', { className: 'column column--1' }),\n _react2.default.createElement(\n 'div',\n { className: 'column column--2' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary button--wide', 'data-elementtocopy': 'embed-text',\n onClick: this.copyToClipboard },\n 'copy'\n )\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'flex-container--row flex-container--space-between-bottom' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { className: 'link--primary', to: '/' + shortId + '/' + name + '.' + fileExt },\n _react2.default.createElement(\n 'span',\n {\n className: 'text' },\n 'Direct Link'\n )\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: host + '/' + claimId + '/' + name + '.' + fileExt, download: name },\n 'Download'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://lbry.io/dmca' },\n 'Report'\n )\n )\n );\n }\n }]);\n\n return AssetInfo;\n}(_react2.default.Component);\n\n;\n\nexports.default = AssetInfo;\n\n/***/ }),\n/* 134 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(135);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select request info\n var requestId = show.request.id;\n // select request\n var previousRequest = show.requestList[requestId] || null;\n // select channel\n var channel = void 0;\n if (previousRequest) {\n var channelKey = previousRequest.key;\n channel = show.channelList[channelKey] || null;\n }\n return {\n channel: channel\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 135 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(9);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _ErrorPage = __webpack_require__(21);\n\nvar _ErrorPage2 = _interopRequireDefault(_ErrorPage);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _ChannelClaimsDisplay = __webpack_require__(136);\n\nvar _ChannelClaimsDisplay2 = _interopRequireDefault(_ChannelClaimsDisplay);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowChannel = function (_React$Component) {\n _inherits(ShowChannel, _React$Component);\n\n function ShowChannel() {\n _classCallCheck(this, ShowChannel);\n\n return _possibleConstructorReturn(this, (ShowChannel.__proto__ || Object.getPrototypeOf(ShowChannel)).apply(this, arguments));\n }\n\n _createClass(ShowChannel, [{\n key: 'render',\n value: function render() {\n var channel = this.props.channel;\n\n if (channel) {\n var name = channel.name,\n longId = channel.longId,\n shortId = channel.shortId;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: name, channel: channel }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(\n 'h2',\n null,\n 'channel name: ',\n name\n ),\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'full channel id: ',\n longId\n ),\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'short channel id: ',\n shortId\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(_ChannelClaimsDisplay2.default, null)\n )\n )\n );\n };\n return _react2.default.createElement(_ErrorPage2.default, { error: 'loading channel data...' });\n }\n }]);\n\n return ShowChannel;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowChannel;\n\n/***/ }),\n/* 136 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _show = __webpack_require__(8);\n\nvar _view = __webpack_require__(137);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select channel key\n var request = show.requestList[show.request.id];\n var channelKey = request.key;\n // select channel claims\n var channel = show.channelList[channelKey] || null;\n // return props\n return {\n channelKey: channelKey,\n channel: channel\n };\n};\n\nvar mapDispatchToProps = {\n onUpdateChannelClaims: _show.onUpdateChannelClaims\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 137 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _AssetPreview = __webpack_require__(138);\n\nvar _AssetPreview2 = _interopRequireDefault(_AssetPreview);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelClaimsDisplay = function (_React$Component) {\n _inherits(ChannelClaimsDisplay, _React$Component);\n\n function ChannelClaimsDisplay(props) {\n _classCallCheck(this, ChannelClaimsDisplay);\n\n var _this = _possibleConstructorReturn(this, (ChannelClaimsDisplay.__proto__ || Object.getPrototypeOf(ChannelClaimsDisplay)).call(this, props));\n\n _this.showNextResultsPage = _this.showNextResultsPage.bind(_this);\n _this.showPreviousResultsPage = _this.showPreviousResultsPage.bind(_this);\n return _this;\n }\n\n _createClass(ChannelClaimsDisplay, [{\n key: 'showPreviousResultsPage',\n value: function showPreviousResultsPage() {\n var currentPage = this.props.channel.claimsData.currentPage;\n\n var previousPage = parseInt(currentPage) - 1;\n this.showNewPage(previousPage);\n }\n }, {\n key: 'showNextResultsPage',\n value: function showNextResultsPage() {\n var currentPage = this.props.channel.claimsData.currentPage;\n\n var nextPage = parseInt(currentPage) + 1;\n this.showNewPage(nextPage);\n }\n }, {\n key: 'showNewPage',\n value: function showNewPage(page) {\n var _props = this.props,\n channelKey = _props.channelKey,\n _props$channel = _props.channel,\n name = _props$channel.name,\n longId = _props$channel.longId;\n\n this.props.onUpdateChannelClaims(channelKey, name, longId, page);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props$channel$claims = this.props.channel.claimsData,\n claims = _props$channel$claims.claims,\n currentPage = _props$channel$claims.currentPage,\n totalPages = _props$channel$claims.totalPages;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall' },\n claims.length > 0 ? _react2.default.createElement(\n 'div',\n null,\n claims.map(function (claim, index) {\n return _react2.default.createElement(_AssetPreview2.default, {\n claimData: claim,\n key: claim.name + '-' + index\n });\n }),\n _react2.default.createElement(\n 'div',\n null,\n currentPage > 1 && _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: this.showPreviousResultsPage },\n 'Previous Page'\n ),\n currentPage < totalPages && _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: this.showNextResultsPage },\n 'Next Page'\n )\n )\n ) : _react2.default.createElement(\n 'p',\n null,\n 'There are no claims in this channel'\n )\n );\n }\n }]);\n\n return ChannelClaimsDisplay;\n}(_react2.default.Component);\n\n;\n\nexports.default = ChannelClaimsDisplay;\n\n/***/ }),\n/* 138 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(139);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var defaultThumbnail = _ref.site.defaults.defaultThumbnail;\n\n return {\n defaultThumbnail: defaultThumbnail\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 139 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AssetPreview = function AssetPreview(_ref) {\n var defaultThumbnail = _ref.defaultThumbnail,\n _ref$claimData = _ref.claimData,\n name = _ref$claimData.name,\n claimId = _ref$claimData.claimId,\n fileExt = _ref$claimData.fileExt,\n contentType = _ref$claimData.contentType,\n thumbnail = _ref$claimData.thumbnail;\n\n var directSourceLink = claimId + '/' + name + '.' + fileExt;\n var showUrlLink = '/' + claimId + '/' + name;\n return _react2.default.createElement(\n 'div',\n { className: 'asset-holder' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { to: showUrlLink },\n function () {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n case 'image/gif':\n return _react2.default.createElement('img', {\n className: 'asset-preview',\n src: directSourceLink,\n alt: name\n });\n case 'video/mp4':\n return _react2.default.createElement('img', {\n className: 'asset-preview video',\n src: thumbnail || defaultThumbnail,\n alt: name\n });\n default:\n return _react2.default.createElement(\n 'p',\n null,\n 'unsupported file type'\n );\n }\n }()\n )\n );\n};\n\nexports.default = AssetPreview;\n\n/***/ }),\n/* 140 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(141);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var _ref$site = _ref.site,\n host = _ref$site.host,\n title = _ref$site.title;\n\n return {\n host: host,\n title: title\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 141 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _NavBar = __webpack_require__(7);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _reactHelmet = __webpack_require__(14);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar FourOhForPage = function (_React$Component) {\n _inherits(FourOhForPage, _React$Component);\n\n function FourOhForPage() {\n _classCallCheck(this, FourOhForPage);\n\n return _possibleConstructorReturn(this, (FourOhForPage.__proto__ || Object.getPrototypeOf(FourOhForPage)).apply(this, arguments));\n }\n\n _createClass(FourOhForPage, [{\n key: 'render',\n value: function render() {\n var _props = this.props,\n title = _props.title,\n host = _props.host;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n _reactHelmet2.default,\n null,\n _react2.default.createElement(\n 'title',\n null,\n title,\n ' - 404'\n ),\n _react2.default.createElement('link', { rel: 'canonical', href: host + '/404' })\n ),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'h2',\n null,\n '404'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'That page does not exist'\n )\n )\n );\n }\n }]);\n\n return FourOhForPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = FourOhForPage;\n\n/***/ }),\n/* 142 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _require = __webpack_require__(17),\n sendGAServeEvent = _require.sendGAServeEvent;\n\nvar _require2 = __webpack_require__(143),\n determineResponseType = _require2.determineResponseType,\n flipClaimNameAndIdForBackwardsCompatibility = _require2.flipClaimNameAndIdForBackwardsCompatibility,\n logRequestData = _require2.logRequestData,\n getClaimIdAndServeAsset = _require2.getClaimIdAndServeAsset;\n\nvar lbryUri = __webpack_require__(144);\nvar handleShowRender = __webpack_require__(145);\nvar SERVE = 'SERVE';\n\nmodule.exports = function (app) {\n // route to serve a specific asset using the channel or claim id\n app.get('/:identifier/:claim', function (req, res) {\n var headers = req.headers,\n ip = req.ip,\n originalUrl = req.originalUrl,\n params = req.params;\n // decide if this is a show request\n\n var hasFileExtension = void 0;\n try {\n var _lbryUri$parseModifie = lbryUri.parseModifier(params.claim);\n\n hasFileExtension = _lbryUri$parseModifie.hasFileExtension;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n var responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n var claimName = void 0;\n try {\n var _lbryUri$parseClaim = lbryUri.parseClaim(params.claim);\n\n claimName = _lbryUri$parseClaim.claimName;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n // parse the identifier\n var isChannel = void 0,\n channelName = void 0,\n channelClaimId = void 0,\n claimId = void 0;\n try {\n var _lbryUri$parseIdentif = lbryUri.parseIdentifier(params.identifier);\n\n isChannel = _lbryUri$parseIdentif.isChannel;\n channelName = _lbryUri$parseIdentif.channelName;\n channelClaimId = _lbryUri$parseIdentif.channelClaimId;\n claimId = _lbryUri$parseIdentif.claimId;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n if (!isChannel) {\n var _flipClaimNameAndIdFo = flipClaimNameAndIdForBackwardsCompatibility(claimId, claimName);\n\n var _flipClaimNameAndIdFo2 = _slicedToArray(_flipClaimNameAndIdFo, 2);\n\n claimId = _flipClaimNameAndIdFo2[0];\n claimName = _flipClaimNameAndIdFo2[1];\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, channelName, claimId);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res);\n });\n // route to serve the winning asset at a claim or a channel page\n app.get('/:claim', function (req, res) {\n var headers = req.headers,\n ip = req.ip,\n originalUrl = req.originalUrl,\n params = req.params;\n // decide if this is a show request\n\n var hasFileExtension = void 0;\n try {\n var _lbryUri$parseModifie2 = lbryUri.parseModifier(params.claim);\n\n hasFileExtension = _lbryUri$parseModifie2.hasFileExtension;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n var responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n var claimName = void 0;\n try {\n var _lbryUri$parseClaim2 = lbryUri.parseClaim(params.claim);\n\n claimName = _lbryUri$parseClaim2.claimName;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, null, null);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(null, null, claimName, null, originalUrl, ip, res);\n });\n};\n\n/***/ }),\n/* 143 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(28),\n getClaimId = _require.getClaimId,\n getLocalFileRecord = _require.getLocalFileRecord;\n\nvar _require2 = __webpack_require__(27),\n handleErrorResponse = _require2.handleErrorResponse;\n\nvar SERVE = 'SERVE';\nvar SHOW = 'SHOW';\nvar NO_FILE = 'NO_FILE';\nvar NO_CHANNEL = 'NO_CHANNEL';\nvar NO_CLAIM = 'NO_CLAIM';\n\nfunction clientAcceptsHtml(_ref) {\n var accept = _ref.accept;\n\n return accept && accept.match(/text\\/html/);\n};\n\nfunction requestIsFromBrowser(headers) {\n return headers['user-agent'] && headers['user-agent'].match(/Mozilla/);\n};\n\nfunction clientWantsAsset(_ref2) {\n var accept = _ref2.accept,\n range = _ref2.range;\n\n var imageIsWanted = accept && accept.match(/image\\/.*/) && !accept.match(/text\\/html/) && !accept.match(/text\\/\\*/);\n var videoIsWanted = accept && range;\n return imageIsWanted || videoIsWanted;\n};\n\nfunction isValidClaimId(claimId) {\n return claimId.length === 40 && !/[^A-Za-z0-9]/g.test(claimId);\n};\n\nfunction isValidShortId(claimId) {\n return claimId.length === 1; // it should really evaluate the short url itself\n};\n\nfunction isValidShortIdOrClaimId(input) {\n return isValidClaimId(input) || isValidShortId(input);\n};\n\nfunction serveAssetToClient(claimId, name, res) {\n return getLocalFileRecord(claimId, name).then(function (fileRecord) {\n // check that a local record was found\n if (fileRecord === NO_FILE) {\n return res.status(307).redirect('/api/claim/get/' + name + '/' + claimId);\n }\n // serve the file\n var filePath = fileRecord.filePath,\n fileType = fileRecord.fileType;\n\n logger.verbose('serving file: ' + filePath);\n var sendFileOptions = {\n headers: {\n 'X-Content-Type-Options': 'nosniff',\n 'Content-Type': fileType || 'image/jpeg'\n }\n };\n res.status(200).sendFile(filePath, sendFileOptions);\n }).catch(function (error) {\n throw error;\n });\n};\n\nmodule.exports = {\n getClaimIdAndServeAsset: function getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res) {\n // get the claim Id and then serve the asset\n getClaimId(channelName, channelClaimId, claimName, claimId).then(function (fullClaimId) {\n if (fullClaimId === NO_CLAIM) {\n return res.status(404).json({ success: false, message: 'no claim id could be found' });\n } else if (fullClaimId === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'no channel id could be found' });\n }\n serveAssetToClient(fullClaimId, claimName, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'success');\n }).catch(function (error) {\n handleErrorResponse(originalUrl, ip, error, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'fail');\n });\n },\n determineResponseType: function determineResponseType(hasFileExtension, headers) {\n var responseType = void 0;\n if (hasFileExtension) {\n responseType = SERVE; // assume a serve request if file extension is present\n if (clientAcceptsHtml(headers)) {\n // if the request comes from a browser, change it to a show request\n responseType = SHOW;\n }\n } else {\n responseType = SHOW;\n if (clientWantsAsset(headers) && requestIsFromBrowser(headers)) {\n // this is in case someone embeds a show url\n logger.debug('Show request came from browser but wants an image/video. Changing response to serve...');\n responseType = SERVE;\n }\n }\n return responseType;\n },\n flipClaimNameAndIdForBackwardsCompatibility: function flipClaimNameAndIdForBackwardsCompatibility(identifier, name) {\n // this is a patch for backwards compatability with '/name/claim_id' url format\n if (isValidShortIdOrClaimId(name) && !isValidShortIdOrClaimId(identifier)) {\n var tempName = name;\n name = identifier;\n identifier = tempName;\n }\n return [identifier, name];\n },\n logRequestData: function logRequestData(responseType, claimName, channelName, claimId) {\n logger.debug('responseType ===', responseType);\n logger.debug('claim name === ', claimName);\n logger.debug('channel name ===', channelName);\n logger.debug('claim id ===', claimId);\n }\n};\n\n/***/ }),\n/* 144 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n REGEXP_INVALID_CLAIM: /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS: /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR: '@',\n parseIdentifier: function parseIdentifier(identifier) {\n logger.debug('parsing identifier:', identifier);\n var componentsRegex = new RegExp('([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec = componentsRegex.exec(identifier).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec2 = _slicedToArray(_componentsRegex$exec, 4),\n proto = _componentsRegex$exec2[0],\n value = _componentsRegex$exec2[1],\n modifierSeperator = _componentsRegex$exec2[2],\n modifier = _componentsRegex$exec2[3];\n\n logger.debug(proto + ', ' + value + ', ' + modifierSeperator + ', ' + modifier);\n\n // Validate and process name\n if (!value) {\n throw new Error('Check your url. No channel name provided before \"' + modifierSeperator + '\"');\n }\n var isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n var channelName = isChannel ? value : null;\n var claimId = void 0;\n if (isChannel) {\n if (!channelName) {\n throw new Error('No channel name after @.');\n }\n var nameBadChars = channelName.match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error('Invalid characters in channel name: ' + nameBadChars.join(', ') + '.');\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n var channelClaimId = void 0;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error('No modifier provided after separator \"' + modifierSeperator + '\"');\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error('The \"' + modifierSeperator + '\" modifier is not currently supported');\n }\n }\n return {\n isChannel: isChannel,\n channelName: channelName,\n channelClaimId: channelClaimId,\n claimId: claimId\n };\n },\n parseClaim: function parseClaim(claim) {\n logger.debug('parsing name:', claim);\n var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec3 = componentsRegex.exec(claim).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec4 = _slicedToArray(_componentsRegex$exec3, 4),\n proto = _componentsRegex$exec4[0],\n claimName = _componentsRegex$exec4[1],\n modifierSeperator = _componentsRegex$exec4[2],\n modifier = _componentsRegex$exec4[3];\n\n logger.debug(proto + ', ' + claimName + ', ' + modifierSeperator + ', ' + modifier);\n\n // Validate and process name\n if (!claimName) {\n throw new Error('No claim name provided before .');\n }\n var nameBadChars = claimName.match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error('Invalid characters in claim name: ' + nameBadChars.join(', ') + '.');\n }\n // Validate and process modifier\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error('No file extension provided after separator ' + modifierSeperator + '.');\n }\n if (modifierSeperator !== '.') {\n throw new Error('The ' + modifierSeperator + ' modifier is not supported in the claim name');\n }\n }\n // return results\n return {\n claimName: claimName\n };\n },\n parseModifier: function parseModifier(claim) {\n logger.debug('parsing modifier:', claim);\n var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec5 = componentsRegex.exec(claim).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec6 = _slicedToArray(_componentsRegex$exec5, 4),\n proto = _componentsRegex$exec6[0],\n claimName = _componentsRegex$exec6[1],\n modifierSeperator = _componentsRegex$exec6[2],\n modifier = _componentsRegex$exec6[3];\n\n logger.debug(proto + ', ' + claimName + ', ' + modifierSeperator + ', ' + modifier);\n // Validate and process modifier\n var hasFileExtension = false;\n if (modifierSeperator) {\n hasFileExtension = true;\n }\n return {\n hasFileExtension: hasFileExtension\n };\n }\n};\n\n/***/ }),\n/* 145 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _server = __webpack_require__(30);\n\nvar _redux = __webpack_require__(18);\n\nvar _index = __webpack_require__(31);\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _reactRouterDom = __webpack_require__(3);\n\nvar _index3 = __webpack_require__(36);\n\nvar _index4 = _interopRequireDefault(_index3);\n\nvar _app = __webpack_require__(37);\n\nvar _app2 = _interopRequireDefault(_app);\n\nvar _renderFullPage = __webpack_require__(43);\n\nvar _renderFullPage2 = _interopRequireDefault(_renderFullPage);\n\nvar _reduxSaga = __webpack_require__(146);\n\nvar _reduxSaga2 = _interopRequireDefault(_reduxSaga);\n\nvar _effects = __webpack_require__(15);\n\nvar _show_uri = __webpack_require__(147);\n\nvar _show = __webpack_require__(8);\n\nvar _reactHelmet = __webpack_require__(14);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar returnSagaWithParams = function returnSagaWithParams(saga, params) {\n return (/*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return (0, _effects.call)(saga, params);\n\n case 2:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n })\n );\n};\n\nmodule.exports = function (req, res) {\n var context = {};\n\n // create and apply middleware\n var sagaMiddleware = (0, _reduxSaga2.default)();\n var middleware = (0, _redux.applyMiddleware)(sagaMiddleware);\n\n // create a new Redux store instance\n var store = (0, _redux.createStore)(_index2.default, middleware);\n\n // create saga\n var action = (0, _show.onHandleShowPageUri)(req.params);\n var saga = returnSagaWithParams(_show_uri.handleShowPageUri, action);\n\n // run the saga middleware\n sagaMiddleware.run(saga).done.then(function () {\n // render component to a string\n var html = (0, _server.renderToString)(_react2.default.createElement(\n _reactRedux.Provider,\n { store: store },\n _react2.default.createElement(\n _reactRouterDom.StaticRouter,\n { location: req.url, context: context },\n _react2.default.createElement(\n _index4.default,\n null,\n _react2.default.createElement(_app2.default, null)\n )\n )\n ));\n\n // get head tags from helmet\n var helmet = _reactHelmet2.default.renderStatic();\n\n // check for a redirect\n if (context.url) {\n return res.redirect(301, context.url);\n }\n\n // get the initial state from our Redux store\n var preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send((0, _renderFullPage2.default)(helmet, html, preloadedState));\n });\n};\n\n/***/ }),\n/* 146 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"redux-saga\");\n\n/***/ }),\n/* 147 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.handleShowPageUri = handleShowPageUri;\nexports.watchHandleShowPageUri = watchHandleShowPageUri;\n\nvar _effects = __webpack_require__(15);\n\nvar _show_action_types = __webpack_require__(12);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(8);\n\nvar _show_asset = __webpack_require__(148);\n\nvar _show_channel = __webpack_require__(150);\n\nvar _lbryUri = __webpack_require__(152);\n\nvar _lbryUri2 = _interopRequireDefault(_lbryUri);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateIdentifierAndClaim),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateClaimOnly),\n _marked3 = /*#__PURE__*/regeneratorRuntime.mark(handleShowPageUri),\n _marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchHandleShowPageUri);\n\nfunction parseAndUpdateIdentifierAndClaim(modifier, claim) {\n var isChannel, channelName, channelClaimId, claimId, claimName, extension, _lbryUri$parseIdentif, _lbryUri$parseClaim;\n\n return regeneratorRuntime.wrap(function parseAndUpdateIdentifierAndClaim$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n // this is a request for an asset\n // claim will be an asset claim\n // the identifier could be a channel or a claim id\n isChannel = void 0, channelName = void 0, channelClaimId = void 0, claimId = void 0, claimName = void 0, extension = void 0;\n _context.prev = 1;\n _lbryUri$parseIdentif = _lbryUri2.default.parseIdentifier(modifier);\n isChannel = _lbryUri$parseIdentif.isChannel;\n channelName = _lbryUri$parseIdentif.channelName;\n channelClaimId = _lbryUri$parseIdentif.channelClaimId;\n claimId = _lbryUri$parseIdentif.claimId;\n _lbryUri$parseClaim = _lbryUri2.default.parseClaim(claim);\n claimName = _lbryUri$parseClaim.claimName;\n extension = _lbryUri$parseClaim.extension;\n _context.next = 17;\n break;\n\n case 12:\n _context.prev = 12;\n _context.t0 = _context['catch'](1);\n _context.next = 16;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));\n\n case 16:\n return _context.abrupt('return', _context.sent);\n\n case 17:\n if (!isChannel) {\n _context.next = 21;\n break;\n }\n\n _context.next = 20;\n return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, channelName, channelClaimId, extension));\n\n case 20:\n return _context.abrupt('return', _context.sent);\n\n case 21:\n ;\n _context.next = 24;\n return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, claimId, null, null, extension));\n\n case 24:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[1, 12]]);\n}\nfunction parseAndUpdateClaimOnly(claim) {\n var isChannel, channelName, channelClaimId, _lbryUri$parseIdentif2, claimName, extension, _lbryUri$parseClaim2;\n\n return regeneratorRuntime.wrap(function parseAndUpdateClaimOnly$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // this could be a request for an asset or a channel page\n // claim could be an asset claim or a channel claim\n isChannel = void 0, channelName = void 0, channelClaimId = void 0;\n _context2.prev = 1;\n _lbryUri$parseIdentif2 = _lbryUri2.default.parseIdentifier(claim);\n isChannel = _lbryUri$parseIdentif2.isChannel;\n channelName = _lbryUri$parseIdentif2.channelName;\n channelClaimId = _lbryUri$parseIdentif2.channelClaimId;\n _context2.next = 13;\n break;\n\n case 8:\n _context2.prev = 8;\n _context2.t0 = _context2['catch'](1);\n _context2.next = 12;\n return (0, _effects.put)((0, _show.onRequestError)(_context2.t0.message));\n\n case 12:\n return _context2.abrupt('return', _context2.sent);\n\n case 13:\n if (!isChannel) {\n _context2.next = 17;\n break;\n }\n\n _context2.next = 16;\n return (0, _effects.call)(_show_channel.newChannelRequest, (0, _show.onNewChannelRequest)(channelName, channelClaimId));\n\n case 16:\n return _context2.abrupt('return', _context2.sent);\n\n case 17:\n // if not for a channel, parse the claim request\n claimName = void 0, extension = void 0;\n _context2.prev = 18;\n _lbryUri$parseClaim2 = _lbryUri2.default.parseClaim(claim);\n claimName = _lbryUri$parseClaim2.claimName;\n extension = _lbryUri$parseClaim2.extension;\n _context2.next = 29;\n break;\n\n case 24:\n _context2.prev = 24;\n _context2.t1 = _context2['catch'](18);\n _context2.next = 28;\n return (0, _effects.put)((0, _show.onRequestError)(_context2.t1.message));\n\n case 28:\n return _context2.abrupt('return', _context2.sent);\n\n case 29:\n _context2.next = 31;\n return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, null, null, extension));\n\n case 31:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this, [[1, 8], [18, 24]]);\n}\n\nfunction handleShowPageUri(action) {\n var _action$data, identifier, claim;\n\n return regeneratorRuntime.wrap(function handleShowPageUri$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _action$data = action.data, identifier = _action$data.identifier, claim = _action$data.claim;\n\n if (!identifier) {\n _context3.next = 5;\n break;\n }\n\n _context3.next = 4;\n return (0, _effects.call)(parseAndUpdateIdentifierAndClaim, identifier, claim);\n\n case 4:\n return _context3.abrupt('return', _context3.sent);\n\n case 5:\n _context3.next = 7;\n return (0, _effects.call)(parseAndUpdateClaimOnly, claim);\n\n case 7:\n case 'end':\n return _context3.stop();\n }\n }\n }, _marked3, this);\n};\n\nfunction watchHandleShowPageUri() {\n return regeneratorRuntime.wrap(function watchHandleShowPageUri$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _context4.next = 2;\n return (0, _effects.takeLatest)(actions.HANDLE_SHOW_URI, handleShowPageUri);\n\n case 2:\n case 'end':\n return _context4.stop();\n }\n }\n }, _marked4, this);\n};\n\n/***/ }),\n/* 148 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.newAssetRequest = newAssetRequest;\nexports.watchNewAssetRequest = watchNewAssetRequest;\n\nvar _effects = __webpack_require__(15);\n\nvar _show_action_types = __webpack_require__(12);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(8);\n\nvar _assetApi = __webpack_require__(149);\n\nvar _show2 = __webpack_require__(13);\n\nvar _site = __webpack_require__(44);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(newAssetRequest),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewAssetRequest);\n\nfunction newAssetRequest(action) {\n var _action$data, requestType, requestId, name, modifier, state, host, longId, _ref, assetKey, shortId, _ref2, claimData, _ref3;\n\n return regeneratorRuntime.wrap(function newAssetRequest$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, name = _action$data.name, modifier = _action$data.modifier;\n // put an action to update the request in redux\n\n _context.next = 3;\n return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId));\n\n case 3:\n _context.next = 5;\n return (0, _effects.select)(_show2.selectShowState);\n\n case 5:\n state = _context.sent;\n _context.next = 8;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 8:\n host = _context.sent;\n\n if (!state.requestList[requestId]) {\n _context.next = 11;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 11:\n // get long id && add request to request list\n longId = void 0;\n _context.prev = 12;\n _context.next = 15;\n return (0, _effects.call)(_assetApi.getLongClaimId, host, name, modifier);\n\n case 15:\n _ref = _context.sent;\n longId = _ref.data;\n _context.next = 24;\n break;\n\n case 19:\n _context.prev = 19;\n _context.t0 = _context['catch'](12);\n _context.next = 23;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));\n\n case 23:\n return _context.abrupt('return', _context.sent);\n\n case 24:\n assetKey = 'a#' + name + '#' + longId;\n _context.next = 27;\n return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, assetKey));\n\n case 27:\n if (!state.assetList[assetKey]) {\n _context.next = 29;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 29:\n // get short Id\n shortId = void 0;\n _context.prev = 30;\n _context.next = 33;\n return (0, _effects.call)(_assetApi.getShortId, host, name, longId);\n\n case 33:\n _ref2 = _context.sent;\n shortId = _ref2.data;\n _context.next = 42;\n break;\n\n case 37:\n _context.prev = 37;\n _context.t1 = _context['catch'](30);\n _context.next = 41;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message));\n\n case 41:\n return _context.abrupt('return', _context.sent);\n\n case 42:\n // get asset claim data\n claimData = void 0;\n _context.prev = 43;\n _context.next = 46;\n return (0, _effects.call)(_assetApi.getClaimData, host, name, longId);\n\n case 46:\n _ref3 = _context.sent;\n claimData = _ref3.data;\n _context.next = 55;\n break;\n\n case 50:\n _context.prev = 50;\n _context.t2 = _context['catch'](43);\n _context.next = 54;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t2.message));\n\n case 54:\n return _context.abrupt('return', _context.sent);\n\n case 55:\n _context.next = 57;\n return (0, _effects.put)((0, _show.addAssetToAssetList)(assetKey, null, name, longId, shortId, claimData));\n\n case 57:\n _context.next = 59;\n return (0, _effects.put)((0, _show.onRequestError)(null));\n\n case 59:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[12, 19], [30, 37], [43, 50]]);\n};\n\nfunction watchNewAssetRequest() {\n return regeneratorRuntime.wrap(function watchNewAssetRequest$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return (0, _effects.takeLatest)(actions.ASSET_REQUEST_NEW, newAssetRequest);\n\n case 2:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this);\n};\n\n/***/ }),\n/* 149 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getLongClaimId = getLongClaimId;\nexports.getShortId = getShortId;\nexports.getClaimData = getClaimData;\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getLongClaimId(host, name, modifier) {\n var body = {};\n // create request params\n if (modifier) {\n if (modifier.id) {\n body['claimId'] = modifier.id;\n } else {\n body['channelName'] = modifier.channel.name;\n body['channelClaimId'] = modifier.channel.id;\n }\n }\n body['claimName'] = name;\n var params = {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body)\n };\n // create url\n var url = host + '/api/claim/long-id';\n // return the request promise\n return (0, _request2.default)(url, params);\n};\n\nfunction getShortId(host, name, claimId) {\n var url = host + '/api/claim/short-id/' + claimId + '/' + name;\n return (0, _request2.default)(url);\n};\n\nfunction getClaimData(host, name, claimId) {\n var url = host + '/api/claim/data/' + name + '/' + claimId;\n return (0, _request2.default)(url);\n};\n\n/***/ }),\n/* 150 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.newChannelRequest = newChannelRequest;\nexports.watchNewChannelRequest = watchNewChannelRequest;\nexports.watchUpdateChannelClaims = watchUpdateChannelClaims;\n\nvar _effects = __webpack_require__(15);\n\nvar _show_action_types = __webpack_require__(12);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(8);\n\nvar _channelApi = __webpack_require__(151);\n\nvar _show2 = __webpack_require__(13);\n\nvar _site = __webpack_require__(44);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(newChannelRequest),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewChannelRequest),\n _marked3 = /*#__PURE__*/regeneratorRuntime.mark(getNewClaimsAndUpdateChannel),\n _marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchUpdateChannelClaims);\n\nfunction newChannelRequest(action) {\n var _action$data, requestType, requestId, channelName, channelId, state, host, longId, shortId, _ref, _ref$data, channelKey, claimsData, _ref2;\n\n return regeneratorRuntime.wrap(function newChannelRequest$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, channelName = _action$data.channelName, channelId = _action$data.channelId;\n // put an action to update the request in redux\n\n _context.next = 3;\n return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId));\n\n case 3:\n _context.next = 5;\n return (0, _effects.select)(_show2.selectShowState);\n\n case 5:\n state = _context.sent;\n _context.next = 8;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 8:\n host = _context.sent;\n\n if (!state.requestList[requestId]) {\n _context.next = 11;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 11:\n // get channel long id\n longId = void 0, shortId = void 0;\n _context.prev = 12;\n _context.next = 15;\n return (0, _effects.call)(_channelApi.getChannelData, host, channelName, channelId);\n\n case 15:\n _ref = _context.sent;\n _ref$data = _ref.data;\n longId = _ref$data.longChannelClaimId;\n shortId = _ref$data.shortChannelClaimId;\n _context.next = 26;\n break;\n\n case 21:\n _context.prev = 21;\n _context.t0 = _context['catch'](12);\n _context.next = 25;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));\n\n case 25:\n return _context.abrupt('return', _context.sent);\n\n case 26:\n // store the request in the channel requests list\n channelKey = 'c#' + channelName + '#' + longId;\n _context.next = 29;\n return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, channelKey));\n\n case 29:\n if (!state.channelList[channelKey]) {\n _context.next = 31;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 31:\n // get channel claims data\n claimsData = void 0;\n _context.prev = 32;\n _context.next = 35;\n return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, channelName, 1);\n\n case 35:\n _ref2 = _context.sent;\n claimsData = _ref2.data;\n _context.next = 44;\n break;\n\n case 39:\n _context.prev = 39;\n _context.t1 = _context['catch'](32);\n _context.next = 43;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message));\n\n case 43:\n return _context.abrupt('return', _context.sent);\n\n case 44:\n _context.next = 46;\n return (0, _effects.put)((0, _show.addNewChannelToChannelList)(channelKey, channelName, shortId, longId, claimsData));\n\n case 46:\n _context.next = 48;\n return (0, _effects.put)((0, _show.onRequestError)(null));\n\n case 48:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[12, 21], [32, 39]]);\n}\n\nfunction watchNewChannelRequest() {\n return regeneratorRuntime.wrap(function watchNewChannelRequest$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return (0, _effects.takeLatest)(actions.CHANNEL_REQUEST_NEW, newChannelRequest);\n\n case 2:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this);\n};\n\nfunction getNewClaimsAndUpdateChannel(action) {\n var _action$data2, channelKey, name, longId, page, host, claimsData, _ref3;\n\n return regeneratorRuntime.wrap(function getNewClaimsAndUpdateChannel$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _action$data2 = action.data, channelKey = _action$data2.channelKey, name = _action$data2.name, longId = _action$data2.longId, page = _action$data2.page;\n _context3.next = 3;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 3:\n host = _context3.sent;\n claimsData = void 0;\n _context3.prev = 5;\n _context3.next = 8;\n return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, name, page);\n\n case 8:\n _ref3 = _context3.sent;\n claimsData = _ref3.data;\n _context3.next = 17;\n break;\n\n case 12:\n _context3.prev = 12;\n _context3.t0 = _context3['catch'](5);\n _context3.next = 16;\n return (0, _effects.put)((0, _show.onRequestError)(_context3.t0.message));\n\n case 16:\n return _context3.abrupt('return', _context3.sent);\n\n case 17:\n _context3.next = 19;\n return (0, _effects.put)((0, _show.updateChannelClaims)(channelKey, claimsData));\n\n case 19:\n case 'end':\n return _context3.stop();\n }\n }\n }, _marked3, this, [[5, 12]]);\n}\n\nfunction watchUpdateChannelClaims() {\n return regeneratorRuntime.wrap(function watchUpdateChannelClaims$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _context4.next = 2;\n return (0, _effects.takeLatest)(actions.CHANNEL_CLAIMS_UPDATE_ASYNC, getNewClaimsAndUpdateChannel);\n\n case 2:\n case 'end':\n return _context4.stop();\n }\n }\n }, _marked4, this);\n}\n\n/***/ }),\n/* 151 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getChannelData = getChannelData;\nexports.getChannelClaims = getChannelClaims;\n\nvar _request = __webpack_require__(11);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getChannelData(host, id, name) {\n if (!id) id = 'none';\n var url = host + '/api/channel/data/' + name + '/' + id;\n return (0, _request2.default)(url);\n};\n\nfunction getChannelClaims(host, longId, name, page) {\n if (!page) page = 1;\n var url = host + '/api/channel/claims/' + name + '/' + longId + '/' + page;\n return (0, _request2.default)(url);\n};\n\n/***/ }),\n/* 152 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nmodule.exports = {\n REGEXP_INVALID_CLAIM: /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS: /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR: '@',\n parseIdentifier: function parseIdentifier(identifier) {\n var componentsRegex = new RegExp('([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec = componentsRegex // eslint-disable-line no-unused-vars\n .exec(identifier).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec2 = _slicedToArray(_componentsRegex$exec, 4),\n proto = _componentsRegex$exec2[0],\n value = _componentsRegex$exec2[1],\n modifierSeperator = _componentsRegex$exec2[2],\n modifier = _componentsRegex$exec2[3];\n\n // Validate and process name\n\n\n if (!value) {\n throw new Error('Check your URL. No channel name provided before \"' + modifierSeperator + '\"');\n }\n var isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n var channelName = isChannel ? value : null;\n var claimId = void 0;\n if (isChannel) {\n if (!channelName) {\n throw new Error('Check your URL. No channel name after \"@\".');\n }\n var nameBadChars = channelName.match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error('Check your URL. Invalid characters in channel name: \"' + nameBadChars.join(', ') + '\".');\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n var channelClaimId = void 0;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error('Check your URL. No modifier provided after separator \"' + modifierSeperator + '\"');\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error('Check your URL. The \"' + modifierSeperator + '\" modifier is not currently supported');\n }\n }\n return {\n isChannel: isChannel,\n channelName: channelName,\n channelClaimId: channelClaimId || null,\n claimId: claimId || null\n };\n },\n parseClaim: function parseClaim(name) {\n var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first extension)\n '([:$#.]?)([^/]*)' // extension separator, extension (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec3 = componentsRegex // eslint-disable-line no-unused-vars\n .exec(name).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec4 = _slicedToArray(_componentsRegex$exec3, 4),\n proto = _componentsRegex$exec4[0],\n claimName = _componentsRegex$exec4[1],\n extensionSeperator = _componentsRegex$exec4[2],\n extension = _componentsRegex$exec4[3];\n\n // Validate and process name\n\n\n if (!claimName) {\n throw new Error('Check your URL. No claim name provided before \".\"');\n }\n var nameBadChars = claimName.match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error('Check your URL. Invalid characters in claim name: \"' + nameBadChars.join(', ') + '\".');\n }\n // Validate and process extension\n if (extensionSeperator) {\n if (!extension) {\n throw new Error('Check your URL. No file extension provided after separator \"' + extensionSeperator + '\".');\n }\n if (extensionSeperator !== '.') {\n throw new Error('Check your URL. The \"' + extensionSeperator + '\" separator is not supported in the claim name.');\n }\n }\n return {\n claimName: claimName,\n extension: extension || null\n };\n }\n};\n\n/***/ }),\n/* 153 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar handlePageRender = __webpack_require__(29);\n\nmodule.exports = function (app) {\n // a catch-all route if someone visits a page that does not exist\n app.use('*', function (req, res) {\n // send response\n handlePageRender(req, res);\n });\n};\n\n/***/ }),\n/* 154 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _require = __webpack_require__(155),\n logLevel = _require.logLevel;\n\nmodule.exports = function (winston) {\n // configure\n winston.configure({\n transports: [new winston.transports.Console({\n level: logLevel,\n timestamp: false,\n colorize: true,\n prettyPrint: true,\n handleExceptions: true,\n humanReadableUnhandledException: true\n })]\n });\n // test all the log levels\n winston.error('Level 0');\n winston.warn('Level 1');\n winston.info('Level 2');\n winston.verbose('Level 3');\n winston.debug('Level 4');\n winston.silly('Level 5');\n};\n\n/***/ }),\n/* 155 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar loggerConfig = {\n logLevel: 'debug' // options: silly, debug, verbose, info\n};\n\nmodule.exports = loggerConfig;\n\n/***/ }),\n/* 156 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar winstonSlackWebHook = __webpack_require__(157).SlackWebHook;\nvar slackConfig = __webpack_require__(158);\n\nmodule.exports = function (winston) {\n var slackWebHook = slackConfig.slackWebHook,\n slackErrorChannel = slackConfig.slackErrorChannel,\n slackInfoChannel = slackConfig.slackInfoChannel;\n\n if (slackWebHook) {\n // add a transport for errors to slack\n if (slackErrorChannel) {\n winston.add(winstonSlackWebHook, {\n name: 'slack-errors-transport',\n level: 'warn',\n webhookUrl: slackWebHook,\n channel: slackErrorChannel,\n username: 'spee.ch',\n iconEmoji: ':face_with_head_bandage:'\n });\n };\n if (slackInfoChannel) {\n winston.add(winstonSlackWebHook, {\n name: 'slack-info-transport',\n level: 'info',\n webhookUrl: slackWebHook,\n channel: slackInfoChannel,\n username: 'spee.ch',\n iconEmoji: ':nerd_face:'\n });\n };\n // send test message\n winston.error('Slack \"error\" logging is online.');\n winston.info('Slack \"info\" logging is online.');\n } else {\n winston.warn('Slack logging is not enabled because no slackWebHook config var provided.');\n }\n};\n\n/***/ }),\n/* 157 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"winston-slack-webhook\");\n\n/***/ }),\n/* 158 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction SlackConfig() {\n this.slackWebHook = 'default';\n this.slackErrorChannel = 'default';\n this.slackInfoChannel = 'default';\n};\n\nmodule.exports = new SlackConfig();\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// index.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 45);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap e7360edfffe873533ea7","module.exports = require(\"react\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react\"\n// module id = 0\n// module chunks = 0","module.exports = require(\"react-redux\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-redux\"\n// module id = 1\n// module chunks = 0","module.exports = require(\"winston\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"winston\"\n// module id = 2\n// module chunks = 0","module.exports = require(\"react-router-dom\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-router-dom\"\n// module id = 3\n// module chunks = 0","import * as actions from 'constants/publish_action_types';\n\n// export action creators\nexport function selectFile (file) {\n return {\n type: actions.FILE_SELECTED,\n data: file,\n };\n};\n\nexport function clearFile () {\n return {\n type: actions.FILE_CLEAR,\n };\n};\n\nexport function updateMetadata (name, value) {\n return {\n type: actions.METADATA_UPDATE,\n data: {\n name,\n value,\n },\n };\n};\n\nexport function updateClaim (value) {\n return {\n type: actions.CLAIM_UPDATE,\n data: value,\n };\n};\n\nexport function setPublishInChannel (channel) {\n return {\n type: actions.SET_PUBLISH_IN_CHANNEL,\n channel,\n };\n};\n\nexport function updatePublishStatus (status, message) {\n return {\n type: actions.PUBLISH_STATUS_UPDATE,\n data: {\n status,\n message,\n },\n };\n};\n\nexport function updateError (name, value) {\n return {\n type: actions.ERROR_UPDATE,\n data: {\n name,\n value,\n },\n };\n};\n\nexport function updateSelectedChannel (channelName) {\n return {\n type: actions.SELECTED_CHANNEL_UPDATE,\n data: channelName,\n };\n};\n\nexport function toggleMetadataInputs (showMetadataInputs) {\n return {\n type: actions.TOGGLE_METADATA_INPUTS,\n data: showMetadataInputs,\n };\n};\n\nexport function onNewThumbnail (file) {\n return {\n type: actions.THUMBNAIL_NEW,\n data: file,\n };\n};\n\nexport function startPublish (history) {\n return {\n type: actions.PUBLISH_START,\n data: { history },\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/actions/publish.js","function SiteConfig () {\n this.analytics = {\n googleId: 'default',\n };\n this.assetDefaults = {\n description: 'An asset published on Spee.ch',\n thumbnail : 'https://spee.ch/assets/img/video_thumb_default.png',\n title : 'Spee.ch',\n };\n this.auth = {\n sessionKey: 'default',\n };\n this.details = {\n description: 'Open-source, decentralized image and video sharing.',\n host : 'default',\n port : 3000,\n title : 'Spee.ch',\n twitter : '@spee_ch',\n };\n this.publishing = {\n additionalClaimAddresses: [],\n disabled : false,\n disabledMessage : 'Please check back soon.',\n primaryClaimAddress : 'default',\n thumbnailChannel : 'default',\n thumbnailChannelId : 'default',\n uploadDirectory : '/home/lbry/Uploads',\n };\n};\n\nmodule.exports = new SiteConfig();\n\n\n\n// WEBPACK FOOTER //\n// ./config/siteConfig.js","const Sequelize = require('sequelize');\nconst logger = require('winston');\n\nconsole.log('exporting sequelize models');\nconst { database, username, password } = require('../../config/mysqlConfig');\nconst db = {};\n// set sequelize options\nconst sequelize = new Sequelize(database, username, password, {\n host : 'localhost',\n dialect : 'mysql',\n dialectOptions: {decimalNumbers: true}, // fix to ensure DECIMAL will not be stored as a string\n logging : false,\n pool : {\n max : 5,\n min : 0,\n idle : 10000,\n acquire: 10000,\n },\n});\n\n// establish mysql connection\nsequelize\n .authenticate()\n .then(() => {\n logger.info('Sequelize has established mysql connection successfully.');\n })\n .catch(err => {\n logger.error('Sequelize was unable to connect to the database:', err);\n });\n\n// manually add each model to the db object\nconst Certificate = require('./certificate.js');\nconst Channel = require('./channel.js');\nconst Claim = require('./claim.js');\nconst File = require('./file.js');\nconst Request = require('./request.js');\nconst User = require('./user.js');\ndb['Certificate'] = sequelize.import('Certificate', Certificate);\ndb['Channel'] = sequelize.import('Channel', Channel);\ndb['Claim'] = sequelize.import('Claim', Claim);\ndb['File'] = sequelize.import('File', File);\ndb['Request'] = sequelize.import('Request', Request);\ndb['User'] = sequelize.import('User', User);\n\n// run model.association for each model in the db object that has an association\nObject.keys(db).forEach(modelName => {\n if (db[modelName].associate) {\n logger.info('Associating model:', modelName);\n db[modelName].associate(db);\n }\n});\n\ndb.sequelize = sequelize;\ndb.Sequelize = Sequelize;\n\n// add an 'upsert' method to the db object\ndb.upsert = (Model, values, condition, tableName) => {\n return Model\n .findOne({\n where: condition,\n })\n .then(obj => {\n if (obj) { // update\n logger.debug(`updating record in db.${tableName}`);\n return obj.update(values);\n } else { // insert\n logger.debug(`creating record in db.${tableName}`);\n return Model.create(values);\n }\n })\n .catch(function (error) {\n logger.error(`${tableName}.upsert error`, error);\n throw error;\n });\n};\n\nmodule.exports = db;\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/index.js","import { connect } from 'react-redux';\nimport { updateLoggedInChannel } from 'actions/channel';\nimport {updateSelectedChannel} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, site }) => {\n return {\n channelName : channel.loggedInChannel.name,\n channelShortId: channel.loggedInChannel.shortId,\n channelLongId : channel.loggedInChannel.longId,\n siteDescription: site.description,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onChannelLogin: (name, shortId, longId) => {\n dispatch(updateLoggedInChannel(name, shortId, longId));\n dispatch(updateSelectedChannel(name));\n },\n onChannelLogout: () => {\n dispatch(updateLoggedInChannel(null, null, null));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/NavBar/index.js","import * as actions from 'constants/show_action_types';\n\nimport { CHANNEL, ASSET_LITE, ASSET_DETAILS } from 'constants/show_request_types';\n\n// basic request parsing\nexport function onHandleShowPageUri (params) {\n return {\n type: actions.HANDLE_SHOW_URI,\n data: params,\n };\n};\n\nexport function onRequestError (error) {\n return {\n type: actions.REQUEST_ERROR,\n data: error,\n };\n};\n\nexport function onNewChannelRequest (channelName, channelId) {\n const requestType = CHANNEL;\n const requestId = `cr#${channelName}#${channelId}`;\n return {\n type: actions.CHANNEL_REQUEST_NEW,\n data: { requestType, requestId, channelName, channelId },\n };\n};\n\nexport function onNewAssetRequest (name, id, channelName, channelId, extension) {\n const requestType = extension ? ASSET_LITE : ASSET_DETAILS;\n const requestId = `ar#${name}#${id}#${channelName}#${channelId}`;\n return {\n type: actions.ASSET_REQUEST_NEW,\n data: {\n requestType,\n requestId,\n name,\n modifier: {\n id,\n channel: {\n name: channelName,\n id : channelId,\n },\n },\n },\n };\n};\n\nexport function onRequestUpdate (requestType, requestId) {\n return {\n type: actions.REQUEST_UPDATE,\n data: {\n requestType,\n requestId,\n },\n };\n};\n\nexport function addRequestToRequestList (id, error, key) {\n return {\n type: actions.REQUEST_LIST_ADD,\n data: { id, error, key },\n };\n};\n\n// asset actions\n\nexport function addAssetToAssetList (id, error, name, claimId, shortId, claimData) {\n return {\n type: actions.ASSET_ADD,\n data: { id, error, name, claimId, shortId, claimData },\n };\n}\n\n// channel actions\n\nexport function addNewChannelToChannelList (id, name, shortId, longId, claimsData) {\n return {\n type: actions.CHANNEL_ADD,\n data: { id, name, shortId, longId, claimsData },\n };\n};\n\nexport function onUpdateChannelClaims (channelKey, name, longId, page) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_ASYNC,\n data: {channelKey, name, longId, page},\n };\n};\n\nexport function updateChannelClaims (channelListId, claimsData) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_SUCCESS,\n data: {channelListId, claimsData},\n };\n};\n\n// display a file\n\nexport function fileRequested (name, claimId) {\n return {\n type: actions.FILE_REQUESTED,\n data: { name, claimId },\n };\n};\n\nexport function updateFileAvailability (status) {\n return {\n type: actions.FILE_AVAILABILITY_UPDATE,\n data: status,\n };\n};\n\nexport function updateDisplayAssetError (error) {\n return {\n type: actions.DISPLAY_ASSET_ERROR,\n data: error,\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/actions/show.js","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ site }) => {\n const { defaultDescription, defaultThumbnail, description: siteDescription, host: siteHost, title: siteTitle, twitter: siteTwitter } = site;\n return {\n defaultDescription,\n defaultThumbnail,\n siteDescription,\n siteHost,\n siteTitle,\n siteTwitter,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/SEO/index.js","module.exports = require(\"prop-types\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"prop-types\"\n// module id = 10\n// module chunks = 0","import 'cross-fetch/polyfill';\n\n/**\n * Parses the JSON returned by a network request\n *\n * @param {object} response A response from a network request\n *\n * @return {object} The parsed JSON from the request\n */\nfunction parseJSON (response) {\n if (response.status === 204 || response.status === 205) {\n return null;\n }\n return response.json();\n}\n\n/**\n * Parses the status returned by a network request\n *\n * @param {object} response A response from a network request\n * @param {object} response The parsed JSON from the network request\n *\n * @return {object | undefined} Returns object with status and statusText, or undefined\n */\nfunction checkStatus (response, jsonResponse) {\n if (response.status >= 200 && response.status < 300) {\n return jsonResponse;\n }\n const error = new Error(jsonResponse.message);\n error.response = response;\n throw error;\n}\n\n/**\n * Requests a URL, returning a promise\n *\n * @param {string} url The URL we want to request\n * @param {object} [options] The options we want to pass to \"fetch\"\n *\n * @return {object} The response data\n */\n\nexport default function request (url, options) {\n return fetch(url, options)\n .then(response => {\n return Promise.all([response, parseJSON(response)]);\n })\n .then(([response, jsonResponse]) => {\n return checkStatus(response, jsonResponse);\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/request.js","// request actions\nexport const HANDLE_SHOW_URI = 'HANDLE_SHOW_URI';\nexport const REQUEST_ERROR = 'REQUEST_ERROR';\nexport const REQUEST_UPDATE = 'REQUEST_UPDATE';\nexport const ASSET_REQUEST_NEW = 'ASSET_REQUEST_NEW';\nexport const CHANNEL_REQUEST_NEW = 'CHANNEL_REQUEST_NEW';\nexport const REQUEST_LIST_ADD = 'REQUEST_LIST_ADD';\n\n// asset actions\nexport const ASSET_ADD = `ASSET_ADD`;\n\n// channel actions\nexport const CHANNEL_ADD = 'CHANNEL_ADD';\n\nexport const CHANNEL_CLAIMS_UPDATE_ASYNC = 'CHANNEL_CLAIMS_UPDATE_ASYNC';\nexport const CHANNEL_CLAIMS_UPDATE_SUCCESS = 'CHANNEL_CLAIMS_UPDATE_SUCCESS';\n\n// asset/file display actions\nexport const FILE_REQUESTED = 'FILE_REQUESTED';\nexport const FILE_AVAILABILITY_UPDATE = 'FILE_AVAILABILITY_UPDATE';\nexport const DISPLAY_ASSET_ERROR = 'DISPLAY_ASSET_ERROR';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/show_action_types.js","export const selectAsset = (show) => {\n const request = show.requestList[show.request.id];\n const assetKey = request.key;\n return show.assetList[assetKey];\n};\n\nexport const selectShowState = (state) => {\n return state.show;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/selectors/show.js","module.exports = require(\"react-helmet\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-helmet\"\n// module id = 14\n// module chunks = 0","module.exports = require(\"redux-saga/effects\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"redux-saga/effects\"\n// module id = 15\n// module chunks = 0","const axios = require('axios');\nconst logger = require('winston');\nconst { api: { apiHost, apiPort } } = require('../../config/lbryConfig.js');\nconst lbryApiUri = 'http://' + apiHost + ':' + apiPort;\nconst { chooseGaLbrynetPublishLabel, sendGATimingEvent } = require('./googleAnalytics.js');\n\nconst handleLbrynetResponse = ({ data }, resolve, reject) => {\n logger.debug('lbry api data:', data);\n if (data.result) {\n // check for an error\n if (data.result.error) {\n logger.debug('Lbrynet api error:', data.result.error);\n reject(new Error(data.result.error));\n return;\n };\n resolve(data.result);\n return;\n }\n // fallback in case it just timed out\n reject(JSON.stringify(data));\n};\n\nmodule.exports = {\n publishClaim (publishParams) {\n logger.debug(`lbryApi >> Publishing claim to \"${publishParams.name}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'publish',\n params: publishParams,\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'publish', chooseGaLbrynetPublishLabel(publishParams), gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getClaim (uri) {\n logger.debug(`lbryApi >> Getting Claim for \"${uri}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'get',\n params: { uri, timeout: 20 },\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'getClaim', 'GET', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getClaimList (claimName) {\n logger.debug(`lbryApi >> Getting claim_list for \"${claimName}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'claim_list',\n params: { name: claimName },\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'getClaimList', 'CLAIM_LIST', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n resolveUri (uri) {\n logger.debug(`lbryApi >> Resolving URI for \"${uri}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'resolve',\n params: { uri },\n })\n .then(({ data }) => {\n sendGATimingEvent('lbrynet', 'resolveUri', 'RESOLVE', gaStartTime, Date.now());\n if (data.result[uri].error) { // check for errors\n reject(data.result[uri].error);\n } else { // if no errors, resolve\n resolve(data.result[uri]);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getDownloadDirectory () {\n logger.debug('lbryApi >> Retrieving the download directory path from lbry daemon...');\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'settings_get',\n })\n .then(({ data }) => {\n sendGATimingEvent('lbrynet', 'getDownloadDirectory', 'SETTINGS_GET', gaStartTime, Date.now());\n if (data.result) {\n resolve(data.result.download_directory);\n } else {\n return new Error('Successfully connected to lbry daemon, but unable to retrieve the download directory.');\n }\n })\n .catch(error => {\n logger.error('Lbrynet Error:', error);\n resolve('/home/lbry/Downloads/');\n });\n });\n },\n createChannel (name) {\n logger.debug(`lbryApi >> Creating channel for ${name}...`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'channel_new',\n params: {\n channel_name: name,\n amount : 0.1,\n },\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'createChannel', 'CHANNEL_NEW', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/lbryApi.js","const logger = require('winston');\nconst ua = require('universal-analytics');\nconst { analytics : { googleId }, details: { title } } = require('../../config/siteConfig.js');\n\nfunction createServeEventParams (headers, ip, originalUrl) {\n return {\n eventCategory : 'client requests',\n eventAction : 'serve request',\n eventLabel : originalUrl,\n ipOverride : ip,\n userAgentOverride: headers['user-agent'],\n };\n};\n\nfunction createPublishTimingEventParams (category, variable, label, startTime, endTime) {\n const duration = endTime - startTime;\n return {\n userTimingCategory : category,\n userTimingVariableName: variable,\n userTimingTime : duration,\n userTimingLabel : label,\n };\n};\n\nfunction sendGoogleAnalyticsEvent (ip, params) {\n const visitorId = ip.replace(/\\./g, '-');\n const visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.event(params, (err) => {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n });\n};\n\nfunction sendGoogleAnalyticsTiming (visitorId, params) {\n const visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.timing(params, (err) => {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n logger.debug(`Timing event successfully sent to google analytics`);\n });\n};\n\nmodule.exports = {\n sendGAServeEvent (headers, ip, originalUrl) {\n const params = createServeEventParams(headers, ip, originalUrl);\n sendGoogleAnalyticsEvent(ip, params);\n },\n sendGATimingEvent (category, variable, label, startTime, endTime) {\n const params = createPublishTimingEventParams(category, variable, label, startTime, endTime);\n sendGoogleAnalyticsTiming(title, params);\n },\n chooseGaLbrynetPublishLabel ({ channel_name: channelName, channel_id: channelId }) {\n return (channelName || channelId ? 'PUBLISH_IN_CHANNEL_CLAIM' : 'PUBLISH_ANONYMOUS_CLAIM');\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/googleAnalytics.js","module.exports = require(\"redux\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"redux\"\n// module id = 18\n// module chunks = 0","import * as actions from 'constants/channel_action_types';\n\n// export action creators\n\nexport function updateLoggedInChannel (name, shortId, longId) {\n return {\n type: actions.CHANNEL_UPDATE,\n data: {\n name,\n shortId,\n longId,\n },\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/actions/channel.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ActiveStatusBar from 'components/ActiveStatusBar';\nimport InactiveStatusBar from 'components/InactiveStatusBar';\n\nclass ProgressBar extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n bars : [],\n index : 0,\n incrementer: 1,\n };\n this.createBars = this.createBars.bind(this);\n this.startProgressBar = this.startProgressBar.bind(this);\n this.updateProgressBar = this.updateProgressBar.bind(this);\n this.stopProgressBar = this.stopProgressBar.bind(this);\n }\n componentDidMount () {\n this.createBars();\n this.startProgressBar();\n }\n componentWillUnmount () {\n this.stopProgressBar();\n }\n createBars () {\n const bars = [];\n for (let i = 0; i <= this.props.size; i++) {\n bars.push({isActive: false});\n }\n this.setState({ bars });\n }\n startProgressBar () {\n this.updateInterval = setInterval(this.updateProgressBar.bind(this), 300);\n };\n updateProgressBar () {\n let index = this.state.index;\n let incrementer = this.state.incrementer;\n let bars = this.state.bars;\n // flip incrementer if necessary, to stay in bounds\n if ((index < 0) || (index > this.props.size)) {\n incrementer = incrementer * -1;\n index += incrementer;\n }\n // update the indexed bar\n if (incrementer > 0) {\n bars[index].isActive = true;\n } else {\n bars[index].isActive = false;\n };\n // increment index\n index += incrementer;\n // update state\n this.setState({\n bars,\n incrementer,\n index,\n });\n };\n stopProgressBar () {\n clearInterval(this.updateInterval);\n };\n render () {\n return (\n
\n {this.state.bars.map((bar, index) => bar.isActive ? : )}\n
\n );\n }\n};\n\nProgressBar.propTypes = {\n size: PropTypes.number.isRequired,\n};\n\nexport default ProgressBar;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/ProgressBar/index.jsx","import React from 'react';\nimport PropTypes from 'prop-types';\nimport NavBar from 'containers/NavBar';\n\nclass ErrorPage extends React.Component {\n render () {\n const { error } = this.props;\n return (\n
\n \n
\n

{error}

\n
\n
\n );\n }\n};\n\nErrorPage.propTypes = {\n error: PropTypes.string.isRequired,\n};\n\nexport default ErrorPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/ErrorPage/index.jsx","module.exports = require(\"passport\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"passport\"\n// module id = 22\n// module chunks = 0","module.exports = require(\"passport-local\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"passport-local\"\n// module id = 23\n// module chunks = 0","module.exports = require(\"sequelize\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"sequelize\"\n// module id = 24\n// module chunks = 0","module.exports = {\n returnShortId: function (claimsArray, longId) {\n let claimIndex;\n let shortId = longId.substring(0, 1); // default short id is the first letter\n let shortIdLength = 0;\n // find the index of this claim id\n claimIndex = claimsArray.findIndex(element => {\n return element.claimId === longId;\n });\n if (claimIndex < 0) {\n throw new Error('claim id not found in claims list');\n }\n // get an array of all claims with lower height\n let possibleMatches = claimsArray.slice(0, claimIndex);\n // remove certificates with the same prefixes until none are left.\n while (possibleMatches.length > 0) {\n shortIdLength += 1;\n shortId = longId.substring(0, shortIdLength);\n possibleMatches = possibleMatches.filter(element => {\n return (element.claimId && (element.claimId.substring(0, shortIdLength) === shortId));\n });\n }\n return shortId;\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/sequelizeHelpers.js","const logger = require('winston');\nconst fs = require('fs');\n\nconst { details, publishing } = require('../../config/siteConfig.js');\n\nmodule.exports = {\n parsePublishApiRequestBody ({name, nsfw, license, title, description, thumbnail}) {\n // validate name\n if (!name) {\n throw new Error('no name field found in request');\n }\n const invalidNameCharacters = /[^A-Za-z0-9,-]/.exec(name);\n if (invalidNameCharacters) {\n throw new Error('The claim name you provided is not allowed. Only the following characters are allowed: A-Z, a-z, 0-9, and \"-\"');\n }\n // optional parameters\n nsfw = (nsfw === 'true');\n license = license || null;\n title = title || null;\n description = description || null;\n thumbnail = thumbnail || null;\n // return results\n return {\n name,\n nsfw,\n license,\n title,\n description,\n thumbnail,\n };\n },\n parsePublishApiRequestFiles ({file, thumbnail}) {\n // make sure a file was provided\n if (!file) {\n throw new Error('no file with key of [file] found in request');\n }\n if (!file.path) {\n throw new Error('no file path found');\n }\n if (!file.type) {\n throw new Error('no file type found');\n }\n if (!file.size) {\n throw new Error('no file type found');\n }\n // validate the file name\n if (/'/.test(file.name)) {\n throw new Error('apostrophes are not allowed in the file name');\n }\n // validate the file\n module.exports.validateFileTypeAndSize(file);\n // return results\n return {\n fileName : file.name,\n filePath : file.path,\n fileType : file.type,\n thumbnailFileName: (thumbnail ? thumbnail.name : null),\n thumbnailFilePath: (thumbnail ? thumbnail.path : null),\n thumbnailFileType: (thumbnail ? thumbnail.type : null),\n };\n },\n validateFileTypeAndSize (file) {\n // check file type and size\n switch (file.type) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n if (file.size > 10000000) {\n logger.debug('publish > file validation > .jpeg/.jpg/.png was too big');\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .gif was too big');\n throw new Error('Sorry, .gifs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .mp4 was too big');\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n logger.debug('publish > file validation > unrecognized file type');\n throw new Error('The ' + file.type + ' content type is not supported. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n return file;\n },\n createBasicPublishParams (filePath, name, title, description, license, nsfw, thumbnail) {\n logger.debug(`Creating Publish Parameters`);\n // provide defaults for title\n if (title === null || title.trim() === '') {\n title = name;\n }\n // provide default for description\n if (description === null || description.trim() === '') {\n description = '';\n }\n // provide default for license\n if (license === null || license.trim() === '') {\n license = ' '; // default to empty string\n }\n // create the publish params\n const publishParams = {\n name,\n file_path: filePath,\n bid : 0.01,\n metadata : {\n description,\n title,\n author : details.title,\n language: 'en',\n license,\n nsfw,\n },\n claim_address: publishing.primaryClaimAddress,\n };\n // add thumbnail to channel if video\n if (thumbnail) {\n publishParams['metadata']['thumbnail'] = thumbnail;\n }\n return publishParams;\n },\n createThumbnailPublishParams (thumbnailFilePath, claimName, license, nsfw) {\n if (!thumbnailFilePath) {\n return;\n }\n logger.debug(`Creating Thumbnail Publish Parameters`);\n // create the publish params\n return {\n name : `${claimName}-thumb`,\n file_path: thumbnailFilePath,\n bid : 0.01,\n metadata : {\n title : `${claimName} thumbnail`,\n description: `a thumbnail for ${claimName}`,\n author : details.title,\n language : 'en',\n license,\n nsfw,\n },\n claim_address: publishing.primaryClaimAddress,\n channel_name : publishing.thumbnailChannel,\n channel_id : publishing.thumbnailChannelId,\n };\n },\n deleteTemporaryFile (filePath) {\n fs.unlink(filePath, err => {\n if (err) {\n logger.error(`error deleting temporary file ${filePath}`);\n throw err;\n }\n logger.debug(`successfully deleted ${filePath}`);\n });\n },\n addGetResultsToFileData (fileInfo, getResult) {\n fileInfo.fileName = getResult.file_name;\n fileInfo.filePath = getResult.download_path;\n return fileInfo;\n },\n createFileData ({ name, claimId, outpoint, height, address, nsfw, contentType }) {\n return {\n name,\n claimId,\n outpoint,\n height,\n address,\n fileName: '',\n filePath: '',\n fileType: contentType,\n nsfw,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/publishHelpers.js","const logger = require('winston');\n\nmodule.exports = {\n handleErrorResponse: function (originalUrl, ip, error, res) {\n logger.error(`Error on ${originalUrl}`, module.exports.useObjectPropertiesIfNoKeys(error));\n const [status, message] = module.exports.returnErrorMessageAndStatus(error);\n res\n .status(status)\n .json(module.exports.createErrorResponsePayload(status, message));\n },\n returnErrorMessageAndStatus: function (error) {\n let status, message;\n // check for daemon being turned off\n if (error.code === 'ECONNREFUSED') {\n status = 503;\n message = 'Connection refused. The daemon may not be running.';\n // fallback for everything else\n } else {\n status = 400;\n if (error.message) {\n message = error.message;\n } else {\n message = error;\n };\n };\n return [status, message];\n },\n useObjectPropertiesIfNoKeys: function (err) {\n if (Object.keys(err).length === 0) {\n let newErrorObject = {};\n Object.getOwnPropertyNames(err).forEach((key) => {\n newErrorObject[key] = err[key];\n });\n return newErrorObject;\n }\n return err;\n },\n createErrorResponsePayload (status, message) {\n return {\n status,\n success: false,\n message,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/errorHandlers.js","const db = require('../models/index');\nconst logger = require('winston');\nconst { returnPaginatedChannelClaims } = require('../helpers/channelPagination.js');\n\nconst NO_CHANNEL = 'NO_CHANNEL';\nconst NO_CLAIM = 'NO_CLAIM';\nconst NO_FILE = 'NO_FILE';\n\nmodule.exports = {\n getClaimId (channelName, channelClaimId, name, claimId) {\n if (channelName) {\n return module.exports.getClaimIdByChannel(channelName, channelClaimId, name);\n } else {\n return module.exports.getClaimIdByClaim(name, claimId);\n }\n },\n getClaimIdByClaim (claimName, claimId) {\n logger.debug(`getClaimIdByClaim(${claimName}, ${claimId})`);\n return new Promise((resolve, reject) => {\n db.Claim.getLongClaimId(claimName, claimId)\n .then(longClaimId => {\n if (!longClaimId) {\n resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getClaimIdByChannel (channelName, channelClaimId, claimName) {\n logger.debug(`getClaimIdByChannel(${channelName}, ${channelClaimId}, ${claimName})`);\n return new Promise((resolve, reject) => {\n db.Certificate.getLongChannelId(channelName, channelClaimId) // 1. get the long channel id\n .then(longChannelId => {\n if (!longChannelId) {\n return [null, null];\n }\n return Promise.all([longChannelId, db.Claim.getClaimIdByLongChannelId(longChannelId, claimName)]); // 2. get the long claim id\n })\n .then(([longChannelId, longClaimId]) => {\n if (!longChannelId) {\n return resolve(NO_CHANNEL);\n }\n if (!longClaimId) {\n return resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getChannelData (channelName, channelClaimId, page) {\n return new Promise((resolve, reject) => {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId)\n .then(longChannelClaimId => {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Certificate.getShortChannelIdFromLongChannelId(longChannelClaimId, channelName)]);\n })\n .then(([longChannelClaimId, shortChannelClaimId]) => {\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. return all the channel information\n resolve({\n channelName,\n longChannelClaimId,\n shortChannelClaimId,\n });\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getChannelClaims (channelName, channelClaimId, page) {\n return new Promise((resolve, reject) => {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId)\n .then(longChannelClaimId => {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Claim.getAllChannelClaims(longChannelClaimId)]);\n })\n .then(([longChannelClaimId, channelClaimsArray]) => {\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. format the data for the view, including pagination\n let paginatedChannelViewData = returnPaginatedChannelClaims(channelName, longChannelClaimId, channelClaimsArray, page);\n // 4. return all the channel information and contents\n resolve(paginatedChannelViewData);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getLocalFileRecord (claimId, name) {\n return db.File.findOne({where: {claimId, name}})\n .then(file => {\n if (!file) {\n return NO_FILE;\n }\n return file.dataValues;\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/controllers/serveController.js","import React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport { createStore } from 'redux';\nimport Reducer from '../../client/reducers/index';\nimport { Provider } from 'react-redux';\nimport { StaticRouter } from 'react-router-dom';\nimport GAListener from '../../client/components/GAListener/index';\nimport App from '../../client/app';\nimport renderFullPage from './renderFullPage.js';\nimport Helmet from 'react-helmet';\n\nmodule.exports = (req, res) => {\n let context = {};\n\n // create a new Redux store instance\n const store = createStore(Reducer);\n\n // render component to a string\n const html = renderToString(\n \n \n \n \n \n \n \n );\n\n // get head tags from helmet\n const helmet = Helmet.renderStatic();\n\n // check for a redirect\n if (context.url) {\n // Somewhere a `` was rendered\n return res.redirect(301, context.url);\n } else {\n // we're good, send the response\n }\n\n // get the initial state from our Redux store\n const preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send(renderFullPage(helmet, html, preloadedState));\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/handlePageRender.jsx","module.exports = require(\"react-dom/server\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-dom/server\"\n// module id = 30\n// module chunks = 0","import { combineReducers } from 'redux';\nimport PublishReducer from 'reducers/publish';\nimport ChannelReducer from 'reducers/channel';\nimport ShowReducer from 'reducers/show';\nimport SiteReducer from 'reducers/site';\n\nexport default combineReducers({\n channel: ChannelReducer,\n publish: PublishReducer,\n show : ShowReducer,\n site : SiteReducer,\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/index.js","export const FILE_SELECTED = 'FILE_SELECTED';\nexport const FILE_CLEAR = 'FILE_CLEAR';\nexport const METADATA_UPDATE = 'METADATA_UPDATE';\nexport const CLAIM_UPDATE = 'CLAIM_UPDATE';\nexport const SET_PUBLISH_IN_CHANNEL = 'SET_PUBLISH_IN_CHANNEL';\nexport const PUBLISH_STATUS_UPDATE = 'PUBLISH_STATUS_UPDATE';\nexport const ERROR_UPDATE = 'ERROR_UPDATE';\nexport const SELECTED_CHANNEL_UPDATE = 'SELECTED_CHANNEL_UPDATE';\nexport const TOGGLE_METADATA_INPUTS = 'TOGGLE_METADATA_INPUTS';\nexport const THUMBNAIL_NEW = 'THUMBNAIL_NEW';\nexport const PUBLISH_START = 'PUBLISH_START';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/publish_action_types.js","export const LOGIN = 'Existing';\nexport const CREATE = 'New';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/publish_channel_select_states.js","export const CHANNEL_UPDATE = 'CHANNEL_UPDATE';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/channel_action_types.js","export const LOCAL_CHECK = 'LOCAL_CHECK';\nexport const UNAVAILABLE = 'UNAVAILABLE';\nexport const ERROR = 'ERROR';\nexport const AVAILABLE = 'AVAILABLE';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/asset_display_states.js","import React from 'react';\nimport GoogleAnalytics from 'react-ga';\nimport { withRouter } from 'react-router-dom';\nconst { analytics: { googleId } } = require('../../../config/siteConfig.js');\n\nGoogleAnalytics.initialize(googleId);\n\nclass GAListener extends React.Component {\n componentDidMount () {\n this.sendPageView(this.props.history.location);\n this.props.history.listen(this.sendPageView);\n }\n\n sendPageView (location) {\n GoogleAnalytics.set({ page: location.pathname });\n GoogleAnalytics.pageview(location.pathname);\n }\n\n render () {\n return this.props.children;\n }\n}\n\nexport default withRouter(GAListener);\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/GAListener/index.jsx","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport HomePage from 'pages/HomePage'; // or use the provided local homepage\nimport AboutPage from 'pages/AboutPage';\nimport LoginPage from 'pages/LoginPage';\nimport ShowPage from 'pages/ShowPage';\nimport FourOhFourPage from 'containers/FourOhFourPage';\n\nconst App = () => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default App;\n\n\n\n// WEBPACK FOOTER //\n// ./client/app.jsx","import { connect } from 'react-redux';\nimport { selectFile, updateError, clearFile } from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n file : publish.file,\n thumbnail: publish.thumbnail,\n fileError: publish.error.file,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n selectFile: (file) => {\n dispatch(selectFile(file));\n },\n setFileError: (value) => {\n dispatch(clearFile());\n dispatch(updateError('file', value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/Dropzone/index.js","import { connect } from 'react-redux';\nimport { updateLoggedInChannel } from 'actions/channel';\nimport View from './view';\nimport {updateSelectedChannel} from '../../actions/publish';\n\nconst mapDispatchToProps = dispatch => {\n return {\n onChannelLogin: (name, shortId, longId) => {\n dispatch(updateLoggedInChannel(name, shortId, longId));\n dispatch(updateSelectedChannel(name));\n },\n };\n};\n\nexport default connect(null, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelLoginForm/index.js","import { connect } from 'react-redux';\nimport { updateLoggedInChannel } from 'actions/channel';\nimport View from './view';\nimport {updateSelectedChannel} from 'actions/publish';\n\nconst mapDispatchToProps = dispatch => {\n return {\n onChannelLogin: (name, shortId, longId) => {\n dispatch(updateLoggedInChannel(name, shortId, longId));\n dispatch(updateSelectedChannel(name));\n },\n };\n};\n\nexport default connect(null, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelCreateForm/index.js","export const CHANNEL = 'CHANNEL';\nexport const ASSET_LITE = 'ASSET_LITE';\nexport const ASSET_DETAILS = 'ASSET_DETAILS';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/show_request_types.js","import { connect } from 'react-redux';\nimport View from './view';\nimport { fileRequested } from 'actions/show';\nimport { selectAsset } from 'selectors/show';\n\nconst mapStateToProps = ({ show }) => {\n // select error and status\n const error = show.displayAsset.error;\n const status = show.displayAsset.status;\n // select asset\n const asset = selectAsset(show);\n // return props\n return {\n error,\n status,\n asset,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onFileRequest: (name, claimId) => {\n dispatch(fileRequested(name, claimId));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetDisplay/index.js","module.exports = (helmet, html, preloadedState) => {\n // take the html and preloadedState and return the full page\n return `\n \n \n \n \n \n \n \n ${helmet.title.toString()}\n ${helmet.meta.toString()}\n ${helmet.link.toString()}\n \n \n \n \n \n \n \n \n
\n
${html}
\n
\n \n \n \n \n `;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/renderFullPage.js","export const selectSiteState = (state) => {\n return state.site;\n};\n\nexport const selectSiteHost = (state) => {\n return state.site.host;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/selectors/site.js","module.exports = require(\"babel-polyfill\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"babel-polyfill\"\n// module id = 46\n// module chunks = 0","module.exports = require(\"whatwg-fetch\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"whatwg-fetch\"\n// module id = 47\n// module chunks = 0","// app dependencies\nconst express = require('express');\nconst bodyParser = require('body-parser');\nconst expressHandlebars = require('express-handlebars');\nconst Handlebars = require('handlebars');\nconst helmet = require('helmet');\nconst passport = require('passport');\nconst { serializeSpeechUser, deserializeSpeechUser } = require('./helpers/authHelpers.js');\nconst cookieSession = require('cookie-session');\nconst http = require('http');\n// logging dependencies\nconst logger = require('winston');\n\nconst {auth: { sessionKey }, details: { port: PORT }} = require('../config/siteConfig.js');\n\n// create an Express application\nconst app = express();\n\n// trust the proxy to get ip address for us\napp.enable('trust proxy');\n\n// add middleware\napp.use(helmet()); // set HTTP headers to protect against well-known web vulnerabilties\napp.use(express.static(`${__dirname}/public`)); // 'express.static' to serve static files from public directory\napp.use(bodyParser.json()); // 'body parser' for parsing application/json\napp.use(bodyParser.urlencoded({ extended: true })); // 'body parser' for parsing application/x-www-form-urlencoded\napp.use((req, res, next) => { // custom logging middleware to log all incoming http requests\n logger.verbose(`Request on ${req.originalUrl} from ${req.ip}`);\n next();\n});\n\n// configure passport\npassport.serializeUser(serializeSpeechUser);\npassport.deserializeUser(deserializeSpeechUser);\nconst localSignupStrategy = require('./passport/local-signup.js');\nconst localLoginStrategy = require('./passport/local-login.js');\npassport.use('local-signup', localSignupStrategy);\npassport.use('local-login', localLoginStrategy);\n// initialize passport\napp.use(cookieSession({\n name : 'session',\n keys : [sessionKey],\n maxAge: 24 * 60 * 60 * 1000, // i.e. 24 hours\n}));\napp.use(passport.initialize());\napp.use(passport.session());\n\n// configure handlebars & register it with express app\nconst hbs = expressHandlebars.create({\n defaultLayout: 'embed',\n handlebars : Handlebars,\n});\napp.engine('handlebars', hbs.engine);\napp.set('view engine', 'handlebars');\n\n// set the routes on the app\nrequire('./routes/auth-routes.js')(app);\nrequire('./routes/api-routes.js')(app);\nrequire('./routes/page-routes.js')(app);\nrequire('./routes/asset-routes.js')(app);\nrequire('./routes/fallback-routes.js')(app);\n\n// create server\nconst server = http.Server(app);\n\n// configure logger\nrequire('./helpers/configureLogger.js')(logger);\nrequire('./helpers/configureSlack.js')(logger);\n\n// sync sequelize\nconst db = require('./models/index');\ndb.sequelize.sync()\n // start the server\n .then(() => {\n server.listen(PORT, () => {\n logger.info(`Server is listening on PORT ${PORT}`);\n });\n })\n .catch((error) => {\n logger.error(`Startup Error:`, error);\n });\n\n\n\n// WEBPACK FOOTER //\n// ./server/server.js","module.exports = require(\"express\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"express\"\n// module id = 49\n// module chunks = 0","module.exports = require(\"body-parser\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"body-parser\"\n// module id = 50\n// module chunks = 0","module.exports = require(\"express-handlebars\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"express-handlebars\"\n// module id = 51\n// module chunks = 0","module.exports = require(\"handlebars\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"handlebars\"\n// module id = 52\n// module chunks = 0","module.exports = require(\"helmet\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"helmet\"\n// module id = 53\n// module chunks = 0","const logger = require('winston');\n\nmodule.exports = {\n serializeSpeechUser (user, done) { // returns user data to be serialized into session\n logger.debug('serializing user');\n done(null, user);\n },\n deserializeSpeechUser (user, done) { // deserializes session and populates additional info to req.user\n logger.debug('deserializing user');\n done(null, user);\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/authHelpers.js","module.exports = require(\"cookie-session\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"cookie-session\"\n// module id = 55\n// module chunks = 0","module.exports = require(\"http\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"http\"\n// module id = 56\n// module chunks = 0","const PassportLocalStrategy = require('passport-local').Strategy;\nconst lbryApi = require('../helpers/lbryApi.js');\nconst logger = require('winston');\nconst db = require('../models/index');\n\nmodule.exports = new PassportLocalStrategy(\n {\n usernameField: 'username',\n passwordField: 'password',\n },\n (username, password, done) => {\n logger.verbose(`new channel signup request. user: ${username} pass: ${password} .`);\n let userInfo = {};\n // server-side validaton of inputs (username, password)\n\n // create the channel and retrieve the metadata\n return lbryApi.createChannel(`@${username}`)\n .then(tx => {\n // create user record\n const userData = {\n userName: username,\n password: password,\n };\n logger.verbose('userData >', userData);\n // create user record\n const channelData = {\n channelName : `@${username}`,\n channelClaimId: tx.claim_id,\n };\n logger.verbose('channelData >', channelData);\n // create certificate record\n const certificateData = {\n claimId: tx.claim_id,\n name : `@${username}`,\n // address,\n };\n logger.verbose('certificateData >', certificateData);\n // save user and certificate to db\n return Promise.all([db.User.create(userData), db.Channel.create(channelData), db.Certificate.create(certificateData)]);\n })\n .then(([newUser, newChannel, newCertificate]) => {\n logger.verbose('user and certificate successfully created');\n // store the relevant newUser info to be passed back for req.User\n userInfo['id'] = newUser.id;\n userInfo['userName'] = newUser.userName;\n userInfo['channelName'] = newChannel.channelName;\n userInfo['channelClaimId'] = newChannel.channelClaimId;\n // associate the instances\n return Promise.all([newCertificate.setChannel(newChannel), newChannel.setUser(newUser)]);\n })\n .then(() => {\n logger.verbose('user and certificate successfully associated');\n return db.Certificate.getShortChannelIdFromLongChannelId(userInfo.channelClaimId, userInfo.channelName);\n })\n .then(shortChannelId => {\n userInfo['shortChannelId'] = shortChannelId;\n return done(null, userInfo);\n })\n .catch(error => {\n logger.error('signup error', error);\n return done(error);\n });\n }\n);\n\n\n\n// WEBPACK FOOTER //\n// ./server/passport/local-signup.js","module.exports = require(\"axios\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"axios\"\n// module id = 58\n// module chunks = 0","const lbryConfig = {\n api: {\n apiHost: 'localhost',\n apiPort: '5279',\n },\n};\n\nmodule.exports = lbryConfig;\n\n\n\n// WEBPACK FOOTER //\n// ./config/lbryConfig.js","module.exports = require(\"universal-analytics\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"universal-analytics\"\n// module id = 60\n// module chunks = 0","function MysqlConfig () {\n this.database = 'default';\n this.username = 'default';\n this.password = 'default';\n};\n\nmodule.exports = new MysqlConfig();\n\n\n\n// WEBPACK FOOTER //\n// ./config/mysqlConfig.js","const logger = require('winston');\nconst { returnShortId } = require('../helpers/sequelizeHelpers.js');\n\nmodule.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => {\n const Certificate = sequelize.define(\n 'Certificate',\n {\n address: {\n type : STRING,\n default: null,\n },\n amount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n claimId: {\n type : STRING,\n default: null,\n },\n claimSequence: {\n type : INTEGER,\n default: null,\n },\n decodedClaim: {\n type : BOOLEAN,\n default: null,\n },\n depth: {\n type : INTEGER,\n default: null,\n },\n effectiveAmount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n hasSignature: {\n type : BOOLEAN,\n default: null,\n },\n height: {\n type : INTEGER,\n default: null,\n },\n hex: {\n type : TEXT('long'),\n default: null,\n },\n name: {\n type : STRING,\n default: null,\n },\n nout: {\n type : INTEGER,\n default: null,\n },\n txid: {\n type : STRING,\n default: null,\n },\n validAtHeight: {\n type : INTEGER,\n default: null,\n },\n outpoint: {\n type : STRING,\n default: null,\n },\n valueVersion: {\n type : STRING,\n default: null,\n },\n claimType: {\n type : STRING,\n default: null,\n },\n certificateVersion: {\n type : STRING,\n default: null,\n },\n keyType: {\n type : STRING,\n default: null,\n },\n publicKey: {\n type : TEXT('long'),\n default: null,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Certificate.associate = db => {\n Certificate.belongsTo(db.Channel, {\n foreignKey: {\n allowNull: true,\n },\n });\n };\n\n Certificate.getShortChannelIdFromLongChannelId = function (longChannelId, channelName) {\n logger.debug(`getShortChannelIdFromLongChannelId ${channelName}:${longChannelId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: {name: channelName},\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n throw new Error('No channel(s) found with that channel name');\n default:\n return resolve(returnShortId(result, longChannelId));\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromShortChannelId = function (channelName, channelClaimId) {\n logger.debug(`getLongChannelIdFromShortChannelId(${channelName}, ${channelClaimId})`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: {\n name : channelName,\n claimId: {\n $like: `${channelClaimId}%`,\n },\n },\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n default: // note results must be sorted\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromChannelName = function (channelName) {\n logger.debug(`getLongChannelIdFromChannelName(${channelName})`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name: channelName },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.validateLongChannelId = function (name, claimId) {\n logger.debug(`validateLongChannelId(${name}, ${claimId})`);\n return new Promise((resolve, reject) => {\n this.findOne({\n where: {name, claimId},\n })\n .then(result => {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelId = function (channelName, channelClaimId) {\n logger.debug(`getLongChannelId(${channelName}, ${channelClaimId})`);\n if (channelClaimId && (channelClaimId.length === 40)) { // if a full channel id is provided\n return this.validateLongChannelId(channelName, channelClaimId);\n } else if (channelClaimId && channelClaimId.length < 40) { // if a short channel id is provided\n return this.getLongChannelIdFromShortChannelId(channelName, channelClaimId);\n } else {\n return this.getLongChannelIdFromChannelName(channelName); // if no channel id provided\n }\n };\n\n return Certificate;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/certificate.js","module.exports = (sequelize, { STRING }) => {\n const Channel = sequelize.define(\n 'Channel',\n {\n channelName: {\n type : STRING,\n allowNull: false,\n },\n channelClaimId: {\n type : STRING,\n allowNull: false,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Channel.associate = db => {\n Channel.belongsTo(db.User);\n Channel.hasOne(db.Certificate);\n };\n\n return Channel;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/channel.js","const logger = require('winston');\nconst { returnShortId } = require('../helpers/sequelizeHelpers.js');\nconst { assetDefaults: { thumbnail: defaultThumbnail }, details: { host } } = require('../../config/siteConfig.js');\n\nfunction determineFileExtensionFromContentType (contentType) {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n return 'jpeg';\n case 'image/png':\n return 'png';\n case 'image/gif':\n return 'gif';\n case 'video/mp4':\n return 'mp4';\n default:\n logger.debug('setting unknown file type as file extension jpeg');\n return 'jpeg';\n }\n};\n\nfunction determineThumbnail (storedThumbnail, defaultThumbnail) {\n if (storedThumbnail === '') {\n return defaultThumbnail;\n }\n return storedThumbnail;\n};\n\nfunction prepareClaimData (claim) {\n // logger.debug('preparing claim data based on resolved data:', claim);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['host'] = host;\n return claim;\n};\n\nmodule.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => {\n const Claim = sequelize.define(\n 'Claim',\n {\n address: {\n type : STRING,\n default: null,\n },\n amount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n claimId: {\n type : STRING,\n default: null,\n },\n claimSequence: {\n type : INTEGER,\n default: null,\n },\n decodedClaim: {\n type : BOOLEAN,\n default: null,\n },\n depth: {\n type : INTEGER,\n default: null,\n },\n effectiveAmount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n hasSignature: {\n type : BOOLEAN,\n default: null,\n },\n height: {\n type : INTEGER,\n default: null,\n },\n hex: {\n type : TEXT('long'),\n default: null,\n },\n name: {\n type : STRING,\n default: null,\n },\n nout: {\n type : INTEGER,\n default: null,\n },\n txid: {\n type : STRING,\n default: null,\n },\n validAtHeight: {\n type : INTEGER,\n default: null,\n },\n outpoint: {\n type : STRING,\n default: null,\n },\n claimType: {\n type : STRING,\n default: null,\n },\n certificateId: {\n type : STRING,\n default: null,\n },\n author: {\n type : STRING,\n default: null,\n },\n description: {\n type : TEXT('long'),\n default: null,\n },\n language: {\n type : STRING,\n default: null,\n },\n license: {\n type : STRING,\n default: null,\n },\n licenseUrl: {\n type : STRING,\n default: null,\n },\n nsfw: {\n type : BOOLEAN,\n default: null,\n },\n preview: {\n type : STRING,\n default: null,\n },\n thumbnail: {\n type : STRING,\n default: null,\n },\n title: {\n type : STRING,\n default: null,\n },\n metadataVersion: {\n type : STRING,\n default: null,\n },\n contentType: {\n type : STRING,\n default: null,\n },\n source: {\n type : STRING,\n default: null,\n },\n sourceType: {\n type : STRING,\n default: null,\n },\n sourceVersion: {\n type : STRING,\n default: null,\n },\n streamVersion: {\n type : STRING,\n default: null,\n },\n valueVersion: {\n type : STRING,\n default: null,\n },\n channelName: {\n type : STRING,\n allowNull: true,\n default : null,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Claim.associate = db => {\n Claim.belongsTo(db.File, {\n foreignKey: {\n allowNull: true,\n },\n });\n };\n\n Claim.getShortClaimIdFromLongClaimId = function (claimId, claimName) {\n logger.debug(`Claim.getShortClaimIdFromLongClaimId for ${claimName}#${claimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name: claimName },\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n throw new Error('No claim(s) found with that claim name');\n default:\n resolve(returnShortId(result, claimId));\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getAllChannelClaims = function (channelClaimId) {\n logger.debug(`Claim.getAllChannelClaims for ${channelClaimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { certificateId: channelClaimId },\n order: [['height', 'ASC']],\n raw : true, // returns an array of only data, not an array of instances\n })\n .then(channelClaimsArray => {\n // logger.debug('channelclaimsarray length:', channelClaimsArray.length);\n switch (channelClaimsArray.length) {\n case 0:\n return resolve(null);\n default:\n channelClaimsArray.forEach(claim => {\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n return claim;\n });\n return resolve(channelClaimsArray);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getClaimIdByLongChannelId = function (channelClaimId, claimName) {\n logger.debug(`finding claim id for claim ${claimName} from channel ${channelClaimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name: claimName, certificateId: channelClaimId },\n order: [['id', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(result[0].claimId);\n default:\n logger.error(`${result.length} records found for \"${claimName}\" in channel \"${channelClaimId}\"`);\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimIdFromShortClaimId = function (name, shortId) {\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: {\n name,\n claimId: {\n $like: `${shortId}%`,\n }},\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n default: // note results must be sorted\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getTopFreeClaimIdByClaimName = function (name) {\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']], // note: maybe height and effective amount need to switch?\n })\n .then(result => {\n logger.debug('length of result', result.length);\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].dataValues.claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.validateLongClaimId = function (name, claimId) {\n return new Promise((resolve, reject) => {\n this.findOne({\n where: {name, claimId},\n })\n .then(result => {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimId = function (claimName, claimId) {\n logger.debug(`getLongClaimId(${claimName}, ${claimId})`);\n if (claimId && (claimId.length === 40)) { // if a full claim id is provided\n return this.validateLongClaimId(claimName, claimId);\n } else if (claimId && claimId.length < 40) {\n return this.getLongClaimIdFromShortClaimId(claimName, claimId); // if a short claim id is provided\n } else {\n return this.getTopFreeClaimIdByClaimName(claimName); // if no claim id is provided\n }\n };\n\n Claim.resolveClaim = function (name, claimId) {\n logger.debug(`Claim.resolveClaim: ${name} ${claimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name, claimId },\n })\n .then(claimArray => {\n switch (claimArray.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(prepareClaimData(claimArray[0].dataValues));\n default:\n logger.error(`more than one record matches ${name}#${claimId} in db.Claim`);\n return resolve(prepareClaimData(claimArray[0].dataValues));\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n return Claim;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/claim.js","module.exports = (sequelize, { STRING, BOOLEAN, INTEGER }) => {\n const File = sequelize.define(\n 'File',\n {\n name: {\n type : STRING,\n allowNull: false,\n },\n claimId: {\n type : STRING,\n allowNull: false,\n },\n address: {\n type : STRING,\n allowNull: false,\n },\n outpoint: {\n type : STRING,\n allowNull: false,\n },\n height: {\n type : INTEGER,\n allowNull: false,\n default : 0,\n },\n fileName: {\n type : STRING,\n allowNull: false,\n },\n filePath: {\n type : STRING,\n allowNull: false,\n },\n fileType: {\n type: STRING,\n },\n nsfw: {\n type : BOOLEAN,\n allowNull : false,\n defaultValue: false,\n },\n trendingEligible: {\n type : BOOLEAN,\n allowNull : false,\n defaultValue: true,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n File.associate = db => {\n File.hasMany(db.Request);\n File.hasOne(db.Claim);\n };\n\n File.getRecentClaims = function () {\n return this.findAll({\n where: { nsfw: false, trendingEligible: true },\n order: [['createdAt', 'DESC']],\n limit: 25,\n });\n };\n\n return File;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/file.js","module.exports = (sequelize, { STRING, BOOLEAN, TEXT }) => {\n const Request = sequelize.define(\n 'Request',\n {\n action: {\n type : STRING,\n allowNull: false,\n },\n url: {\n type : STRING,\n allowNull: false,\n },\n ipAddress: {\n type : STRING,\n allowNull: true,\n },\n result: {\n type : TEXT('long'),\n allowNull: true,\n default : null,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Request.associate = db => {\n Request.belongsTo(db.File, {\n foreignKey: {\n allowNull: true,\n },\n });\n };\n\n return Request;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/request.js","'use strict';\nconst bcrypt = require('bcrypt');\nconst logger = require('winston');\n\nmodule.exports = (sequelize, { STRING }) => {\n const User = sequelize.define(\n 'User',\n {\n userName: {\n type : STRING,\n allowNull: false,\n },\n password: {\n type : STRING,\n allowNull: false,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n User.associate = db => {\n User.hasOne(db.Channel);\n };\n\n User.prototype.comparePassword = function (password) {\n return bcrypt.compare(password, this.password);\n };\n\n User.prototype.changePassword = function (newPassword) {\n return new Promise((resolve, reject) => {\n // generate a salt string to use for hashing\n bcrypt.genSalt((saltError, salt) => {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(newPassword, salt, (hashError, hash) => {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the current password with the new hash\n this\n .update({password: hash})\n .then(() => {\n resolve();\n })\n .catch(error => {\n reject(error);\n });\n });\n });\n });\n };\n\n // pre-save hook method to hash the user's password before the user's info is saved to the db.\n User.hook('beforeCreate', (user, options) => {\n logger.debug('User.beforeCreate hook...');\n return new Promise((resolve, reject) => {\n // generate a salt string to use for hashing\n bcrypt.genSalt((saltError, salt) => {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(user.password, salt, (hashError, hash) => {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the password string with the hash password value\n user.password = hash;\n resolve();\n });\n });\n });\n });\n\n return User;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/user.js","module.exports = require(\"bcrypt\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"bcrypt\"\n// module id = 68\n// module chunks = 0","const PassportLocalStrategy = require('passport-local').Strategy;\nconst logger = require('winston');\nconst db = require('../models/index');\n\nconst returnUserAndChannelInfo = (userInstance) => {\n return new Promise((resolve, reject) => {\n let userInfo = {};\n userInfo['id'] = userInstance.id;\n userInfo['userName'] = userInstance.userName;\n userInstance\n .getChannel()\n .then(({channelName, channelClaimId}) => {\n userInfo['channelName'] = channelName;\n userInfo['channelClaimId'] = channelClaimId;\n return db.Certificate.getShortChannelIdFromLongChannelId(channelClaimId, channelName);\n })\n .then(shortChannelId => {\n userInfo['shortChannelId'] = shortChannelId;\n resolve(userInfo);\n })\n .catch(error => {\n reject(error);\n });\n });\n};\n\nmodule.exports = new PassportLocalStrategy(\n {\n usernameField: 'username',\n passwordField: 'password',\n },\n (username, password, done) => {\n return db.User\n .findOne({\n where: {userName: username},\n })\n .then(user => {\n if (!user) {\n logger.debug('no user found');\n return done(null, false, {message: 'Incorrect username or password'});\n }\n return user.comparePassword(password)\n .then(isMatch => {\n if (!isMatch) {\n logger.debug('incorrect password');\n return done(null, false, {message: 'Incorrect username or password'});\n }\n logger.debug('Password was a match, returning User');\n return returnUserAndChannelInfo(user)\n .then(userInfo => {\n return done(null, userInfo);\n })\n .catch(error => {\n return error;\n });\n })\n .catch(error => {\n return error;\n });\n })\n .catch(error => {\n return done(error);\n });\n },\n);\n\n\n\n// WEBPACK FOOTER //\n// ./server/passport/local-login.js","const logger = require('winston');\nconst passport = require('passport');\n\nmodule.exports = (app) => {\n // route for sign up\n app.post('/signup', passport.authenticate('local-signup'), (req, res) => {\n logger.verbose(`successful signup for ${req.user.channelName}`);\n res.status(200).json({\n success : true,\n channelName : req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId,\n });\n });\n // route for log in\n app.post('/login', (req, res, next) => {\n passport.authenticate('local-login', (err, user, info) => {\n if (err) {\n return next(err);\n }\n if (!user) {\n return res.status(400).json({\n success: false,\n message: info.message,\n });\n }\n logger.debug('successful login');\n req.logIn(user, (err) => {\n if (err) {\n return next(err);\n }\n return res.status(200).json({\n success : true,\n channelName : req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId,\n });\n });\n })(req, res, next);\n });\n // route to log out\n app.get('/logout', (req, res) => {\n req.logout();\n res.status(200).json({success: true, message: 'you successfully logged out'});\n });\n // see if user is authenticated, and return credentials if so\n app.get('/user', (req, res) => {\n if (req.user) {\n res.status(200).json({success: true, data: req.user});\n } else {\n res.status(401).json({success: false, message: 'user is not logged in'});\n }\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/auth-routes.js","const logger = require('winston');\nconst multipart = require('connect-multiparty');\nconst { publishing: { uploadDirectory }, details: { host } } = require('../../config/siteConfig.js');\nconst multipartMiddleware = multipart({uploadDir: uploadDirectory});\nconst db = require('../models/index');\nconst { claimNameIsAvailable, checkChannelAvailability, publish } = require('../controllers/publishController.js');\nconst { getClaimList, resolveUri, getClaim } = require('../helpers/lbryApi.js');\nconst { addGetResultsToFileData, createBasicPublishParams, createThumbnailPublishParams, parsePublishApiRequestBody, parsePublishApiRequestFiles, createFileData } = require('../helpers/publishHelpers.js');\nconst errorHandlers = require('../helpers/errorHandlers.js');\nconst { sendGATimingEvent } = require('../helpers/googleAnalytics.js');\nconst { authenticateUser } = require('../auth/authentication.js');\nconst { getChannelData, getChannelClaims, getClaimId } = require('../controllers/serveController.js');\n\nconst NO_CHANNEL = 'NO_CHANNEL';\nconst NO_CLAIM = 'NO_CLAIM';\n\nmodule.exports = (app) => {\n // route to check whether site has published to a channel\n app.get('/api/channel/availability/:name', ({ ip, originalUrl, params: { name } }, res) => {\n const gaStartTime = Date.now();\n checkChannelAvailability(name)\n .then(availableName => {\n res.status(200).json(availableName);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short channel id from long channel Id\n app.get('/api/channel/short-id/:longId/:name', ({ ip, originalUrl, params }, res) => {\n db.Certificate.getShortChannelIdFromLongChannelId(params.longId, params.name)\n .then(shortId => {\n res.status(200).json(shortId);\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/data/:channelName/:channelClaimId', ({ ip, originalUrl, body, params }, res) => {\n const channelName = params.channelName;\n let channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n getChannelData(channelName, channelClaimId, 0)\n .then(data => {\n if (data === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'No matching channel was found'});\n }\n res.status(200).json({success: true, data});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/claims/:channelName/:channelClaimId/:page', ({ ip, originalUrl, body, params }, res) => {\n const channelName = params.channelName;\n let channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n const page = params.page;\n getChannelClaims(channelName, channelClaimId, page)\n .then(data => {\n if (data === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'No matching channel was found'});\n }\n res.status(200).json({success: true, data});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a claim_list request on the daemon\n app.get('/api/claim/list/:name', ({ ip, originalUrl, params }, res) => {\n getClaimList(params.name)\n .then(claimsList => {\n res.status(200).json(claimsList);\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get an asset\n app.get('/api/claim/get/:name/:claimId', ({ ip, originalUrl, params }, res) => {\n const name = params.name;\n const claimId = params.claimId;\n // resolve the claim\n db.Claim.resolveClaim(name, claimId)\n .then(resolveResult => {\n // make sure a claim actually exists at that uri\n if (!resolveResult) {\n throw new Error('No matching uri found in Claim table');\n }\n let fileData = createFileData(resolveResult);\n // get the claim\n return Promise.all([fileData, getClaim(`${name}#${claimId}`)]);\n })\n .then(([ fileData, getResult ]) => {\n fileData = addGetResultsToFileData(fileData, getResult);\n return Promise.all([db.upsert(db.File, fileData, {name, claimId}, 'File'), getResult]);\n })\n .then(([ fileRecord, {message, completed} ]) => {\n res.status(200).json({ success: true, message, completed });\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to check whether this site published to a claim\n app.get('/api/claim/availability/:name', ({ ip, originalUrl, params: { name } }, res) => {\n const gaStartTime = Date.now();\n claimNameIsAvailable(name)\n .then(result => {\n res.status(200).json(result);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a resolve request on the daemon\n app.get('/api/claim/resolve/:name/:claimId', ({ headers, ip, originalUrl, params }, res) => {\n resolveUri(`${params.name}#${params.claimId}`)\n .then(resolvedUri => {\n res.status(200).json(resolvedUri);\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a publish request on the daemon\n app.post('/api/claim/publish', multipartMiddleware, ({ body, files, headers, ip, originalUrl, user }, res) => {\n // define variables\n let channelName, channelId, channelPassword, description, fileName, filePath, fileType, gaStartTime, license, name, nsfw, thumbnail, thumbnailFileName, thumbnailFilePath, thumbnailFileType, title;\n // record the start time of the request\n gaStartTime = Date.now();\n // validate the body and files of the request\n try {\n // validateApiPublishRequest(body, files);\n ({name, nsfw, license, title, description, thumbnail} = parsePublishApiRequestBody(body));\n ({fileName, filePath, fileType, thumbnailFileName, thumbnailFilePath, thumbnailFileType} = parsePublishApiRequestFiles(files));\n ({channelName, channelId, channelPassword} = body);\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n // check channel authorization\n Promise.all([\n authenticateUser(channelName, channelId, channelPassword, user),\n claimNameIsAvailable(name),\n createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail),\n createThumbnailPublishParams(thumbnailFilePath, name, license, nsfw),\n ])\n .then(([{channelName, channelClaimId}, validatedClaimName, publishParams, thumbnailPublishParams]) => {\n // add channel details to the publish params\n if (channelName && channelClaimId) {\n publishParams['channel_name'] = channelName;\n publishParams['channel_id'] = channelClaimId;\n }\n // publish the thumbnail\n if (thumbnailPublishParams) {\n publish(thumbnailPublishParams, thumbnailFileName, thumbnailFileType);\n }\n // publish the asset\n return publish(publishParams, fileName, fileType);\n })\n .then(result => {\n res.status(200).json({\n success: true,\n message: 'publish completed successfully',\n data : {\n name,\n claimId: result.claim_id,\n url : `${host}/${result.claim_id}/${name}`,\n lbryTx : result,\n },\n });\n // record the publish end time and send to google analytics\n sendGATimingEvent('end-to-end', 'publish', fileType, gaStartTime, Date.now());\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short claim id from long claim Id\n app.get('/api/claim/short-id/:longId/:name', ({ ip, originalUrl, body, params }, res) => {\n db.Claim.getShortClaimIdFromLongClaimId(params.longId, params.name)\n .then(shortId => {\n res.status(200).json({success: true, data: shortId});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.post('/api/claim/long-id', ({ ip, originalUrl, body, params }, res) => {\n logger.debug('body:', body);\n const channelName = body.channelName;\n const channelClaimId = body.channelClaimId;\n const claimName = body.claimName;\n const claimId = body.claimId;\n getClaimId(channelName, channelClaimId, claimName, claimId)\n .then(result => {\n if (result === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'No matching channel could be found'});\n }\n if (result === NO_CLAIM) {\n return res.status(404).json({success: false, message: 'No matching claim id could be found'});\n }\n res.status(200).json({success: true, data: result});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/claim/data/:claimName/:claimId', ({ ip, originalUrl, body, params }, res) => {\n const claimName = params.claimName;\n let claimId = params.claimId;\n if (claimId === 'none') claimId = null;\n db.Claim.resolveClaim(claimName, claimId)\n .then(claimInfo => {\n if (!claimInfo) {\n return res.status(404).json({success: false, message: 'No claim could be found'});\n }\n res.status(200).json({success: true, data: claimInfo});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to see if asset is available locally\n app.get('/api/file/availability/:name/:claimId', ({ ip, originalUrl, params }, res) => {\n const name = params.name;\n const claimId = params.claimId;\n db.File.findOne({where: {name, claimId}})\n .then(result => {\n if (result) {\n return res.status(200).json({success: true, data: true});\n }\n res.status(200).json({success: true, data: false});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/api-routes.js","module.exports = require(\"connect-multiparty\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"connect-multiparty\"\n// module id = 72\n// module chunks = 0","const logger = require('winston');\nconst db = require('../models/index');\nconst lbryApi = require('../helpers/lbryApi.js');\nconst publishHelpers = require('../helpers/publishHelpers.js');\nconst { publishing: { primaryClaimAddress, additionalClaimAddresses } } = require('../../config/siteConfig.js');\nconst Sequelize = require('sequelize');\nconst Op = Sequelize.Op;\n\nmodule.exports = {\n publish (publishParams, fileName, fileType) {\n return new Promise((resolve, reject) => {\n let publishResults, certificateId, channelName;\n // publish the file\n return lbryApi.publishClaim(publishParams)\n .then(tx => {\n logger.info(`Successfully published ${publishParams.name} ${fileName}`, tx);\n publishResults = tx;\n // get the channel information\n if (publishParams.channel_name) {\n logger.debug(`this claim was published in channel: ${publishParams.channel_name}`);\n return db.Channel.findOne({where: {channelName: publishParams.channel_name}});\n } else {\n logger.debug('this claim was not published in a channel');\n return null;\n }\n })\n .then(channel => {\n // set channel information\n certificateId = null;\n channelName = null;\n if (channel) {\n certificateId = channel.channelClaimId;\n channelName = channel.channelName;\n }\n logger.debug(`certificateId: ${certificateId}`);\n })\n .then(() => {\n // create the File record\n const fileRecord = {\n name : publishParams.name,\n claimId : publishResults.claim_id,\n title : publishParams.metadata.title,\n description: publishParams.metadata.description,\n address : publishParams.claim_address,\n outpoint : `${publishResults.txid}:${publishResults.nout}`,\n height : 0,\n fileName,\n filePath : publishParams.file_path,\n fileType,\n nsfw : publishParams.metadata.nsfw,\n };\n // create the Claim record\n const claimRecord = {\n name : publishParams.name,\n claimId : publishResults.claim_id,\n title : publishParams.metadata.title,\n description: publishParams.metadata.description,\n address : publishParams.claim_address,\n thumbnail : publishParams.metadata.thumbnail,\n outpoint : `${publishResults.txid}:${publishResults.nout}`,\n height : 0,\n contentType: fileType,\n nsfw : publishParams.metadata.nsfw,\n amount : publishParams.bid,\n certificateId,\n channelName,\n };\n // upsert criteria\n const upsertCriteria = {\n name : publishParams.name,\n claimId: publishResults.claim_id,\n };\n // upsert the records\n return Promise.all([db.upsert(db.File, fileRecord, upsertCriteria, 'File'), db.upsert(db.Claim, claimRecord, upsertCriteria, 'Claim')]);\n })\n .then(([file, claim]) => {\n logger.debug('File and Claim records successfully created');\n return Promise.all([file.setClaim(claim), claim.setFile(file)]);\n })\n .then(() => {\n logger.debug('File and Claim records successfully associated');\n resolve(publishResults); // resolve the promise with the result from lbryApi.publishClaim;\n })\n .catch(error => {\n logger.error('PUBLISH ERROR', error);\n publishHelpers.deleteTemporaryFile(publishParams.file_path); // delete the local file\n reject(error);\n });\n });\n },\n claimNameIsAvailable (name) {\n const claimAddresses = additionalClaimAddresses || [];\n claimAddresses.push(primaryClaimAddress);\n // find any records where the name is used\n return db.Claim\n .findAll({\n attributes: ['address'],\n where : {\n name,\n address: {\n [Op.or]: claimAddresses,\n },\n },\n })\n .then(result => {\n if (result.length >= 1) {\n throw new Error('That claim is already in use');\n };\n return name;\n })\n .catch(error => {\n throw error;\n });\n },\n checkChannelAvailability (name) {\n return db.Channel\n .findAll({\n where: { channelName: name },\n })\n .then(result => {\n if (result.length >= 1) {\n throw new Error('That channel has already been claimed');\n }\n return name;\n })\n .catch(error => {\n throw error;\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/controllers/publishController.js","module.exports = require(\"fs\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"fs\"\n// module id = 74\n// module chunks = 0","const db = require('../models/index');\nconst logger = require('winston');\n\nmodule.exports = {\n authenticateUser (channelName, channelId, channelPassword, user) {\n // case: no channelName or channel Id are provided (anonymous), regardless of whether user token is provided\n if (!channelName && !channelId) {\n return {\n channelName : null,\n channelClaimId: null,\n };\n }\n // case: channelName or channel Id are provided with user token\n if (user) {\n if (channelName && channelName !== user.channelName) {\n throw new Error('the provided channel name does not match user credentials');\n }\n if (channelId && channelId !== user.channelClaimId) {\n throw new Error('the provided channel id does not match user credentials');\n }\n return {\n channelName : user.channelName,\n channelClaimId: user.channelClaimId,\n };\n }\n // case: channelName or channel Id are provided with password instead of user token\n if (!channelPassword) throw new Error('no channel password provided');\n return module.exports.authenticateChannelCredentials(channelName, channelId, channelPassword);\n },\n authenticateChannelCredentials (channelName, channelId, userPassword) {\n return new Promise((resolve, reject) => {\n // hoisted variables\n let channelData;\n // build the params for finding the channel\n let channelFindParams = {};\n if (channelName) channelFindParams['channelName'] = channelName;\n if (channelId) channelFindParams['channelClaimId'] = channelId;\n // find the channel\n db.Channel\n .findOne({\n where: channelFindParams,\n })\n .then(channel => {\n if (!channel) {\n logger.debug('no channel found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n channelData = channel.get();\n logger.debug('channel data:', channelData);\n return db.User.findOne({\n where: { userName: channelData.channelName.substring(1) },\n });\n })\n .then(user => {\n if (!user) {\n logger.debug('no user found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n return user.comparePassword(userPassword);\n })\n .then(isMatch => {\n if (!isMatch) {\n logger.debug('incorrect password');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n logger.debug('...password was a match...');\n resolve(channelData);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/auth/authentication.js","const CLAIMS_PER_PAGE = 12;\n\nmodule.exports = {\n returnPaginatedChannelClaims (channelName, longChannelClaimId, claims, page) {\n const totalPages = module.exports.determineTotalPages(claims);\n const paginationPage = module.exports.getPageFromQuery(page);\n const viewData = {\n channelName : channelName,\n longChannelClaimId: longChannelClaimId,\n claims : module.exports.extractPageFromClaims(claims, paginationPage),\n previousPage : module.exports.determinePreviousPage(paginationPage),\n currentPage : paginationPage,\n nextPage : module.exports.determineNextPage(totalPages, paginationPage),\n totalPages : totalPages,\n totalResults : module.exports.determineTotalClaims(claims),\n };\n return viewData;\n },\n getPageFromQuery (page) {\n if (page) {\n return parseInt(page);\n }\n return 1;\n },\n extractPageFromClaims (claims, pageNumber) {\n if (!claims) {\n return []; // if no claims, return this default\n }\n // logger.debug('claims is array?', Array.isArray(claims));\n // logger.debug(`pageNumber ${pageNumber} is number?`, Number.isInteger(pageNumber));\n const claimStartIndex = (pageNumber - 1) * CLAIMS_PER_PAGE;\n const claimEndIndex = claimStartIndex + CLAIMS_PER_PAGE;\n const pageOfClaims = claims.slice(claimStartIndex, claimEndIndex);\n return pageOfClaims;\n },\n determineTotalPages (claims) {\n if (!claims) {\n return 0;\n } else {\n const totalClaims = claims.length;\n if (totalClaims < CLAIMS_PER_PAGE) {\n return 1;\n }\n const fullPages = Math.floor(totalClaims / CLAIMS_PER_PAGE);\n const remainder = totalClaims % CLAIMS_PER_PAGE;\n if (remainder === 0) {\n return fullPages;\n }\n return fullPages + 1;\n }\n },\n determinePreviousPage (currentPage) {\n if (currentPage === 1) {\n return null;\n }\n return currentPage - 1;\n },\n determineNextPage (totalPages, currentPage) {\n if (currentPage === totalPages) {\n return null;\n }\n return currentPage + 1;\n },\n determineTotalClaims (claims) {\n if (!claims) {\n return 0;\n }\n return claims.length;\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/channelPagination.js","const { details: host } = require('../../config/siteConfig.js');\nconst handlePageRender = require('../helpers/handlePageRender.jsx');\n\nmodule.exports = (app) => {\n // route for the home page\n app.get('/', (req, res) => {\n handlePageRender(req, res);\n });\n // route to display login page\n app.get('/login', (req, res) => {\n handlePageRender(req, res);\n });\n // route to show 'about' page\n app.get('/about', (req, res) => {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/trending', (req, res) => {\n res.status(301).redirect('/popular');\n });\n app.get('/popular', (req, res) => {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/new', (req, res) => {\n handlePageRender(req, res);\n });\n // route to send embedable video player (for twitter)\n app.get('/embed/:claimId/:name', ({ params }, res) => {\n const claimId = params.claimId;\n const name = params.name;\n // get and render the content\n res.status(200).render('embed', { layout: 'embed', host, claimId, name });\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/page-routes.js","import * as actions from 'constants/publish_action_types';\nimport { LOGIN } from 'constants/publish_channel_select_states';\nconst { publishing } = require('../../config/siteConfig.js');\n\nconst initialState = {\n disabled : publishing.disabled,\n disabledMessage : publishing.disabledMessage,\n publishInChannel : false,\n selectedChannel : LOGIN,\n showMetadataInputs: false,\n status : {\n status : null,\n message: null,\n },\n error: {\n file : null,\n url : null,\n channel : null,\n publishSubmit: null,\n },\n file : null,\n claim : '',\n metadata: {\n title : '',\n description: '',\n license : '',\n nsfw : false,\n },\n thumbnail: null,\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n case actions.FILE_SELECTED:\n return Object.assign({}, initialState, { // note: clears to initial state\n file: action.data,\n });\n case actions.FILE_CLEAR:\n return initialState;\n case actions.METADATA_UPDATE:\n return Object.assign({}, state, {\n metadata: Object.assign({}, state.metadata, {\n [action.data.name]: action.data.value,\n }),\n });\n case actions.CLAIM_UPDATE:\n return Object.assign({}, state, {\n claim: action.data,\n });\n case actions.SET_PUBLISH_IN_CHANNEL:\n return Object.assign({}, state, {\n publishInChannel: action.channel,\n });\n case actions.PUBLISH_STATUS_UPDATE:\n return Object.assign({}, state, {\n status: action.data,\n });\n case actions.ERROR_UPDATE:\n return Object.assign({}, state, {\n error: Object.assign({}, state.error, {\n [action.data.name]: action.data.value,\n }),\n });\n case actions.SELECTED_CHANNEL_UPDATE:\n return Object.assign({}, state, {\n selectedChannel: action.data,\n });\n case actions.TOGGLE_METADATA_INPUTS:\n return Object.assign({}, state, {\n showMetadataInputs: action.data,\n });\n case actions.THUMBNAIL_NEW:\n return Object.assign({}, state, {\n thumbnail: action.data,\n });\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/publish.js","import * as actions from 'constants/channel_action_types';\n\nconst initialState = {\n loggedInChannel: {\n name : null,\n shortId: null,\n longId : null,\n },\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n case actions.CHANNEL_UPDATE:\n return Object.assign({}, state, {\n loggedInChannel: action.data,\n });\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/channel.js","import * as actions from 'constants/show_action_types';\nimport { LOCAL_CHECK, ERROR } from 'constants/asset_display_states';\n\nconst initialState = {\n request: {\n error: null,\n type : null,\n id : null,\n },\n requestList : {},\n channelList : {},\n assetList : {},\n displayAsset: {\n error : null,\n status: LOCAL_CHECK,\n },\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n // handle request\n case actions.REQUEST_ERROR:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n error: action.data,\n }),\n });\n case actions.REQUEST_UPDATE:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n type: action.data.requestType,\n id : action.data.requestId,\n }),\n });\n // store requests\n case actions.REQUEST_LIST_ADD:\n return Object.assign({}, state, {\n requestList: Object.assign({}, state.requestList, {\n [action.data.id]: {\n error: action.data.error,\n key : action.data.key,\n },\n }),\n });\n // asset data\n case actions.ASSET_ADD:\n return Object.assign({}, state, {\n assetList: Object.assign({}, state.assetList, {\n [action.data.id]: {\n error : action.data.error,\n name : action.data.name,\n claimId : action.data.claimId,\n shortId : action.data.shortId,\n claimData: action.data.claimData,\n },\n }),\n });\n // channel data\n case actions.CHANNEL_ADD:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, {\n [action.data.id]: {\n name : action.data.name,\n longId : action.data.longId,\n shortId : action.data.shortId,\n claimsData: action.data.claimsData,\n },\n }),\n });\n case actions.CHANNEL_CLAIMS_UPDATE_SUCCESS:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, {\n [action.data.channelListId]: Object.assign({}, state.channelList[action.data.channelListId], {\n claimsData: action.data.claimsData,\n }),\n }),\n });\n // display an asset\n case actions.FILE_AVAILABILITY_UPDATE:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n status: action.data,\n }),\n });\n case actions.DISPLAY_ASSET_ERROR:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n error : action.data,\n status: ERROR,\n }),\n });\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/show.js","const siteConfig = require('../../config/siteConfig.js');\n\nconst {\n analytics: {\n googleId: googleAnalyticsId,\n },\n assetDefaults: {\n thumbnail: defaultThumbnail,\n description: defaultDescription,\n },\n details: {\n description,\n host,\n title,\n twitter,\n },\n} = siteConfig;\n\nconst initialState = {\n description,\n googleAnalyticsId,\n host,\n title,\n twitter,\n defaultDescription,\n defaultThumbnail,\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/site.js","module.exports = require(\"react-ga\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-ga\"\n// module id = 82\n// module chunks = 0","import React from 'react';\nimport SEO from 'components/SEO';\nimport NavBar from 'containers/NavBar';\nimport PublishTool from 'containers/PublishTool';\n\nclass HomePage extends React.Component {\n render () {\n return (\n
\n \n \n
\n \n
\n
\n );\n }\n};\n\nexport default HomePage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/HomePage/index.jsx","import React from 'react';\nimport Helmet from 'react-helmet';\nimport PropTypes from 'prop-types';\n\nimport { createPageTitle } from 'utils/pageTitle';\nimport { createMetaTags } from 'utils/metaTags';\nimport { createCanonicalLink } from 'utils/canonicalLink';\n\nclass SEO extends React.Component {\n render () {\n // props from state\n const { defaultDescription, defaultThumbnail, siteDescription, siteHost, siteTitle, siteTwitter } = this.props;\n // props from parent\n const { asset, channel, pageUri } = this.props;\n let { pageTitle } = this.props;\n // create page title, tags, and canonical link\n pageTitle = createPageTitle(siteTitle, pageTitle);\n const metaTags = createMetaTags(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail);\n const canonicalLink = createCanonicalLink(asset, channel, pageUri, siteHost);\n // render results\n return (\n \n );\n }\n};\n\nSEO.propTypes = {\n pageTitle: PropTypes.string,\n pageUri : PropTypes.string,\n channel : PropTypes.object,\n asset : PropTypes.object,\n};\n\nexport default SEO;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/SEO/view.jsx","export const createPageTitle = (siteTitle, pageTitle) => {\n if (!pageTitle) {\n return `${siteTitle}`;\n }\n return `${siteTitle} - ${pageTitle}`;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/pageTitle.js","const determineOgThumbnailContentType = (thumbnail) => {\n if (thumbnail) {\n const fileExt = thumbnail.substring(thumbnail.lastIndexOf('.'));\n switch (fileExt) {\n case 'jpeg':\n case 'jpg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'gif':\n return 'image/gif';\n case 'mp4':\n return 'video/mp4';\n default:\n return 'image/jpeg';\n }\n }\n return '';\n};\n\nconst createBasicMetaTags = (siteHost, siteDescription, siteTitle, siteTwitter) => {\n return [\n {property: 'og:title', content: siteTitle},\n {property: 'og:url', content: siteHost},\n {property: 'og:site_name', content: siteTitle},\n {property: 'og:description', content: siteDescription},\n {property: 'twitter:site', content: siteTwitter},\n {property: 'twitter:card', content: 'summary'},\n ];\n};\n\nconst createChannelMetaTags = (siteTitle, siteHost, siteTwitter, channel) => {\n const { name, longId } = channel;\n return [\n {property: 'og:title', content: `${name} on ${siteTitle}`},\n {property: 'og:url', content: `${siteHost}/${name}:${longId}`},\n {property: 'og:site_name', content: siteTitle},\n {property: 'og:description', content: `${name}, a channel on ${siteTitle}`},\n {property: 'twitter:site', content: siteTwitter},\n {property: 'twitter:card', content: 'summary'},\n ];\n};\n\nconst createAssetMetaTags = (siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail) => {\n const { claimData } = asset;\n const { contentType } = claimData;\n const embedUrl = `${siteHost}/${claimData.claimId}/${claimData.name}`;\n const showUrl = `${siteHost}/${claimData.claimId}/${claimData.name}`;\n const source = `${siteHost}/${claimData.claimId}/${claimData.name}.${claimData.fileExt}`;\n const ogTitle = claimData.title || claimData.name;\n const ogDescription = claimData.description || defaultDescription;\n const ogThumbnailContentType = determineOgThumbnailContentType(claimData.thumbnail);\n const ogThumbnail = claimData.thumbnail || defaultThumbnail;\n const metaTags = [\n {property: 'og:title', content: ogTitle},\n {property: 'og:url', content: showUrl},\n {property: 'og:site_name', content: siteTitle},\n {property: 'og:description', content: ogDescription},\n {property: 'og:image:width', content: 600},\n {property: 'og:image:height', content: 315},\n {property: 'twitter:site', content: siteTwitter},\n ];\n if (contentType === 'video/mp4' || contentType === 'video/webm') {\n metaTags.push({property: 'og:video', content: source});\n metaTags.push({property: 'og:video:secure_url', content: source});\n metaTags.push({property: 'og:video:type', content: contentType});\n metaTags.push({property: 'og:image', content: ogThumbnail});\n metaTags.push({property: 'og:image:type', content: ogThumbnailContentType});\n metaTags.push({property: 'og:type', content: 'video'});\n metaTags.push({property: 'twitter:card', content: 'player'});\n metaTags.push({property: 'twitter:player', content: embedUrl});\n metaTags.push({property: 'twitter:player:width', content: 600});\n metaTags.push({property: 'twitter:text:player_width', content: 600});\n metaTags.push({property: 'twitter:player:height', content: 337});\n metaTags.push({property: 'twitter:player:stream', content: source});\n metaTags.push({property: 'twitter:player:stream:content_type', content: contentType});\n } else {\n metaTags.push({property: 'og:image', content: source});\n metaTags.push({property: 'og:image:type', content: contentType});\n metaTags.push({property: 'og:type', content: 'article'});\n metaTags.push({property: 'twitter:card', content: 'summary_large_image'});\n }\n return metaTags;\n};\n\nexport const createMetaTags = (siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail) => {\n if (asset) {\n return createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail);\n };\n if (channel) {\n return createChannelMetaTags(siteHost, siteTitle, siteTwitter, channel);\n };\n return createBasicMetaTags(siteDescription, siteHost, siteTitle, siteTwitter);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/metaTags.js","const createBasicCanonicalLink = (page, siteHost) => {\n return `${siteHost}/${page}`;\n};\n\nconst createAssetCanonicalLink = (asset, siteHost) => {\n let channelName, certificateId, name, claimId;\n if (asset.claimData) {\n ({ channelName, certificateId, name, claimId } = asset.claimData);\n };\n if (channelName) {\n return `${siteHost}/${channelName}:${certificateId}/${name}`;\n };\n return `${siteHost}/${claimId}/${name}`;\n};\n\nconst createChannelCanonicalLink = (channel, siteHost) => {\n const { name, longId } = channel;\n return `${siteHost}/${name}:${longId}`;\n};\n\nexport const createCanonicalLink = (asset, channel, page, siteHost) => {\n if (asset) {\n return createAssetCanonicalLink(asset, siteHost);\n }\n if (channel) {\n return createChannelCanonicalLink(channel, siteHost);\n }\n return createBasicCanonicalLink(page, siteHost);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/canonicalLink.js","import React from 'react';\nimport { NavLink, withRouter } from 'react-router-dom';\nimport Logo from 'components/Logo';\nimport NavBarChannelDropdown from 'components/NavBarChannelOptionsDropdown';\nimport request from 'utils/request';\n\nconst VIEW = 'VIEW';\nconst LOGOUT = 'LOGOUT';\n\nclass NavBar extends React.Component {\n constructor (props) {\n super(props);\n this.checkForLoggedInUser = this.checkForLoggedInUser.bind(this);\n this.logoutUser = this.logoutUser.bind(this);\n this.handleSelection = this.handleSelection.bind(this);\n }\n componentDidMount () {\n // check to see if the user is already logged in\n this.checkForLoggedInUser();\n }\n checkForLoggedInUser () {\n const params = {credentials: 'include'};\n request('/user', params)\n .then(({ data }) => {\n this.props.onChannelLogin(data.channelName, data.shortChannelId, data.channelClaimId);\n })\n .catch(error => {\n console.log('/user error:', error.message);\n });\n }\n logoutUser () {\n const params = {credentials: 'include'};\n request('/logout', params)\n .then(() => {\n this.props.onChannelLogout();\n })\n .catch(error => {\n console.log('/logout error', error.message);\n });\n }\n handleSelection (event) {\n const value = event.target.selectedOptions[0].value;\n switch (value) {\n case LOGOUT:\n this.logoutUser();\n break;\n case VIEW:\n // redirect to channel page\n this.props.history.push(`/${this.props.channelName}:${this.props.channelLongId}`);\n break;\n default:\n break;\n }\n }\n render () {\n const { siteDescription } = this.props;\n return (\n
\n
\n \n
\n {siteDescription}\n
\n
\n Publish\n About\n { this.props.channelName ? (\n \n ) : (\n Channel\n )}\n
\n
\n
\n );\n }\n}\n\nexport default withRouter(NavBar);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/NavBar/view.jsx","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nfunction Logo () {\n return (\n \n \n Logo\n Spee.ch logo\n \n \n \n Spee<h\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Logo;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/Logo/index.jsx","import React from 'react';\n\nfunction NavBarChannelDropdown ({ channelName, handleSelection, defaultSelection, VIEW, LOGOUT }) {\n return (\n \n );\n};\n\nexport default NavBarChannelDropdown;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/NavBarChannelOptionsDropdown/index.jsx","module.exports = require(\"cross-fetch/polyfill\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"cross-fetch/polyfill\"\n// module id = 91\n// module chunks = 0","import {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n disabled: publish.disabled,\n file : publish.file,\n status : publish.status.status,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTool/index.js","import React from 'react';\nimport Dropzone from 'containers/Dropzone';\nimport PublishDetails from 'containers/PublishDetails';\nimport PublishStatus from 'containers/PublishStatus';\nimport PublishDisabledMessage from 'containers/PublishDisabledMessage';\n\nclass PublishTool extends React.Component {\n render () {\n if (this.props.disabled) {\n console.log('publish is disabled');\n return (\n \n );\n } else {\n console.log('publish is not disabled');\n if (this.props.file) {\n if (this.props.status) {\n return (\n \n );\n } else {\n return ;\n }\n }\n return ;\n }\n }\n};\n\nexport default PublishTool;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTool/view.jsx","import React from 'react';\nimport { validateFile } from 'utils/file';\nimport PublishPreview from 'components/PublishPreview';\n\nclass Dropzone extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n dragOver : false,\n mouseOver : false,\n dimPreview: false,\n };\n this.handleDrop = this.handleDrop.bind(this);\n this.handleDragOver = this.handleDragOver.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleDragEnter = this.handleDragEnter.bind(this);\n this.handleDragLeave = this.handleDragLeave.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleClick = this.handleClick.bind(this);\n this.handleFileInput = this.handleFileInput.bind(this);\n this.chooseFile = this.chooseFile.bind(this);\n }\n handleDrop (event) {\n event.preventDefault();\n this.setState({dragOver: false});\n // if dropped items aren't files, reject them\n const dt = event.dataTransfer;\n if (dt.items) {\n if (dt.items[0].kind === 'file') {\n const droppedFile = dt.items[0].getAsFile();\n this.chooseFile(droppedFile);\n }\n }\n }\n handleDragOver (event) {\n event.preventDefault();\n }\n handleDragEnd (event) {\n var dt = event.dataTransfer;\n if (dt.items) {\n for (var i = 0; i < dt.items.length; i++) {\n dt.items.remove(i);\n }\n } else {\n event.dataTransfer.clearData();\n }\n }\n handleDragEnter () {\n this.setState({dragOver: true, dimPreview: true});\n }\n handleDragLeave () {\n this.setState({dragOver: false, dimPreview: false});\n }\n handleMouseEnter () {\n this.setState({mouseOver: true, dimPreview: true});\n }\n handleMouseLeave () {\n this.setState({mouseOver: false, dimPreview: false});\n }\n handleClick (event) {\n event.preventDefault();\n document.getElementById('file_input').click();\n }\n handleFileInput (event) {\n event.preventDefault();\n const fileList = event.target.files;\n this.chooseFile(fileList[0]);\n }\n chooseFile (file) {\n if (file) {\n try {\n validateFile(file); // validate the file's name, type, and size\n } catch (error) {\n return this.props.setFileError(error.message);\n }\n // stage it so it will be ready when the publish button is clicked\n this.props.selectFile(file);\n }\n }\n render () {\n return (\n
\n
\n \n
\n
\n {this.props.file ? (\n
\n \n
\n { this.state.dragOver ? (\n
\n

Drop it.

\n
\n ) : (\n null\n )}\n { this.state.mouseOver ? (\n
\n

{this.props.fileError}

\n

Drag & drop image or video here to publish

\n

OR

\n

CHOOSE FILE

\n
\n ) : (\n null\n )}\n
\n
\n ) : (\n
\n { this.state.dragOver ? (\n
\n

Drop it.

\n
\n ) : (\n
\n

{this.props.fileError}

\n

Drag & drop image or video here to publish

\n

OR

\n

CHOOSE FILE

\n
\n )}\n
\n )}\n
\n
\n );\n }\n};\n\nexport default Dropzone;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/Dropzone/view.jsx","module.exports = {\n validateFile (file) {\n if (!file) {\n throw new Error('no file provided');\n }\n if (/'/.test(file.name)) {\n throw new Error('apostrophes are not allowed in the file name');\n }\n // validate size and type\n switch (file.type) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n if (file.size > 10000000) {\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n throw new Error('Sorry, GIFs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n throw new Error(file.type + ' is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/file.js","import React from 'react';\nimport PropTypes from 'prop-types';\n\nclass PublishPreview extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n imgSource : '',\n defaultThumbnail: '/assets/img/video_thumb_default.png',\n };\n }\n componentDidMount () {\n this.setPreviewImageSource(this.props.file);\n }\n componentWillReceiveProps (newProps) {\n if (newProps.file !== this.props.file) {\n this.setPreviewImageSource(newProps.file);\n }\n if (newProps.thumbnail !== this.props.thumbnail) {\n if (newProps.thumbnail) {\n this.setPreviewImageSourceFromFile(newProps.thumbnail);\n } else {\n this.setState({imgSource: this.state.defaultThumbnail});\n }\n }\n }\n setPreviewImageSourceFromFile (file) {\n const previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = () => {\n this.setState({imgSource: previewReader.result});\n };\n }\n setPreviewImageSource (file) {\n if (file.type !== 'video/mp4') {\n this.setPreviewImageSourceFromFile(file);\n } else {\n if (this.props.thumbnail) {\n this.setPreviewImageSourceFromFile(this.props.thumbnail);\n }\n this.setState({imgSource: this.state.defaultThumbnail});\n }\n }\n render () {\n return (\n \n );\n }\n};\n\nPublishPreview.propTypes = {\n dimPreview: PropTypes.bool.isRequired,\n file : PropTypes.object.isRequired,\n thumbnail : PropTypes.object,\n};\n\nexport default PublishPreview;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/PublishPreview/index.jsx","import {connect} from 'react-redux';\nimport {clearFile, startPublish} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, publish }) => {\n return {\n file: publish.file,\n };\n};\n\nconst mapDispatchToProps = {\n clearFile,\n startPublish,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDetails/index.js","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport Dropzone from 'containers/Dropzone';\nimport PublishTitleInput from 'containers/PublishTitleInput';\nimport PublishUrlInput from 'containers/PublishUrlInput';\nimport PublishThumbnailInput from 'containers/PublishThumbnailInput';\nimport PublishMetadataInputs from 'containers/PublishMetadataInputs';\nimport ChannelSelect from 'containers/ChannelSelect';\n\nclass PublishDetails extends React.Component {\n constructor (props) {\n super(props)\n this.onPublishSubmit = this.onPublishSubmit.bind(this);\n }\n onPublishSubmit () {\n this.props.startPublish(this.props.history);\n }\n render () {\n return (\n
\n
\n \n
\n {/* left column */}\n
\n
\n \n
\n
\n {/* right column */}\n
\n
\n
\n \n
\n
\n \n
\n { (this.props.file.type === 'video/mp4') && (\n
\n \n
\n )}\n
\n \n
\n
\n \n
\n
\n \n
\n
\n

By clicking 'Publish', you affirm that you have the rights to publish this content to the LBRY network, and that you understand the properties of publishing it to a decentralized, user-controlled network. Read more.

\n
\n
\n
\n
\n );\n }\n};\n\nexport default withRouter(PublishDetails);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDetails/view.jsx","import {connect} from 'react-redux';\nimport {updateMetadata} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n title: publish.metadata.title,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onMetadataChange: (name, value) => {\n dispatch(updateMetadata(name, value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTitleInput/index.js","import React from 'react';\n\nclass PublishTitleInput extends React.Component {\n constructor (props) {\n super(props);\n this.handleInput = this.handleInput.bind(this);\n }\n handleInput (e) {\n const name = e.target.name;\n const value = e.target.value;\n this.props.onMetadataChange(name, value);\n }\n render () {\n return (\n \n );\n }\n}\n\nexport default PublishTitleInput;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTitleInput/view.jsx","import {updateClaim, updateError} from 'actions/publish';\nimport {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, publish }) => {\n return {\n loggedInChannelName : channel.loggedInChannel.name,\n loggedInChannelShortId: channel.loggedInChannel.shortId,\n fileName : publish.file.name,\n publishInChannel : publish.publishInChannel,\n selectedChannel : publish.selectedChannel,\n claim : publish.claim,\n urlError : publish.error.url,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onClaimChange: (value) => {\n dispatch(updateClaim(value));\n dispatch(updateError('publishSubmit', null));\n },\n onUrlError: (value) => {\n dispatch(updateError('url', value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishUrlInput/index.js","import React from 'react';\nimport request from 'utils/request';\nimport UrlMiddle from 'components/PublishUrlMiddleDisplay';\n\nclass PublishUrlInput extends React.Component {\n constructor (props) {\n super(props);\n this.handleInput = this.handleInput.bind(this);\n }\n componentDidMount () {\n const { claim, fileName } = this.props;\n if (!claim) {\n this.setClaimName(fileName);\n }\n }\n componentWillReceiveProps ({ claim, fileName }) {\n // if a new file was chosen, update the claim name\n if (fileName !== this.props.fileName) {\n return this.setClaimName(fileName);\n }\n // if the claim has updated, check its availability\n if (claim !== this.props.claim) {\n this.validateClaim(claim);\n }\n }\n handleInput (event) {\n let value = event.target.value;\n value = this.cleanseInput(value);\n // update the state\n this.props.onClaimChange(value);\n }\n cleanseInput (input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n setClaimName (fileName) {\n const fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.'));\n const cleanClaimName = this.cleanseInput(fileNameWithoutEnding);\n this.props.onClaimChange(cleanClaimName);\n }\n validateClaim (claim) {\n if (!claim) {\n return this.props.onUrlError('Enter a url above');\n }\n request(`/api/claim/availability/${claim}`)\n .then(() => {\n this.props.onUrlError(null);\n })\n .catch((error) => {\n this.props.onUrlError(error.message);\n });\n }\n render () {\n const { claim, loggedInChannelName, loggedInChannelShortId, publishInChannel, selectedChannel, urlError } = this.props;\n return (\n
\n
\n spee.ch / \n \n \n { (claim && !urlError) && {'\\u2713'} }\n { urlError && {'\\u2716'} }\n
\n
\n { urlError ? (\n

{urlError}

\n ) : (\n

Choose a custom url

\n )}\n
\n
\n );\n }\n}\n\nexport default PublishUrlInput;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishUrlInput/view.jsx","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction UrlMiddle ({publishInChannel, selectedChannel, loggedInChannelName, loggedInChannelShortId}) {\n if (publishInChannel) {\n if (selectedChannel === loggedInChannelName) {\n return {loggedInChannelName}:{loggedInChannelShortId} /;\n }\n return @channelSelect a channel below /;\n }\n return (\n xyzThis will be a random id /\n );\n}\n\nUrlMiddle.propTypes = {\n publishInChannel : PropTypes.bool.isRequired,\n loggedInChannelName : PropTypes.string,\n loggedInChannelShortId: PropTypes.string,\n};\n\nexport default UrlMiddle;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/PublishUrlMiddleDisplay/index.jsx","import { connect } from 'react-redux';\nimport { onNewThumbnail } from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish: { file } }) => {\n return {\n file,\n };\n};\n\nconst mapDispatchToProps = {\n onNewThumbnail,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishThumbnailInput/index.js","import React from 'react';\n\nfunction dataURItoBlob(dataURI) {\n // convert base64/URLEncoded data component to raw binary data held in a string\n let byteString = atob(dataURI.split(',')[1]);\n // separate out the mime component\n let mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n // write the bytes of the string to a typed array\n let ia = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n return new Blob([ia], {type: mimeString});\n}\n\nclass PublishThumbnailInput extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n videoSource : null,\n error : null,\n sliderMinRange: 1,\n sliderMaxRange: null,\n sliderValue : null,\n };\n this.handleVideoLoadedData = this.handleVideoLoadedData.bind(this);\n this.handleSliderChange = this.handleSliderChange.bind(this);\n this.createThumbnail = this.createThumbnail.bind(this);\n }\n componentDidMount () {\n const { file } = this.props;\n this.setVideoSource(file);\n }\n componentWillReceiveProps (nextProps) {\n // if file changes\n if (nextProps.file && nextProps.file !== this.props.file) {\n const { file } = nextProps;\n this.setVideoSource(file);\n };\n }\n setVideoSource (file) {\n const previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = () => {\n const dataUri = previewReader.result;\n const blob = dataURItoBlob(dataUri);\n const videoSource = URL.createObjectURL(blob);\n this.setState({ videoSource });\n };\n }\n handleVideoLoadedData (event) {\n const duration = event.target.duration;\n const totalMinutes = Math.floor(duration / 60);\n const totalSeconds = Math.floor(duration % 60);\n // set the slider\n this.setState({\n sliderMaxRange: duration * 100,\n sliderValue : duration * 100 / 2,\n totalMinutes,\n totalSeconds,\n });\n // update the current time of the video\n let video = document.getElementById('video-thumb-player');\n video.currentTime = duration / 2;\n }\n handleSliderChange (event) {\n const value = parseInt(event.target.value);\n // update the slider value\n this.setState({\n sliderValue: value,\n });\n // update the current time of the video\n let video = document.getElementById('video-thumb-player');\n video.currentTime = value / 100;\n }\n createThumbnail () {\n // take a snapshot\n let video = document.getElementById('video-thumb-player');\n let canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);\n const dataUrl = canvas.toDataURL();\n const blob = dataURItoBlob(dataUrl);\n const snapshot = new File([blob], `thumbnail.png`, {\n type: 'image/png',\n });\n // set the thumbnail in redux store\n if (snapshot) {\n this.props.onNewThumbnail(snapshot);\n }\n }\n render () {\n const { error, videoSource, sliderMinRange, sliderMaxRange, sliderValue, totalMinutes, totalSeconds } = this.state;\n return (\n
\n \n \n {\n sliderValue ? (\n
\n
\n 0'00\"\n {totalMinutes}'{totalSeconds}\"\n
\n
\n \n
\n
\n ) : (\n

loading...

\n )\n }\n { error ? (\n

{error}

\n ) : (\n

Use slider to set thumbnail

\n )}\n
\n );\n }\n}\n\nexport default PublishThumbnailInput;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishThumbnailInput/view.jsx","import {connect} from 'react-redux';\nimport {updateMetadata, toggleMetadataInputs} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n showMetadataInputs: publish.showMetadataInputs,\n description : publish.metadata.description,\n license : publish.metadata.license,\n nsfw : publish.metadata.nsfw,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onMetadataChange: (name, value) => {\n dispatch(updateMetadata(name, value));\n },\n onToggleMetadataInputs: (value) => {\n dispatch(toggleMetadataInputs(value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishMetadataInputs/index.js","import React from 'react';\nimport ExpandingTextArea from 'components/ExpandingTextArea';\n\nclass PublishMetadataInputs extends React.Component {\n constructor (props) {\n super(props);\n this.toggleShowInputs = this.toggleShowInputs.bind(this);\n this.handleInput = this.handleInput.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n }\n toggleShowInputs () {\n this.props.onToggleMetadataInputs(!this.props.showMetadataInputs);\n }\n handleInput (event) {\n const target = event.target;\n const value = target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n this.props.onMetadataChange(name, value);\n }\n handleSelect (event) {\n const name = event.target.name;\n const selectedOption = event.target.selectedOptions[0].value;\n this.props.onMetadataChange(name, selectedOption);\n }\n render () {\n return (\n
\n {this.props.showMetadataInputs && (\n
\n
\n
\n \n
\n \n
\n
\n\n
\n
\n \n
\n \n
\n
\n\n
\n
\n \n
\n \n
\n
\n
\n )}\n \n
\n );\n }\n}\n\nexport default PublishMetadataInputs;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishMetadataInputs/view.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nclass ExpandingTextarea extends Component {\n constructor (props) {\n super(props);\n this._handleChange = this._handleChange.bind(this);\n }\n componentDidMount () {\n this.adjustTextarea({});\n }\n _handleChange (event) {\n const { onChange } = this.props;\n if (onChange) onChange(event);\n this.adjustTextarea(event);\n }\n adjustTextarea ({ target = this.el }) {\n target.style.height = 0;\n target.style.height = `${target.scrollHeight}px`;\n }\n render () {\n const { ...rest } = this.props;\n return (\n this.el = x}\n onChange={this._handleChange}\n />\n );\n }\n}\n\nExpandingTextarea.propTypes = {\n onChange: PropTypes.func,\n};\n\nexport default ExpandingTextarea;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/ExpandingTextArea/index.jsx","import {connect} from 'react-redux';\nimport {setPublishInChannel, updateSelectedChannel, updateError} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, publish }) => {\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n publishInChannel : publish.publishInChannel,\n selectedChannel : publish.selectedChannel,\n channelError : publish.error.channel,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onPublishInChannelChange: (value) => {\n dispatch(updateError('channel', null));\n dispatch(setPublishInChannel(value));\n },\n onChannelSelect: (value) => {\n dispatch(updateError('channel', null));\n dispatch(updateSelectedChannel(value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelSelect/index.js","import React from 'react';\nimport ChannelLoginForm from 'containers/ChannelLoginForm';\nimport ChannelCreateForm from 'containers/ChannelCreateForm';\nimport * as states from 'constants/publish_channel_select_states';\n\nclass ChannelSelect extends React.Component {\n constructor (props) {\n super(props);\n this.toggleAnonymousPublish = this.toggleAnonymousPublish.bind(this);\n this.handleSelection = this.handleSelection.bind(this);\n }\n toggleAnonymousPublish (event) {\n const value = event.target.value;\n if (value === 'anonymous') {\n this.props.onPublishInChannelChange(false);\n } else {\n this.props.onPublishInChannelChange(true);\n }\n }\n handleSelection (event) {\n const selectedOption = event.target.selectedOptions[0].value;\n this.props.onChannelSelect(selectedOption);\n }\n render () {\n return (\n
\n
\n
\n \n \n
\n
\n \n \n
\n { this.props.channelError ? (\n

{this.props.channelError}

\n ) : (\n

Publish anonymously or in a channel

\n )}\n
\n { this.props.publishInChannel && (\n
\n
\n \n
\n \n
\n { (this.props.selectedChannel === states.LOGIN) && }\n { (this.props.selectedChannel === states.CREATE) && }\n
\n )}\n
\n );\n }\n}\n\nexport default ChannelSelect;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelSelect/view.jsx","import React from 'react';\nimport request from 'utils/request';\n\nclass ChannelLoginForm extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n error : null,\n name : '',\n password: '',\n };\n this.handleInput = this.handleInput.bind(this);\n this.loginToChannel = this.loginToChannel.bind(this);\n }\n handleInput (event) {\n const name = event.target.name;\n const value = event.target.value;\n this.setState({[name]: value});\n }\n loginToChannel (event) {\n event.preventDefault();\n const params = {\n method : 'POST',\n body : JSON.stringify({username: this.state.name, password: this.state.password}),\n headers: new Headers({\n 'Content-Type': 'application/json',\n }),\n credentials: 'include',\n };\n request('login', params)\n .then(({success, channelName, shortChannelId, channelClaimId, message}) => {\n if (success) {\n this.props.onChannelLogin(channelName, shortChannelId, channelClaimId);\n } else {\n this.setState({'error': message});\n };\n })\n .catch(error => {\n if (error.message) {\n this.setState({'error': error.message});\n } else {\n this.setState({'error': error});\n }\n });\n }\n render () {\n return (\n
\n
\n
\n \n
\n
\n @\n \n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n { this.state.error ? (\n

{this.state.error}

\n ) : (\n

Enter the name and password for your channel

\n )}\n
\n \n
\n
\n );\n }\n}\n\nexport default ChannelLoginForm;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelLoginForm/view.jsx","import React from 'react';\nimport ProgressBar from 'components/ProgressBar';\nimport request from 'utils/request';\n\nclass ChannelCreateForm extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n error : null,\n channel : '',\n password: '',\n status : null,\n };\n this.handleChannelInput = this.handleChannelInput.bind(this);\n this.handleInput = this.handleInput.bind(this);\n this.createChannel = this.createChannel.bind(this);\n }\n cleanseChannelInput (input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n handleChannelInput (event) {\n let value = event.target.value;\n value = this.cleanseChannelInput(value);\n this.setState({channel: value});\n if (value) {\n this.updateIsChannelAvailable(value);\n } else {\n this.setState({error: 'Please enter a channel name'});\n }\n }\n handleInput (event) {\n const name = event.target.name;\n const value = event.target.value;\n this.setState({[name]: value});\n }\n updateIsChannelAvailable (channel) {\n const channelWithAtSymbol = `@${channel}`;\n request(`/api/channel/availability/${channelWithAtSymbol}`)\n .then(() => {\n this.setState({'error': null});\n })\n .catch((error) => {\n this.setState({'error': error.message});\n });\n }\n checkIsChannelAvailable (channel) {\n const channelWithAtSymbol = `@${channel}`;\n return request(`/api/channel/availability/${channelWithAtSymbol}`);\n }\n checkIsPasswordProvided (password) {\n return new Promise((resolve, reject) => {\n if (!password || password.length < 1) {\n return reject(new Error('Please provide a password'));\n }\n resolve();\n });\n }\n makePublishChannelRequest (username, password) {\n const params = {\n method : 'POST',\n body : JSON.stringify({username, password}),\n headers: new Headers({\n 'Content-Type': 'application/json',\n }),\n credentials: 'include',\n };\n return new Promise((resolve, reject) => {\n request('/signup', params)\n .then(result => {\n return resolve(result);\n })\n .catch(error => {\n reject(new Error(`Unfortunately, we encountered an error while creating your channel. Please let us know in Discord! ${error.message}`));\n });\n });\n }\n createChannel (event) {\n event.preventDefault();\n this.checkIsPasswordProvided(this.state.password)\n .then(() => {\n return this.checkIsChannelAvailable(this.state.channel);\n })\n .then(() => {\n this.setState({status: 'We are publishing your new channel. Sit tight...'});\n return this.makePublishChannelRequest(this.state.channel, this.state.password);\n })\n .then(result => {\n this.setState({status: null});\n this.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId);\n })\n .catch((error) => {\n if (error.message) {\n this.setState({'error': error.message, status: null});\n } else {\n this.setState({'error': error, status: null});\n };\n });\n }\n render () {\n return (\n
\n { !this.state.status ? (\n
\n
\n
\n \n
\n
\n @\n \n { (this.state.channel && !this.state.error) && {'\\u2713'} }\n { this.state.error && {'\\u2716'} }\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n {this.state.error ? (\n

{this.state.error}

\n ) : (\n

Choose a name and password for your channel

\n )}\n
\n \n
\n
\n ) : (\n
\n

{this.state.status}

\n \n
\n )}\n
\n );\n }\n}\n\nexport default ChannelCreateForm;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelCreateForm/view.jsx","import React from 'react';\n\nconst ActiveStatusBar = () => {\n return | ;\n};\n\nexport default ActiveStatusBar;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/ActiveStatusBar/index.jsx","import React from 'react';\n\nconst InactiveStatusBar = () => {\n return | ;\n};\n\nexport default InactiveStatusBar;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/InactiveStatusBar/index.jsx","import {connect} from 'react-redux';\nimport {clearFile} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n status : publish.status.status,\n message: publish.status.message,\n };\n};\n\nconst mapDispatchToProps = {\n clearFile,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishStatus/index.js","import React from 'react';\nimport ProgressBar from 'components/ProgressBar';\nimport * as publishStates from 'constants/publish_claim_states';\n\nclass PublishStatus extends React.Component {\n render () {\n const { status, message, clearFile } = this.props;\n return (\n
\n {status === publishStates.LOAD_START &&\n
\n

File is loading to server

\n

0%

\n
\n }\n {status === publishStates.LOADING &&\n
\n
\n

File is loading to server

\n

{message}

\n
\n
\n }\n {status === publishStates.PUBLISHING &&\n
\n

Upload complete. Your file is now being published on the blockchain...

\n \n

Curious what magic is happening here? Learn more.

\n
\n }\n {status === publishStates.SUCCESS &&\n
\n

Your publish is complete! You are being redirected to it now.

\n

If you are not automatically redirected, click here.

\n
\n }\n {status === publishStates.FAILED &&\n
\n

Something went wrong...

\n

{message}

\n

For help, post the above error text in the #speech channel on the lbry discord

\n \n
\n }\n
\n );\n }\n};\n\nexport default PublishStatus;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishStatus/view.jsx","export const LOAD_START = 'LOAD_START';\nexport const LOADING = 'LOADING';\nexport const PUBLISHING = 'PUBLISHING';\nexport const SUCCESS = 'SUCCESS';\nexport const FAILED = 'FAILED';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/publish_claim_states.js","import {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n message: publish.disabledMessage,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDisabledMessage/index.js","import React from 'react';\n\nclass PublishDisabledMessage extends React.Component {\n render () {\n const message = this.props.message;\n console.log('this.props.message:', message);\n return (\n
\n

Publishing is currently disabled.

\n

{message}

\n
\n );\n }\n}\n\nexport default PublishDisabledMessage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDisabledMessage/view.jsx","import React from 'react';\nimport NavBar from 'containers/NavBar';\nimport SEO from 'components/SEO';\n\nclass AboutPage extends React.Component {\n render () {\n return (\n
\n \n \n
\n
\n
\n

Spee.ch is an open-source project. Please contribute to the existing site, or fork it and make your own.

\n

TWITTER

\n

GITHUB

\n

DISCORD CHANNEL

\n

DOCUMENTATION

\n
\n
\n
\n

Spee.ch is a media-hosting site that reads from and publishes content to the LBRY blockchain.

\n

Spee.ch is a hosting service, but with the added benefit that it stores your content on a decentralized network of computers -- the LBRY network. This means that your images are stored in multiple locations without a single point of failure.

\n

Contribute

\n

If you have an idea for your own spee.ch-like site on top of LBRY, fork our github repo and go to town!

\n

If you want to improve spee.ch, join our discord channel or solve one of our github issues.

\n
\n
\n
\n
\n );\n }\n};\n\nexport default AboutPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/AboutPage/index.jsx","import {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ channel }) => {\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/LoginPage/index.js","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport SEO from 'components/SEO';\nimport NavBar from 'containers/NavBar';\nimport ChannelLoginForm from 'containers/ChannelLoginForm';\nimport ChannelCreateForm from 'containers/ChannelCreateForm';\n\nclass LoginPage extends React.Component {\n componentWillReceiveProps (newProps) {\n // re-route the user to the homepage if the user is logged in\n if (newProps.loggedInChannelName !== this.props.loggedInChannelName) {\n this.props.history.push(`/`);\n }\n }\n render () {\n return (\n
\n \n \n
\n
\n
\n

Channels allow you to publish and group content under an identity. You can create a channel for yourself, or share one with like-minded friends. You can create 1 channel, or 100, so whether you're documenting important events, or making a public repository for cat gifs (password: '1234'), try creating a channel for it!

\n
\n
\n
\n

Log in to an existing channel:

\n \n

Create a brand new channel:

\n \n
\n
\n
\n
\n );\n }\n};\n\nexport default withRouter(LoginPage);\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/LoginPage/view.jsx","import { connect } from 'react-redux';\nimport { onHandleShowPageUri } from 'actions/show';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n return {\n error : show.request.error,\n requestType: show.request.type,\n };\n};\n\nconst mapDispatchToProps = {\n onHandleShowPageUri,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/ShowPage/index.js","import React from 'react';\nimport ErrorPage from 'pages/ErrorPage';\nimport ShowAssetLite from 'containers/ShowAssetLite';\nimport ShowAssetDetails from 'containers/ShowAssetDetails';\nimport ShowChannel from 'containers/ShowChannel';\n\nimport { CHANNEL, ASSET_LITE, ASSET_DETAILS } from 'constants/show_request_types';\n\nclass ShowPage extends React.Component {\n componentDidMount () {\n this.props.onHandleShowPageUri(this.props.match.params);\n }\n componentWillReceiveProps (nextProps) {\n if (nextProps.match.params !== this.props.match.params) {\n this.props.onHandleShowPageUri(nextProps.match.params);\n }\n }\n render () {\n const { error, requestType } = this.props;\n if (error) {\n return (\n \n );\n }\n switch (requestType) {\n case CHANNEL:\n return ;\n case ASSET_LITE:\n return ;\n case ASSET_DETAILS:\n return ;\n default:\n return

loading...

;\n }\n }\n};\n\nexport default ShowPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/ShowPage/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select request info\n const requestId = show.request.id;\n // select asset info\n let asset;\n const request = show.requestList[requestId] || null;\n const assetList = show.assetList;\n if (request && assetList) {\n const assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetLite/index.js","import React from 'react';\nimport SEO from 'components/SEO';\nimport { Link } from 'react-router-dom';\nimport AssetDisplay from 'containers/AssetDisplay';\n\nclass ShowLite extends React.Component {\n render () {\n const { asset } = this.props;\n if (asset) {\n const { name, claimId } = asset.claimData;\n return (\n
\n \n \n hosted\n via Spee.ch\n
\n );\n }\n return (\n
\n

loading asset data...

\n
\n );\n }\n};\n\nexport default ShowLite;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetLite/view.jsx","import React from 'react';\nimport ProgressBar from 'components/ProgressBar';\nimport { LOCAL_CHECK, UNAVAILABLE, ERROR, AVAILABLE } from 'constants/asset_display_states';\n\nclass AssetDisplay extends React.Component {\n componentDidMount () {\n const { asset: { claimData: { name, claimId } } } = this.props;\n this.props.onFileRequest(name, claimId);\n }\n render () {\n const { status, error, asset: { claimData: { name, claimId, contentType, fileExt, thumbnail } } } = this.props;\n return (\n
\n {(status === LOCAL_CHECK) &&\n
\n

Checking to see if Spee.ch has your asset locally...

\n
\n }\n {(status === UNAVAILABLE) &&\n
\n

Sit tight, we're searching the LBRY blockchain for your asset!

\n \n

Curious what magic is happening here? Learn more.

\n
\n }\n {(status === ERROR) &&\n
\n

Unfortunately, we couldn't download your asset from LBRY. You can help us out by sharing the below error message in the LBRY discord.

\n

{error}

\n
\n }\n {(status === AVAILABLE) &&\n (() => {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n return (\n \n );\n case 'image/gif':\n return (\n \n );\n case 'video/mp4':\n return (\n \n );\n default:\n return (\n

Unsupported file type

\n );\n }\n })()\n }\n
\n );\n }\n};\n\nexport default AssetDisplay;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetDisplay/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select request info\n const requestId = show.request.id;\n // select asset info\n let asset;\n const request = show.requestList[requestId] || null;\n const assetList = show.assetList;\n if (request && assetList) {\n const assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetDetails/index.js","import React from 'react';\nimport SEO from 'components/SEO';\nimport NavBar from 'containers/NavBar';\nimport ErrorPage from 'pages/ErrorPage';\nimport AssetTitle from 'containers/AssetTitle';\nimport AssetDisplay from 'containers/AssetDisplay';\nimport AssetInfo from 'containers/AssetInfo';\n\nclass ShowAssetDetails extends React.Component {\n render () {\n const { asset } = this.props;\n if (asset) {\n const { claimData: { name } } = asset;\n return (\n
\n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n );\n };\n return (\n \n );\n }\n};\n\nexport default ShowAssetDetails;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetDetails/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\nimport { selectAsset } from 'selectors/show';\n\nconst mapStateToProps = ({ show }) => {\n const { claimData: { title } } = selectAsset(show);\n return {\n title,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetTitle/index.js","import React from 'react';\n\nconst AssetTitle = ({ title }) => {\n return (\n
\n {title}\n
\n );\n};\n\nexport default AssetTitle;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetTitle/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\nimport { selectAsset } from 'selectors/show';\n\nconst mapStateToProps = ({ show }) => {\n // select asset\n const asset = selectAsset(show);\n // return props\n return {\n asset,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetInfo/index.js","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nclass AssetInfo extends React.Component {\n constructor (props) {\n super(props);\n this.copyToClipboard = this.copyToClipboard.bind(this);\n }\n copyToClipboard (event) {\n var elementToCopy = event.target.dataset.elementtocopy;\n var element = document.getElementById(elementToCopy);\n element.select();\n try {\n document.execCommand('copy');\n } catch (err) {\n this.setState({error: 'Oops, unable to copy'});\n }\n }\n render () {\n const { asset: { shortId, claimData : { channelName, certificateId, description, name, claimId, fileExt, contentType, thumbnail, host } } } = this.props;\n return (\n
\n {channelName &&\n
\n
\n Channel:\n
\n
\n {channelName}\n
\n
\n }\n\n {description &&\n
\n {description}\n
\n }\n\n
\n
\n
\n Share:\n
\n
\n \n twitter\n facebook\n tumblr\n reddit\n
\n
\n
\n
\n\n
\n \n );\n }\n};\n\nexport default AssetInfo;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetInfo/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select request info\n const requestId = show.request.id;\n // select request\n const previousRequest = show.requestList[requestId] || null;\n // select channel\n let channel;\n if (previousRequest) {\n const channelKey = previousRequest.key;\n channel = show.channelList[channelKey] || null;\n }\n return {\n channel,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowChannel/index.js","import React from 'react';\nimport SEO from 'components/SEO';\nimport ErrorPage from 'pages/ErrorPage';\nimport NavBar from 'containers/NavBar';\nimport ChannelClaimsDisplay from 'containers/ChannelClaimsDisplay';\n\nclass ShowChannel extends React.Component {\n render () {\n const { channel } = this.props;\n if (channel) {\n const { name, longId, shortId } = channel;\n return (\n
\n \n \n
\n
\n

channel name: {name}

\n

full channel id: {longId}

\n

short channel id: {shortId}

\n
\n
\n \n
\n
\n
\n );\n };\n return (\n \n );\n }\n};\n\nexport default ShowChannel;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowChannel/view.jsx","import { connect } from 'react-redux';\nimport { onUpdateChannelClaims } from 'actions/show';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select channel key\n const request = show.requestList[show.request.id];\n const channelKey = request.key;\n // select channel claims\n const channel = show.channelList[channelKey] || null;\n // return props\n return {\n channelKey,\n channel,\n };\n};\n\nconst mapDispatchToProps = {\n onUpdateChannelClaims,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelClaimsDisplay/index.js","import React from 'react';\nimport AssetPreview from 'components/AssetPreview';\n\nclass ChannelClaimsDisplay extends React.Component {\n constructor (props) {\n super(props);\n this.showNextResultsPage = this.showNextResultsPage.bind(this);\n this.showPreviousResultsPage = this.showPreviousResultsPage.bind(this);\n }\n showPreviousResultsPage () {\n const { channel: { claimsData: { currentPage } } } = this.props;\n const previousPage = parseInt(currentPage) - 1;\n this.showNewPage(previousPage);\n }\n showNextResultsPage () {\n const { channel: { claimsData: { currentPage } } } = this.props;\n const nextPage = parseInt(currentPage) + 1;\n this.showNewPage(nextPage);\n }\n showNewPage (page) {\n const { channelKey, channel: { name, longId } } = this.props;\n this.props.onUpdateChannelClaims(channelKey, name, longId, page);\n }\n render () {\n const { channel: { claimsData: { claims, currentPage, totalPages } } } = this.props;\n return (\n
\n {(claims.length > 0) ? (\n
\n {claims.map((claim, index) => )}\n
\n {(currentPage > 1) &&\n \n }\n {(currentPage < totalPages) &&\n \n }\n
\n
\n ) : (\n

There are no claims in this channel

\n )}\n
\n );\n }\n};\n\nexport default ChannelClaimsDisplay;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelClaimsDisplay/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({site: {defaults: { defaultThumbnail }}}) => {\n return {\n defaultThumbnail,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/AssetPreview/index.js","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nconst AssetPreview = ({ defaultThumbnail, claimData: { name, claimId, fileExt, contentType, thumbnail } }) => {\n const directSourceLink = `${claimId}/${name}.${fileExt}`;\n const showUrlLink = `/${claimId}/${name}`;\n return (\n
\n \n {(() => {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n case 'image/gif':\n return (\n \n );\n case 'video/mp4':\n return (\n \n );\n default:\n return (\n

unsupported file type

\n );\n }\n })()}\n \n
\n );\n};\n\nexport default AssetPreview;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/AssetPreview/view.jsx","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ site: { host, title } }) => {\n return {\n host,\n title,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/FourOhFourPage/index.jsx","import React from 'react';\nimport NavBar from 'containers/NavBar';\nimport Helmet from 'react-helmet';\n\nclass FourOhForPage extends React.Component {\n render () {\n const {title, host} = this.props;\n return (\n
\n \n {title} - 404\n \n \n \n
\n

404

\n

That page does not exist

\n
\n
\n );\n }\n};\n\nexport default FourOhForPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/FourOhFourPage/view.jsx","const { sendGAServeEvent } = require('../helpers/googleAnalytics');\nconst { determineResponseType, flipClaimNameAndIdForBackwardsCompatibility, logRequestData, getClaimIdAndServeAsset } = require('../helpers/serveHelpers.js');\nconst lbryUri = require('../helpers/lbryUri.js');\nconst handleShowRender = require('../helpers/handleShowRender.jsx');\nconst SERVE = 'SERVE';\n\nmodule.exports = (app) => {\n // route to serve a specific asset using the channel or claim id\n app.get('/:identifier/:claim', (req, res) => {\n const { headers, ip, originalUrl, params } = req;\n // decide if this is a show request\n let hasFileExtension;\n try {\n ({ hasFileExtension } = lbryUri.parseModifier(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n let responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n let claimName;\n try {\n ({ claimName } = lbryUri.parseClaim(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n // parse the identifier\n let isChannel, channelName, channelClaimId, claimId;\n try {\n ({ isChannel, channelName, channelClaimId, claimId } = lbryUri.parseIdentifier(params.identifier));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n if (!isChannel) {\n [claimId, claimName] = flipClaimNameAndIdForBackwardsCompatibility(claimId, claimName);\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, channelName, claimId);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res);\n });\n // route to serve the winning asset at a claim or a channel page\n app.get('/:claim', (req, res) => {\n const { headers, ip, originalUrl, params } = req;\n // decide if this is a show request\n let hasFileExtension;\n try {\n ({ hasFileExtension } = lbryUri.parseModifier(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n let responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n let claimName;\n try {\n ({claimName} = lbryUri.parseClaim(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, null, null);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(null, null, claimName, null, originalUrl, ip, res);\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/asset-routes.js","const logger = require('winston');\nconst { getClaimId, getLocalFileRecord } = require('../controllers/serveController.js');\nconst { handleErrorResponse } = require('./errorHandlers.js');\n\nconst SERVE = 'SERVE';\nconst SHOW = 'SHOW';\nconst NO_FILE = 'NO_FILE';\nconst NO_CHANNEL = 'NO_CHANNEL';\nconst NO_CLAIM = 'NO_CLAIM';\n\nfunction clientAcceptsHtml ({accept}) {\n return accept && accept.match(/text\\/html/);\n};\n\nfunction requestIsFromBrowser (headers) {\n return headers['user-agent'] && headers['user-agent'].match(/Mozilla/);\n};\n\nfunction clientWantsAsset ({accept, range}) {\n const imageIsWanted = accept && accept.match(/image\\/.*/) && !accept.match(/text\\/html/) && !accept.match(/text\\/\\*/);\n const videoIsWanted = accept && range;\n return imageIsWanted || videoIsWanted;\n};\n\nfunction isValidClaimId (claimId) {\n return ((claimId.length === 40) && !/[^A-Za-z0-9]/g.test(claimId));\n};\n\nfunction isValidShortId (claimId) {\n return claimId.length === 1; // it should really evaluate the short url itself\n};\n\nfunction isValidShortIdOrClaimId (input) {\n return (isValidClaimId(input) || isValidShortId(input));\n};\n\nfunction serveAssetToClient (claimId, name, res) {\n return getLocalFileRecord(claimId, name)\n .then(fileRecord => {\n // check that a local record was found\n if (fileRecord === NO_FILE) {\n return res.status(307).redirect(`/api/claim/get/${name}/${claimId}`);\n }\n // serve the file\n const {filePath, fileType} = fileRecord;\n logger.verbose(`serving file: ${filePath}`);\n const sendFileOptions = {\n headers: {\n 'X-Content-Type-Options': 'nosniff',\n 'Content-Type' : fileType || 'image/jpeg',\n },\n };\n res.status(200).sendFile(filePath, sendFileOptions);\n })\n .catch(error => {\n throw error;\n });\n};\n\nmodule.exports = {\n getClaimIdAndServeAsset (channelName, channelClaimId, claimName, claimId, originalUrl, ip, res) {\n // get the claim Id and then serve the asset\n getClaimId(channelName, channelClaimId, claimName, claimId)\n .then(fullClaimId => {\n if (fullClaimId === NO_CLAIM) {\n return res.status(404).json({success: false, message: 'no claim id could be found'});\n } else if (fullClaimId === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'no channel id could be found'});\n }\n serveAssetToClient(fullClaimId, claimName, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'success');\n })\n .catch(error => {\n handleErrorResponse(originalUrl, ip, error, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'fail');\n });\n },\n determineResponseType (hasFileExtension, headers) {\n let responseType;\n if (hasFileExtension) {\n responseType = SERVE; // assume a serve request if file extension is present\n if (clientAcceptsHtml(headers)) { // if the request comes from a browser, change it to a show request\n responseType = SHOW;\n }\n } else {\n responseType = SHOW;\n if (clientWantsAsset(headers) && requestIsFromBrowser(headers)) { // this is in case someone embeds a show url\n logger.debug('Show request came from browser but wants an image/video. Changing response to serve...');\n responseType = SERVE;\n }\n }\n return responseType;\n },\n flipClaimNameAndIdForBackwardsCompatibility (identifier, name) {\n // this is a patch for backwards compatability with '/name/claim_id' url format\n if (isValidShortIdOrClaimId(name) && !isValidShortIdOrClaimId(identifier)) {\n const tempName = name;\n name = identifier;\n identifier = tempName;\n }\n return [identifier, name];\n },\n logRequestData (responseType, claimName, channelName, claimId) {\n logger.debug('responseType ===', responseType);\n logger.debug('claim name === ', claimName);\n logger.debug('channel name ===', channelName);\n logger.debug('claim id ===', claimId);\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/serveHelpers.js","const logger = require('winston');\n\nmodule.exports = {\n REGEXP_INVALID_CLAIM : /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS : /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR : '@',\n parseIdentifier : function (identifier) {\n logger.debug('parsing identifier:', identifier);\n const componentsRegex = new RegExp(\n '([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, value, modifierSeperator, modifier] = componentsRegex\n .exec(identifier)\n .map(match => match || null);\n logger.debug(`${proto}, ${value}, ${modifierSeperator}, ${modifier}`);\n\n // Validate and process name\n if (!value) {\n throw new Error(`Check your url. No channel name provided before \"${modifierSeperator}\"`);\n }\n const isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n const channelName = isChannel ? value : null;\n let claimId;\n if (isChannel) {\n if (!channelName) {\n throw new Error('No channel name after @.');\n }\n const nameBadChars = (channelName).match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error(`Invalid characters in channel name: ${nameBadChars.join(', ')}.`);\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n let channelClaimId;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error(`No modifier provided after separator \"${modifierSeperator}\"`);\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error(`The \"${modifierSeperator}\" modifier is not currently supported`);\n }\n }\n return {\n isChannel,\n channelName,\n channelClaimId,\n claimId,\n };\n },\n parseClaim: function (claim) {\n logger.debug('parsing name:', claim);\n const componentsRegex = new RegExp(\n '([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, claimName, modifierSeperator, modifier] = componentsRegex\n .exec(claim)\n .map(match => match || null);\n logger.debug(`${proto}, ${claimName}, ${modifierSeperator}, ${modifier}`);\n\n // Validate and process name\n if (!claimName) {\n throw new Error('No claim name provided before .');\n }\n const nameBadChars = (claimName).match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error(`Invalid characters in claim name: ${nameBadChars.join(', ')}.`);\n }\n // Validate and process modifier\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error(`No file extension provided after separator ${modifierSeperator}.`);\n }\n if (modifierSeperator !== '.') {\n throw new Error(`The ${modifierSeperator} modifier is not supported in the claim name`);\n }\n }\n // return results\n return {\n claimName,\n };\n },\n parseModifier: function (claim) {\n logger.debug('parsing modifier:', claim);\n const componentsRegex = new RegExp(\n '([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, claimName, modifierSeperator, modifier] = componentsRegex\n .exec(claim)\n .map(match => match || null);\n logger.debug(`${proto}, ${claimName}, ${modifierSeperator}, ${modifier}`);\n // Validate and process modifier\n let hasFileExtension = false;\n if (modifierSeperator) {\n hasFileExtension = true;\n }\n return {\n hasFileExtension,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/lbryUri.js","import React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport { createStore, applyMiddleware } from 'redux';\nimport Reducer from '../../client/reducers/index';\nimport { Provider } from 'react-redux';\nimport { StaticRouter } from 'react-router-dom';\nimport GAListener from '../../client/components/GAListener/index';\nimport App from '../../client/app';\nimport renderFullPage from './renderFullPage';\nimport createSagaMiddleware from 'redux-saga';\nimport { call } from 'redux-saga/effects';\nimport { handleShowPageUri } from '../../client/sagas/show_uri';\nimport { onHandleShowPageUri } from '../../client/actions/show';\n\nimport Helmet from 'react-helmet';\n\nconst returnSagaWithParams = (saga, params) => {\n return function * () {\n yield call(saga, params);\n };\n};\n\nmodule.exports = (req, res) => {\n let context = {};\n\n // create and apply middleware\n const sagaMiddleware = createSagaMiddleware();\n const middleware = applyMiddleware(sagaMiddleware);\n\n // create a new Redux store instance\n const store = createStore(Reducer, middleware);\n\n // create saga\n const action = onHandleShowPageUri(req.params);\n const saga = returnSagaWithParams(handleShowPageUri, action);\n\n // run the saga middleware\n sagaMiddleware\n .run(saga)\n .done\n .then(() => {\n // render component to a string\n const html = renderToString(\n \n \n \n \n \n \n \n );\n\n // get head tags from helmet\n const helmet = Helmet.renderStatic();\n\n // check for a redirect\n if (context.url) {\n return res.redirect(301, context.url);\n }\n\n // get the initial state from our Redux store\n const preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send(renderFullPage(helmet, html, preloadedState));\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/handleShowRender.jsx","module.exports = require(\"redux-saga\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"redux-saga\"\n// module id = 146\n// module chunks = 0","import { call, put, takeLatest } from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { onRequestError, onNewChannelRequest, onNewAssetRequest } from 'actions/show';\nimport { newAssetRequest } from 'sagas/show_asset';\nimport { newChannelRequest } from 'sagas/show_channel';\nimport lbryUri from 'utils/lbryUri';\n\nfunction * parseAndUpdateIdentifierAndClaim (modifier, claim) {\n // this is a request for an asset\n // claim will be an asset claim\n // the identifier could be a channel or a claim id\n let isChannel, channelName, channelClaimId, claimId, claimName, extension;\n try {\n ({ isChannel, channelName, channelClaimId, claimId } = lbryUri.parseIdentifier(modifier));\n ({ claimName, extension } = lbryUri.parseClaim(claim));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // trigger an new action to update the store\n if (isChannel) {\n return yield call(newAssetRequest, onNewAssetRequest(claimName, null, channelName, channelClaimId, extension));\n };\n yield call(newAssetRequest, onNewAssetRequest(claimName, claimId, null, null, extension));\n}\nfunction * parseAndUpdateClaimOnly (claim) {\n // this could be a request for an asset or a channel page\n // claim could be an asset claim or a channel claim\n let isChannel, channelName, channelClaimId;\n try {\n ({ isChannel, channelName, channelClaimId } = lbryUri.parseIdentifier(claim));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // trigger an new action to update the store\n // return early if this request is for a channel\n if (isChannel) {\n return yield call(newChannelRequest, onNewChannelRequest(channelName, channelClaimId));\n }\n // if not for a channel, parse the claim request\n let claimName, extension;\n try {\n ({claimName, extension} = lbryUri.parseClaim(claim));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n yield call(newAssetRequest, onNewAssetRequest(claimName, null, null, null, extension));\n}\n\nexport function * handleShowPageUri (action) {\n const { identifier, claim } = action.data;\n if (identifier) {\n return yield call(parseAndUpdateIdentifierAndClaim, identifier, claim);\n }\n yield call(parseAndUpdateClaimOnly, claim);\n};\n\nexport function * watchHandleShowPageUri () {\n yield takeLatest(actions.HANDLE_SHOW_URI, handleShowPageUri);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/show_uri.js","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { addRequestToRequestList, onRequestError, onRequestUpdate, addAssetToAssetList } from 'actions/show';\nimport { getLongClaimId, getShortId, getClaimData } from 'api/assetApi';\nimport { selectShowState } from 'selectors/show';\nimport { selectSiteHost } from 'selectors/site';\n\nexport function * newAssetRequest (action) {\n const { requestType, requestId, name, modifier } = action.data;\n // put an action to update the request in redux\n yield put(onRequestUpdate(requestType, requestId));\n // is this an existing request?\n // If this uri is in the request list, it's already been fetched\n const state = yield select(selectShowState);\n const host = yield select(selectSiteHost);\n if (state.requestList[requestId]) {\n return null;\n }\n // get long id && add request to request list\n let longId;\n try {\n ({data: longId} = yield call(getLongClaimId, host, name, modifier));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n const assetKey = `a#${name}#${longId}`;\n yield put(addRequestToRequestList(requestId, null, assetKey));\n // is this an existing asset?\n // If this asset is in the asset list, it's already been fetched\n if (state.assetList[assetKey]) {\n return null;\n }\n // get short Id\n let shortId;\n try {\n ({data: shortId} = yield call(getShortId, host, name, longId));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // get asset claim data\n let claimData;\n try {\n ({data: claimData} = yield call(getClaimData, host, name, longId));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // add asset to asset list\n yield put(addAssetToAssetList(assetKey, null, name, longId, shortId, claimData));\n // clear any errors in request error\n yield put(onRequestError(null));\n};\n\nexport function * watchNewAssetRequest () {\n yield takeLatest(actions.ASSET_REQUEST_NEW, newAssetRequest);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/show_asset.js","import Request from 'utils/request';\n\nexport function getLongClaimId (host, name, modifier) {\n let body = {};\n // create request params\n if (modifier) {\n if (modifier.id) {\n body['claimId'] = modifier.id;\n } else {\n body['channelName'] = modifier.channel.name;\n body['channelClaimId'] = modifier.channel.id;\n }\n }\n body['claimName'] = name;\n const params = {\n method : 'POST',\n headers: { 'Content-Type': 'application/json' },\n body : JSON.stringify(body),\n };\n // create url\n const url = `${host}/api/claim/long-id`;\n // return the request promise\n return Request(url, params);\n};\n\nexport function getShortId (host, name, claimId) {\n const url = `${host}/api/claim/short-id/${claimId}/${name}`;\n return Request(url);\n};\n\nexport function getClaimData (host, name, claimId) {\n const url = `${host}/api/claim/data/${name}/${claimId}`;\n return Request(url);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/api/assetApi.js","import {call, put, select, takeLatest} from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { addNewChannelToChannelList, addRequestToRequestList, onRequestError, onRequestUpdate, updateChannelClaims } from 'actions/show';\nimport { getChannelClaims, getChannelData } from 'api/channelApi';\nimport { selectShowState } from 'selectors/show';\nimport { selectSiteHost } from 'selectors/site';\n\nexport function * newChannelRequest (action) {\n const { requestType, requestId, channelName, channelId } = action.data;\n // put an action to update the request in redux\n yield put(onRequestUpdate(requestType, requestId));\n // is this an existing request?\n // If this uri is in the request list, it's already been fetched\n const state = yield select(selectShowState);\n const host = yield select(selectSiteHost);\n if (state.requestList[requestId]) {\n return null;\n }\n // get channel long id\n let longId, shortId;\n try {\n ({ data: {longChannelClaimId: longId, shortChannelClaimId: shortId} } = yield call(getChannelData, host, channelName, channelId));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // store the request in the channel requests list\n const channelKey = `c#${channelName}#${longId}`;\n yield put(addRequestToRequestList(requestId, null, channelKey));\n // is this an existing channel?\n // If this channel is in the channel list, it's already been fetched\n if (state.channelList[channelKey]) {\n return null;\n }\n // get channel claims data\n let claimsData;\n try {\n ({ data: claimsData } = yield call(getChannelClaims, host, longId, channelName, 1));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // store the channel data in the channel list\n yield put(addNewChannelToChannelList(channelKey, channelName, shortId, longId, claimsData));\n // clear any request errors\n yield put(onRequestError(null));\n}\n\nexport function * watchNewChannelRequest () {\n yield takeLatest(actions.CHANNEL_REQUEST_NEW, newChannelRequest);\n};\n\nfunction * getNewClaimsAndUpdateChannel (action) {\n const { channelKey, name, longId, page } = action.data;\n const host = yield select(selectSiteHost);\n let claimsData;\n try {\n ({ data: claimsData } = yield call(getChannelClaims, host, longId, name, page));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n yield put(updateChannelClaims(channelKey, claimsData));\n}\n\nexport function * watchUpdateChannelClaims () {\n yield takeLatest(actions.CHANNEL_CLAIMS_UPDATE_ASYNC, getNewClaimsAndUpdateChannel);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/show_channel.js","import Request from 'utils/request';\n\nexport function getChannelData (host, id, name) {\n if (!id) id = 'none';\n const url = `${host}/api/channel/data/${name}/${id}`;\n return Request(url);\n};\n\nexport function getChannelClaims (host, longId, name, page) {\n if (!page) page = 1;\n const url = `${host}/api/channel/claims/${name}/${longId}/${page}`;\n return Request(url);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/api/channelApi.js","module.exports = {\n REGEXP_INVALID_CLAIM : /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS : /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR : '@',\n parseIdentifier : function (identifier) {\n const componentsRegex = new RegExp(\n '([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, value, modifierSeperator, modifier] = componentsRegex // eslint-disable-line no-unused-vars\n .exec(identifier)\n .map(match => match || null);\n\n // Validate and process name\n if (!value) {\n throw new Error(`Check your URL. No channel name provided before \"${modifierSeperator}\"`);\n }\n const isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n const channelName = isChannel ? value : null;\n let claimId;\n if (isChannel) {\n if (!channelName) {\n throw new Error('Check your URL. No channel name after \"@\".');\n }\n const nameBadChars = (channelName).match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error(`Check your URL. Invalid characters in channel name: \"${nameBadChars.join(', ')}\".`);\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n let channelClaimId;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error(`Check your URL. No modifier provided after separator \"${modifierSeperator}\"`);\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error(`Check your URL. The \"${modifierSeperator}\" modifier is not currently supported`);\n }\n }\n return {\n isChannel,\n channelName,\n channelClaimId: channelClaimId || null,\n claimId : claimId || null,\n };\n },\n parseClaim: function (name) {\n const componentsRegex = new RegExp(\n '([^:$#/.]*)' + // name (stops at the first extension)\n '([:$#.]?)([^/]*)' // extension separator, extension (stops at the first path separator or end)\n );\n const [proto, claimName, extensionSeperator, extension] = componentsRegex // eslint-disable-line no-unused-vars\n .exec(name)\n .map(match => match || null);\n\n // Validate and process name\n if (!claimName) {\n throw new Error('Check your URL. No claim name provided before \".\"');\n }\n const nameBadChars = (claimName).match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error(`Check your URL. Invalid characters in claim name: \"${nameBadChars.join(', ')}\".`);\n }\n // Validate and process extension\n if (extensionSeperator) {\n if (!extension) {\n throw new Error(`Check your URL. No file extension provided after separator \"${extensionSeperator}\".`);\n }\n if (extensionSeperator !== '.') {\n throw new Error(`Check your URL. The \"${extensionSeperator}\" separator is not supported in the claim name.`);\n }\n }\n return {\n claimName,\n extension: extension || null,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/lbryUri.js","const handlePageRender = require('../helpers/handlePageRender.jsx');\n\nmodule.exports = app => {\n // a catch-all route if someone visits a page that does not exist\n app.use('*', (req, res) => {\n // send response\n handlePageRender(req, res);\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/fallback-routes.js","const { logLevel } = require('../../config/loggerConfig');\n\nmodule.exports = (winston) => {\n // configure\n winston.configure({\n transports: [\n new (winston.transports.Console)({\n level : logLevel,\n timestamp : false,\n colorize : true,\n prettyPrint : true,\n handleExceptions : true,\n humanReadableUnhandledException: true,\n }),\n ],\n });\n // test all the log levels\n winston.error('Level 0');\n winston.warn('Level 1');\n winston.info('Level 2');\n winston.verbose('Level 3');\n winston.debug('Level 4');\n winston.silly('Level 5');\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/configureLogger.js","const loggerConfig = {\n logLevel: 'debug', // options: silly, debug, verbose, info\n};\n\nmodule.exports = loggerConfig;\n\n\n\n// WEBPACK FOOTER //\n// ./config/loggerConfig.js","const winstonSlackWebHook = require('winston-slack-webhook').SlackWebHook;\nconst slackConfig = require('../../config/slackConfig.js');\n\nmodule.exports = (winston) => {\n const {slackWebHook, slackErrorChannel, slackInfoChannel} = slackConfig;\n if (slackWebHook) {\n // add a transport for errors to slack\n if (slackErrorChannel) {\n winston.add(winstonSlackWebHook, {\n name : 'slack-errors-transport',\n level : 'warn',\n webhookUrl: slackWebHook,\n channel : slackErrorChannel,\n username : 'spee.ch',\n iconEmoji : ':face_with_head_bandage:',\n });\n };\n if (slackInfoChannel) {\n winston.add(winstonSlackWebHook, {\n name : 'slack-info-transport',\n level : 'info',\n webhookUrl: slackWebHook,\n channel : slackInfoChannel,\n username : 'spee.ch',\n iconEmoji : ':nerd_face:',\n });\n };\n // send test message\n winston.error('Slack \"error\" logging is online.');\n winston.info('Slack \"info\" logging is online.');\n } else {\n winston.warn('Slack logging is not enabled because no slackWebHook config var provided.');\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/configureSlack.js","module.exports = require(\"winston-slack-webhook\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"winston-slack-webhook\"\n// module id = 157\n// module chunks = 0","function SlackConfig () {\n this.slackWebHook = 'default';\n this.slackErrorChannel = 'default';\n this.slackInfoChannel = 'default';\n};\n\nmodule.exports = new SlackConfig();\n\n\n\n// WEBPACK FOOTER //\n// ./config/slackConfig.js"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index c7c9672e..4f865613 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ "scripts": { "test": "mocha --recursive", "test-all": "mocha --recursive", - "start": "node index.js", - "start-dev": "nodemon index.js", + "start": "node server/index.js", + "start-dev": "nodemon server/index.js", "lint": "eslint .", "fix": "eslint . --fix", "precommit": "eslint .", diff --git a/server.js b/server/server.js similarity index 78% rename from server.js rename to server/server.js index bb0dbdf5..84ef5fab 100644 --- a/server.js +++ b/server/server.js @@ -6,18 +6,18 @@ const Handlebars = require('handlebars'); const helmet = require('helmet'); const passport = require('passport'); const cookieSession = require('cookie-session'); -const { serializeSpeechUser, deserializeSpeechUser } = require('./server/helpers/authHelpers.js'); +const { serializeSpeechUser, deserializeSpeechUser } = require('./helpers/authHelpers.js'); const logger = require('winston'); // require configs -const {auth: { sessionKey }, details: { port: PORT }} = require('./config/siteConfig.js'); +const {auth: { sessionKey }, details: { port: PORT }} = require('../config/siteConfig.js'); -const db = require('./server/models'); +const db = require('./models/index'); // configure logging -require('./server/helpers/configureLogger.js')(logger); +require('./helpers/configureLogger.js')(logger); // configure slack -require('./server/helpers/configureSlack.js')(logger); +require('./helpers/configureSlack.js')(logger); // create an Express application const app = express(); @@ -38,8 +38,8 @@ app.use((req, res, next) => { // custom logging middleware to log all incoming // configure passport passport.serializeUser(serializeSpeechUser); passport.deserializeUser(deserializeSpeechUser); -const localSignupStrategy = require('./server/passport/local-signup.js'); -const localLoginStrategy = require('./server/passport/local-login.js'); +const localSignupStrategy = require('./passport/local-signup.js'); +const localLoginStrategy = require('./passport/local-login.js'); passport.use('local-signup', localSignupStrategy); passport.use('local-login', localLoginStrategy); // initialize passport @@ -64,11 +64,11 @@ db.sequelize .sync() .then(() => { // set the routes on the app - require('./server/routes/auth-routes.js')(app); - require('./server/routes/api-routes.js')(app); - require('./server/routes/page-routes.js')(app); - require('./server/routes/asset-routes.js')(app); - require('./server/routes/fallback-routes.js')(app); + require('./routes/auth-routes.js')(app); + require('./routes/api-routes.js')(app); + require('./routes/page-routes.js')(app); + require('./routes/asset-routes.js')(app); + require('./routes/fallback-routes.js')(app); // create server const http = require('http'); return http.Server(app); diff --git a/webpack.server.common.js b/webpack.server.common.js index 6d21cdd8..c631af87 100644 --- a/webpack.server.common.js +++ b/webpack.server.common.js @@ -8,10 +8,10 @@ module.exports = { __dirname: false, }, externals: [nodeExternals()], - entry : ['babel-polyfill', 'whatwg-fetch', './server.js'], + entry : ['babel-polyfill', 'whatwg-fetch', './server/server.js'], output : { - path : Path.join(__dirname, '/'), - publicPath : '/', + path : Path.join(__dirname, 'server/'), + publicPath : 'server/', filename : 'index.js', library : '', libraryTarget: 'commonjs-module', From 9a947f7bf8e542efafd70665c7fcf019944289d1 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Mon, 19 Mar 2018 18:28:36 -0700 Subject: [PATCH 15/16] added server and client production build scripts --- README.md | 2 +- package.json | 8 +++++--- webpack.prod.client.js | 20 ++++++++++++++++++++ webpack.prod.server.js | 20 ++++++++++++++++++++ webpack.server.common.js | 4 ++-- 5 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 webpack.prod.client.js create mode 100644 webpack.prod.server.js diff --git a/README.md b/README.md index 980b8179..f03e0cd5 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Spee.ch is a web app that reads and publishes images and videos to and from the * webpack * During the build process, webpack creates two bundles for this project: * (1) a client-side app bundle which will be located at `public/bundle/bundle.js` - * (2) a server bundle which will be located at `server/index.js` + * (2) a server bundle which will be located at `index.js` * configuration * the `config/` folder contains all of the required config files. The project contains `.example` files which can be copied to create the necessary `.js` files * the `devConfig/` folder contains optional config files. Updating these files is not necessary. If you update these files, make sure to add them to your `.gitignore` file so they are not included in source control. diff --git a/package.json b/package.json index 4f865613..334a49cb 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ "scripts": { "test": "mocha --recursive", "test-all": "mocha --recursive", - "start": "node server/index.js", - "start-dev": "nodemon server/index.js", + "start": "node index.js", + "start-dev": "nodemon index.js", "lint": "eslint .", "fix": "eslint . --fix", "precommit": "eslint .", @@ -15,7 +15,9 @@ "build-dev": "webpack --config webpack.dev.js", "build-dev-client": "webpack --config webpack.dev.client.js", "build-dev-server": "webpack --config webpack.dev.server.js", - "build": "webpack --config webpack.prod.js" + "build": "webpack --config webpack.prod.js", + "build-client": "webpack --config webpack.prod.client.js", + "build-server": "webpack --config webpack.prod.server.js" }, "repository": { "type": "git", diff --git a/webpack.prod.client.js b/webpack.prod.client.js new file mode 100644 index 00000000..242a19a3 --- /dev/null +++ b/webpack.prod.client.js @@ -0,0 +1,20 @@ +const webpack = require('webpack'); +const merge = require('webpack-merge'); +const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); +const clientBaseConfig = require('./webpack.client.common.js'); + +const productionBuildConfig = { + devtool: 'source-map', + plugins: [ + new UglifyJSPlugin({ + sourceMap: true, + }), + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify('production'), + }), + ], +}; + +module.exports = [ + merge(clientBaseConfig, productionBuildConfig), +]; diff --git a/webpack.prod.server.js b/webpack.prod.server.js new file mode 100644 index 00000000..56354f85 --- /dev/null +++ b/webpack.prod.server.js @@ -0,0 +1,20 @@ +const webpack = require('webpack'); +const merge = require('webpack-merge'); +const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); +const serverBaseConfig = require('./webpack.server.common.js'); + +const productionBuildConfig = { + devtool: 'source-map', + plugins: [ + new UglifyJSPlugin({ + sourceMap: true, + }), + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify('production'), + }), + ], +}; + +module.exports = [ + merge(serverBaseConfig, productionBuildConfig), +]; diff --git a/webpack.server.common.js b/webpack.server.common.js index c631af87..ed2c0661 100644 --- a/webpack.server.common.js +++ b/webpack.server.common.js @@ -10,8 +10,8 @@ module.exports = { externals: [nodeExternals()], entry : ['babel-polyfill', 'whatwg-fetch', './server/server.js'], output : { - path : Path.join(__dirname, 'server/'), - publicPath : 'server/', + path : Path.join(__dirname, '/'), + publicPath : '/', filename : 'index.js', library : '', libraryTarget: 'commonjs-module', From 4d0a80603f35970cf464ef19f5fb9d53e27766d6 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Mon, 19 Mar 2018 18:36:31 -0700 Subject: [PATCH 16/16] fixed readme --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f03e0cd5..63ee2a32 100644 --- a/README.md +++ b/README.md @@ -26,17 +26,16 @@ Spee.ch is a web app that reads and publishes images and videos to and from the * install and run this [`speech-sync`](https://github.com/billbitt/spee.ch-sync) tool ## Development & App Structure -* the `client/` folder houses all of the `react` and `redux` code. - * `client.js` is the entry point for the app. This file is the entry point for webpack to build the client bundle. - * `app.jsx` is the parent component that houses the rest of the app components - * components are located in `client/components`, `client/containers`, and `client/pages` +* the `client/` folder houses all of the `react` and `redux` code + * `client.js` is the entry point for the react app + * [react components](https://reactjs.org/docs/react-component.html) are located in `client/components`, `client/containers`, and `client/pages` * `/components` contains the 'dumb' components that receive props (if any) from their parents * `/containers` contains the 'smart' redux-connected components that receive props from the `redux-store` * `/pages` contains the components which act as the main pages of the app * actions are located in the `client/actions` folder * reducers are located in the `client/reducers` folder * sagas are located in the `client/sagas` folder -* the `server/` folder contains all of server code. +* the `server/` folder contains all of server code * `server.js` is the entry point for the server. It creates the [express app](https://expressjs.com/), requires the routes, syncs the database, and starts the server listening on the `PORT` designated in the config file. This file is the entry point for webpack to build the server bundle. * the `/routes` folder contains all of the routes for the express app * the `/models` folder contains all of the models which the app uses to interact with the `mysql` database. Note: this app uses the [sequelize](http://docs.sequelizejs.com/) orm.